使用不同的投影将OpenLayers多边形转换为GeoJSON

时间:2019-01-22 17:50:49

标签: javascript geojson openlayers-3

类似于此问题中发现的问题

How to convert OpenLayers polygon coordinates into latitude and longitude?

我已经设置了一个基本地图来捕获用户定义的多边形并将其转换为GeoJSON,而我能够通过其本机投影(ESPG:3857)做到这一点,我想将捕获的GeoJSON转换为EPSG:4326-然后我将其保存下来。但是,使用上述方法在捕获事件上捕获特征并执行转换会删除多边形,因为新的坐标不再在地图的投影中显示。我无法弄清楚如何以我需要的格式保存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记录坐标,并演示多边形消失

2 个答案:

答案 0 :(得分:1)

要获取新的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);

答案 1 :(得分:0)

Openlayers 6,无需循环功能

var format = new ol.format["GeoJSON"](); 
var geoJsonStr = format.writeFeatures(vectorSource.getFeatures(), { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857'});