Листовка-геоман как правильно извлечь GeoJSON

#javascript #leaflet #leaflet-geoman

#javascript #листовка #листовка-геоман

Вопрос:

У меня возникают некоторые проблемы, когда дело доходит до использования элемента управления отрисовкой, предоставленного leaflet-geoman:

Чего я пытаюсь достичь:

  • Нарисуйте полигон (ы) —> ✅
  • Получить geojson из слоев —> ✅
  • Хранить в базе данных -> ✅
  • Извлекать из базы данных -> ✅
  • Загрузите карту листовки и сможете редактировать, обрезать ее и удалять. —> ✅ ?
  • Получите новый geojson из измененных слоев или, если у меня было 2 слоя и я удалил один, получите только один. —> X

Я не смог получить новый geojson из изменений, которые я сделал с помощью элемента управления geoman draw. Независимо от того, что я делаю, я всегда получаю тот же результат, что и в начале, когда я загружал данные на карту.

Скрипка: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 (данные) или, возможно, прохождение функции eachLayer — это не то, что мне нужно в этом случае, но я как бы потерялся прямо сейчас. Помощь действительно ценится.

Ответ №1:

Вы можете получить все слои 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();
  

Комментарии:

1. Работает как шарм, большое спасибо, я боролся весь день