问题描述
在使用leaflet-geoman提供的绘制控件时,我遇到了一些麻烦:
我要实现的目标:
- 绘制多边形->✅
- 从图层获取geojson->✅
- 存储在数据库中->✅
- 从数据库中检索->✅
- 加载传单地图,并能够对其进行编辑,裁剪和删除。 ->✅?
- 从修改后的图层中获取新的geojson,或者如果我有2个图层并删除了一个图层,则仅获取一个。 -> X
我无法通过我通过geoman绘制控件所做的修改来获取新的geojson。无论我做什么,将数据加载到地图上时,总会得到与开始时相同的结果。
提琴:https://jsfiddle.net/pjkLr41q/34/
const shapes = [{
"type": "Feature","properties": {},"geometry": {
"type": "polygon","coordinates": [
[
[-3.701856,40.422481],[-3.707092,40.418593],[-3.70177,40.417809],[-3.701899,40.422873],[-3.701856,40.422481]
]
]
}
}];
const geojson = L.geoJSON(shapes).addTo(map);
map.eachLayer((layer) => {
if (layer.pm) {
const geojson = layer.toGeoJSON();
if (layer instanceof L.Circle) {
geojson.properties.radius = 10;
}
shapes.push(geojson);
}});
我不确定是否是因为在这种情况下不需要L.geoJSON(data)或直接通过eachLayer函数加载数据的方式,但是我有点迷失了马上。非常感谢您的帮助。
解决方法
您可以使用L.PM.Utils.findLayers(map)
获取所有的Geoman图层。
在下一版本2.7.0中,将提供功能map.pm.getGeomanLayers()
和map.pm.getGeomanDrawLayers()
因此,您可以使用以下方法获取新的geojson:
var layers = L.PM.Utils.findLayers(map);
var group = L.featureGroup();
layers.forEach((layer)=>{
group.addLayer(layer);
});
shapes = group.toGeoJSON();