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

问题描述

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

  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/