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 квадратных километров.
Я знаю о трудностях и проблемах с проекциями на плоскость, и я ожидал приблизительного результата по площади, но я получаю вдвое больше ожидаемого значения... это слишком много для проблемы с проекциями или расчетами. Я думаю, что-то здесь мне не хватает.
Любое понимание по этому вопросу будет высоко ценится.
1 ответ
Это очень похоже на: https://gis.stackexchange.com/questions/142062/openlayers-3-linestring-getlength-not-returning-expected-value
Вы можете прочитать фоны и объяснения там. Посмотрите на пример меры, чтобы увидеть, как это должно быть сделано в настоящее время.