OpenLayers3 multipolygon.getArea returns 大于预期值
OpenLayers3 multipolygon.getArea returns greater than expected values
我正在使用 OpenLayers3 迈出第一步,在尝试获取 selected 特征的面积时,我得到了一些奇怪的结果。
我有一张地图,它从 KML 源加载矢量图层。
在这些 KML 上,有几个特征表示为多面体,表示西班牙北部一些地区的边界。
当我 select 功能时,它们会根据我的代码正确更改它的样式,但是当我尝试通过 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 平方公里。
我知道投影到平面的困难和问题,我期待一个粗略的面积结果,但我得到的值是我预期的两倍......对于一个问题来说似乎太多了预测或计算...所以我认为这里缺少一些东西。
任何对此事的见解将不胜感激。
你可以在那里阅读背景和解释。
查看测量示例以了解当前应该如何完成。
我正在使用 OpenLayers3 迈出第一步,在尝试获取 selected 特征的面积时,我得到了一些奇怪的结果。
我有一张地图,它从 KML 源加载矢量图层。 在这些 KML 上,有几个特征表示为多面体,表示西班牙北部一些地区的边界。
当我 select 功能时,它们会根据我的代码正确更改它的样式,但是当我尝试通过 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 平方公里。
我知道投影到平面的困难和问题,我期待一个粗略的面积结果,但我得到的值是我预期的两倍......对于一个问题来说似乎太多了预测或计算...所以我认为这里缺少一些东西。
任何对此事的见解将不胜感激。
你可以在那里阅读背景和解释。 查看测量示例以了解当前应该如何完成。