使用 Leaflet.draw 从多层中删除特征
Delete feature from multiple layers with Leaflet.draw
地图中显示了多个图层,我想要一个删除按钮来从这些图层中删除选定的标记。
我正在使用 Leaflet.draw 插件来实现它,但似乎绘图控件必须绑定到单个图层,而我有多个图层。
我试图将图层中的所有功能复制到一个 FeatureGroup 并将 FeatureGroup 与绘图控件绑定以完成此操作,但它破坏了图层控件的行为,因为我无法再控制图层的可见性。 (特征组中的重复特征)。
有没有办法在不破坏图层可见性控制的情况下启用多层特征删除?
http://jsfiddle.net/mdqvpLvx/7/
var layerControl = new L.Control.Layers({}, {});
var geojsonLayer = L.geoJson(data);
geojsonLayer.getLayers()[0].addTo(drawnItems);
var geojsonLayer2 = L.geoJson(data2);
geojsonLayer2.getLayers()[0].addTo(drawnItems);
map.addControl(layerControl);
layerControl.addOverlay(geojsonLayer, 'layer1');
layerControl.addOverlay(geojsonLayer2, 'layer2');
我想我仍然必须在 FeatureCollection 层中保留标记的副本,并在 drawDelete 事件中相应地从特定层中删除它们。当层可见性从 LayerControl 更改时,add/remove 来自 FeatureCollection 层的标记。
// Draw Control
var editableFeatures = L.featureGroup();
map.addLayer(editableFeatures);
var drawControl = new L.Control.Draw({
draw: false,
edit: {
edit: false,
featureGroup: editableFeatures
}
});
map.on('draw:deleted', function(e) {
var layers = e.layers;
layers.eachLayer(function(feature) {
map.eachLayer(function(mapLayer) {
if (mapLayer.hasLayer) {
mapLayer.removeLayer(feature);
}
});
});
});
map.addControl(drawControl);
//LayerControl
var layerControl = new L.Control.Layers({}, {});
map.addControl(layerControl);
map.on('overlayadd', function(layer, name) {
layer.layer.eachLayer(function(feature) {
editableFeatures.addLayer(feature);
});
});
map.on('overlayremove', function(layer, name) {
layer.layer.eachLayer(function(feature) {
editableFeatures.removeLayer(layer);
});
});
地图中显示了多个图层,我想要一个删除按钮来从这些图层中删除选定的标记。
我正在使用 Leaflet.draw 插件来实现它,但似乎绘图控件必须绑定到单个图层,而我有多个图层。
我试图将图层中的所有功能复制到一个 FeatureGroup 并将 FeatureGroup 与绘图控件绑定以完成此操作,但它破坏了图层控件的行为,因为我无法再控制图层的可见性。 (特征组中的重复特征)。
有没有办法在不破坏图层可见性控制的情况下启用多层特征删除?
http://jsfiddle.net/mdqvpLvx/7/
var layerControl = new L.Control.Layers({}, {});
var geojsonLayer = L.geoJson(data);
geojsonLayer.getLayers()[0].addTo(drawnItems);
var geojsonLayer2 = L.geoJson(data2);
geojsonLayer2.getLayers()[0].addTo(drawnItems);
map.addControl(layerControl);
layerControl.addOverlay(geojsonLayer, 'layer1');
layerControl.addOverlay(geojsonLayer2, 'layer2');
我想我仍然必须在 FeatureCollection 层中保留标记的副本,并在 drawDelete 事件中相应地从特定层中删除它们。当层可见性从 LayerControl 更改时,add/remove 来自 FeatureCollection 层的标记。
// Draw Control
var editableFeatures = L.featureGroup();
map.addLayer(editableFeatures);
var drawControl = new L.Control.Draw({
draw: false,
edit: {
edit: false,
featureGroup: editableFeatures
}
});
map.on('draw:deleted', function(e) {
var layers = e.layers;
layers.eachLayer(function(feature) {
map.eachLayer(function(mapLayer) {
if (mapLayer.hasLayer) {
mapLayer.removeLayer(feature);
}
});
});
});
map.addControl(drawControl);
//LayerControl
var layerControl = new L.Control.Layers({}, {});
map.addControl(layerControl);
map.on('overlayadd', function(layer, name) {
layer.layer.eachLayer(function(feature) {
editableFeatures.addLayer(feature);
});
});
map.on('overlayremove', function(layer, name) {
layer.layer.eachLayer(function(feature) {
editableFeatures.removeLayer(layer);
});
});