类似于此问题中发现的问题
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记录坐标,并演示多边形消失
答案 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'});