javascript - 使用不同的投影将 OpenLayers 多边形转换为 GeoJSON
问题描述
类似于this question中发现的问题
我已经设置了一个基本地图来捕获用户定义的多边形并将其转换为 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 坐标,以及演示多边形消失
解决方案
获取新的 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);
推荐阅读
- python - 尝试在任务调度程序中运行 python 脚本,但由于 request.urlopen(url) 而中断
- certificate - 家庭助理上的 Mosquitto:使用 CA 签名的服务器证书桥接到远程 MQTT 代理
- firebase - 使用电子邮件和密码创建用户(同时) Firebase Flutter
- java-8 - 如何将 KStream 中的记录对减少到 1 到 KTable
- reactjs - 如何使用 redux-toolkit 访问 redux 中另一个切片的状态?
- windows - 如何在powershell中递归截断文件名?
- javascript - 显示使用 OpenLayers 创建的最后一个多边形
- visual-studio-code - VS Code 找不到 Arduino IDE 路径
- python-3.x - 用beautifulsoup提取没有标签的文本
- javascript - 来自其他站点时如何自动打开选项卡?