将 OpenLayers 多边形转换为具有不同投影的 GeoJSON

Converting OpenLayers Polygon to GeoJSON with different projection

类似于本题发现的问题

How to convert OpenLayers polygon coordinates into latitude and longitude?

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

我尝试通过在多边形的矢量源上使用 getFeatures 然后执行从我正在使用的投影到我想要的投影的转换来执行此操作,但这仍然是 returns 相同的坐标,我也(如链接文章)尝试使用 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 坐标,并演示多边形消失

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

Openlayers 6,无需循环功能

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