问题描述
我正在尝试将传单绘制工具用于两种不同的事情:
- 作为创建新几何图形的“常规”工具
- 如果我画一条线,我会用 turf.js 执行一些计算,给我附近的点。
我为每个目的设置了两个单独的绘图控件。对于第二个,除了 draw:polyline 之外我都禁用了。问题:我用
保存我的元素map.on('draw:created',function(){...});
“命令”。但是这样我(或事件处理程序,分别为:))无法区分,如果线条是用第一个或第二个按钮绘制的。所以基本上我可以将绘图工具用于一件事或另一件事。有没有办法让我在同一张地图上为不同的应用程序使用相同的工具?
解决方法
另一种方法是使用 Leaflet-Geoman 而不是 Leaflet-Draw。
您可以在那里创建 Draw 实例的副本并为它们添加一个新的形状名称:
// copy a rectangle and customize its name,block,title and actions
map.pm.Toolbar.copyDrawControl('Polygon',{
name: 'PolygonCopy',block: 'custom',title: 'Display text on hover button',actions: ['cancel','removeLastVertex','finish'],});
然后您可以在创建事件中检查形状名称:
// listen to when a new layer is created
map.on('pm:create',function(e) {
console.log(e)
if(e.shape === 'Polygon'){
alert('Original Polygon')
}else if(e.shape === 'PolygonCopy'){
alert('Copy Polygon')
}
});