OpenLayers3 multipolygon.getArea возвращает значения, превышающие ожидаемые.

Я даю свои первые шаги с OpenLayers3, и я получаю несколько странные результаты при попытке получить область выбранного объекта.

У меня есть карта, которая загружает векторный слой из источника KML. В этих KML есть несколько объектов, представленных в виде мультиполигонов, которые представляют собой границы некоторых регионов северной Испании.

Когда я выбираю функции, они правильно меняют свои стили в соответствии с моим кодом, но когда я пытаюсь получить их площадь с помощью multipolygons.getArea, я получаю значения, намного превышающие ожидаемые (почти вдвое).

Код моей карты:

<div id="map" class="map" style="width:100%; height:600px;"></div>
<script type="text/javascript">

  var projection = new ol.proj.get("EPSG:3857");

  var mapa = new ol.layer.Tile({
    source: new ol.source.MapQuest({ layer: 'osm' })
  });

  var kmlLayer = new ol.layer.Vector({
    source: new ol.source.KML({
      projection: projection,
      url: "/Content/Documents/CCAA.txt",
      extractStyles: false
    })
  });

  var select = new ol.interaction.Select({
    condition: ol.events.condition.click,
    style: new ol.style.Style({
      fill: new ol.style.Fill({
        color: "rgba(0, 255, 0, 0.5)"
      }),
      stroke: new ol.style.Stroke({
        color: "#000000",
        width: 2
      })
    })
  });

  var map = new ol.Map({
    interactions: new ol.interaction.defaults().extend([select]),
    target: 'map',
    layers: [ mapa, kmlLayer ],
    view: new ol.View({
      center: [-426970.8463461736, 5299807.853963373],
      projection: projection,
      zoom: 7
    })
  });

  select.on('select', function (e) {
    var feature = e.selected[0];
    console.log(feature.getGeometry().getArea());
  });

  map.addControl(new ol.control.ScaleLine());

</script>

А это пример данных KML:

<Placemark>
 <MultiGeometry>
  <Polygon>
    <outerBoundaryIs>
      <LinearRing>
        <coordinates>
          -4.57486104965204,43.4001388549807,0 
          .....
        </coordinates>
      </LinearRing>
    </outerBoundaryIs>
  </Polygon>
</Multigeometry>
</Placemark>

getArea этого мультиполигона возвращает 20021810258,82251 (я предполагаю, что это квадратные метры, так как я использую проекцию Меркатора), в то время как ожидаемый результат будет около 10000 квадратных километров.

Я знаю о трудностях и проблемах с проекциями на плоскость, и я ожидал результата грубой площади, но я получаю вдвое большее значение, чем ожидал... это кажется слишком большим для проблемы с проекциями или вычислениями.. , так что я думаю, что я что-то упускаю здесь.

Любое понимание этого вопроса будет высоко оценено.


person Bardo    schedule 15.04.2015    source источник


Ответы (1)


Это очень похоже на: https://gis.stackexchange.com/questions/142062/openlayers-3-linestring-getlength-not-returning-expected-value

Вы можете прочитать предысторию и пояснения там. Посмотрите на пример измерения, чтобы увидеть, как это должно быть сделано в настоящее время.

person bartvde    schedule 15.04.2015