在传单中将同一个插件用于多种用途

Using the same Plug-in for multiple purposes in leaflet

我正在尝试将传单绘制工具用于两种不同的用途:

  1. 作为创建新几何图形的“常规”工具
  2. 如果我画一条线,我会用 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')
  }
});

https://jsfiddle.net/falkedesign/r0sm9auo/