0

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

我想要达到的目标:

  • 绘制多边形 --> ✅</li>
  • 从层获取geojson --> ✅</li>
  • 存储在数据库中 --> ✅</li>
  • 从数据库中检索 --> ✅</li>
  • 加载传单地图并能够对其进行编辑、裁剪和删除。--> ✅ ?
  • 从修改后的层获取新的 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 函数在这种情况下不是我需要的,但我现在有点迷路了。帮助真的很感激。

4

1 回答 1

2

您可以使用以下命令获取所有 Geoman 图层:L.PM.Utils.findLayers(map)

在下一个版本 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();
于 2020-08-27T19:26:12.870 回答