我想防止用户在地图上创建多个形状。例如,如果用户创建了一个多边形,那么工具栏上的所有形状图标都应该被禁用。当用户删除之前创建的形状时,工具栏上的图标应该会启用。
我怎样才能做到这一点?我尝试删除 draw:created 事件上的工具栏并在 draw:deleted 事件上添加一个新工具栏,但这会导致错误(请参阅随附的屏幕截图)。
我想防止用户在地图上创建多个形状。例如,如果用户创建了一个多边形,那么工具栏上的所有形状图标都应该被禁用。当用户删除之前创建的形状时,工具栏上的图标应该会启用。
我怎样才能做到这一点?我尝试删除 draw:created 事件上的工具栏并在 draw:deleted 事件上添加一个新工具栏,但这会导致错误(请参阅随附的屏幕截图)。
Leaflet 使我们能够使用remove()
和addTo()
方法删除和添加工具栏。
您需要做的是创建两个工具栏。一个是默认L.Control.Draw
的,另一个是没有“draw”组件的:
self.drawControlFull = new L.Control.Draw();
self.drawControlEdit = new L.Control.Draw({
edit: {
featureGroup: editableLayers,
edit: false
},
draw: false
});
map.addControl(drawControlFull);
然后,您只需收听draw:created
和draw:deleted
事件,并根据需要添加/删除它们:
map.on('draw:created', function(e) {
var type = e.layerType,
layer = e.layer;
self.drawControlFull.remove();
self.drawControlEdit.addTo(map);
editableLayers.addLayer(layer);
});
map.on('draw:deleted', function (e) {
self.drawControlEdit.remove();
self.drawControlFull.addTo(map);
});
此解决方案可能并未涵盖所有用例,但这只是一个示例。我还为此创建了一个jsFiddle,以便您了解它是如何工作的。