OpenLayers3 multipolygon.getArea返回大于预期的值

时间:2015-04-15 11:07:20

标签: javascript gis openlayers-3 mercator

我正在使用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 个答案:

答案 0 :(得分:0)

这与:https://gis.stackexchange.com/questions/142062/openlayers-3-linestring-getlength-not-returning-expected-value

非常相似

您可以在那里阅读背景和解释。 查看度量示例,了解当前应该如何完成。