首页 > 解决方案 > 使用不同的投影将 OpenLayers 多边形转换为 GeoJSON

问题描述

类似于this question中发现的问题

如何将 OpenLayers 多边形坐标转换为纬度和经度?

我已经设置了一个基本地图来捕获用户定义的多边形并将其转换为 GeoJSON,而我可以使用其原生投影 (ESPG:3857) 来执行此操作我想获取捕获的 GeoJSON 并将其转换为 EPSG:4326 - 然后我会把它存起来。然而,使用上述在 drawend 事件上捕获特征并执行变换的方法会删除多边形,因为新坐标不再在地图的投影中表示。我无法弄清楚如何在不删除现有多边形的情况下以我需要的格式保存 GeoJSON

我尝试通过在多边形的矢量源上使用 getFeatures 来执行此操作,然后从我正在使用的投影执行转换为我想要的投影,但这仍然返回相同的坐标,我也有(如链接的文章)尝试使用 writeFeatureObject 但它仍然保存不正确

https://jsfiddle.net/20gxo3nt/


dragBox.on('drawend', function(evt){

/*   geom = evt.feature.getGeometry().transform('EPSG:3857', 'EPSG:4326');
  console.log(geom.getCoordinates()); */

});

$( "#save" ).click(function() {
  var geom=vectorSource.getFeatures();
  console.log(geom);
  var writer=new ol.format.GeoJSON();
  var geoJsonStr = writer.writeFeatures(geom);
  console.log (geom.proj.transform('EPSG:3857', 'EPSG:4326'));
  /* console.log(geoJsonStr) */
});

取消对 drawend 事件的代码的注释将正确 console.log 坐标,以及演示多边形消失

标签: javascriptgeojsonopenlayers-3

解决方案


获取新的 geojson

  var geom = [];
  vectorSource.forEachFeature( function(feature) { geom.push(new ol.Feature(feature.getGeometry().clone().transform('EPSG:3857', 'EPSG:4326'))); } );
  var writer = new ol.format.GeoJSON();
  var geoJsonStr = writer.writeFeatures(geom);
   console.log(geoJsonStr);

推荐阅读