#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. Работает как шарм, большое спасибо, я боролся весь день