我使用Mapbox与单张绘图,编辑和删除多边形等。每次我创建一个新的多边形Mapbox一个featureGroup删除GeoJSON的图层,我将其转换为以GeoJSON层,然后将其添加添加到我创建的featureGroup中,因为我想将每个图层与可以稍后使用的ID属性相关联。这是我有:编辑/使用单张
var featureGroup = L.featureGroup().addTo(map);
var drawControl = new L.Control.Draw({
edit: {
featureGroup: featureGroup
},
draw: {
polygon: {
allowIntersection: false
},
polyline: false,
rectangle: false,
circle: false,
marker: false
}
}).addTo(map);
map.on('draw:created', addPolygon);
map.on('draw:edited', editPolygon);
map.on('draw:deleted', deletePolygon);
function deletePolygon(e) {
featureGroup.removeLayer(e.layer);
}
function editPolygon(e) {
featureGroup.eachLayer(function (layer) {
layer.eachLayer(function (layer) {
addPolygon({ layer: layer });
});
});
}
function addPolygon(e) {
var geojsonstring = e.layer.toGeoJSON();
var geojson = L.geoJson(geojsonstring);
featureGroup.addLayer(geojson);
}
当我做到这一点,创建多边形是没有问题的。但是,当我尝试编辑或删除多边形时,它无法正常工作。
当我尝试编辑多边形,它告诉我:“类型错误:i.Editing是不确定的”。它也不允许我取消编辑。
当我尝试删除多边形,它在地图上不显示了,但它仍然没有从featureGroup删除。
我在这里做错了什么?
编辑:目前,我这样做的方式是相同的方式,ghybs已建议。但问题是,一旦完成所有编辑,多边形将被保存到数据库(我将它转换为WKT字符串以保存在SQLServer中)。下一次加载页面时,多边形会从数据库中加载回来,用户可以编辑或删除它们并将其保存回数据库。
因为它是现在,当用户进行编辑并再次保存它们,它只创建重复多边形。我不知道有什么方法将编辑的多边形连接到数据库中的多边形。
所以我想如果我可以将它们转换为GeoJSON并为每个图层分配一个ID属性(如果它是一个新图层,则ID = 0,并且如果从数据库加载相应的数据库中的polygonID) 。因此,当他们再次保存时,我可以检查此ID并基于此ID可以更新可用的多边形,也可以在数据库中创建一个新的多边形。
有没有更好的方法来做到这一点?
谢谢您的回应。我编辑了我的问题,以澄清为什么我想在将图层添加到featureGroup之前将图层转换为GeoJSON。 – Raj
添加了一些处理ID的代码。 – ghybs
太棒了!这应该完全适合我。非常感谢!! – Raj