Leaflet-geoman如何正确检索GeoJSON

问题描述

在使用leaflet-geoman提供的绘制控件时,我遇到了一些麻烦:

我要实现的目标:

我无法通过我通过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();