Leaflet 使用传单geoman限制多段线(成为一条线)中的标记点

Leaflet 使用传单geoman限制多段线(成为一条线)中的标记点,leaflet,leaflet-draw,leaflet-geoman,Leaflet,Leaflet Draw,Leaflet Geoman,我希望用户能够绘制一条线(这是一条只有2个点的多段线) 我启用绘图和侦听vertexadded。当\u环标记计数等于2时,我禁用绘图 出于以下几个原因,这种感觉是错误的: 我访问一个私有变量\u rings 现在我禁用绘图,但要使线条可视化,我必须在可视化模式下重新初始化它 要允许用户移动线条的2个点,我必须在编辑模式下重新初始化线条 在编辑模式下,必须禁用在两个标记之间拆分一条线,这是否可行 我是否错过了一种更简单的方法 map.pm.enableDraw('Line', { snappa

我希望用户能够绘制一条线(这是一条只有2个点的多段线)

我启用绘图和侦听
vertexadded
。当
\u环
标记计数等于2时,我禁用绘图

出于以下几个原因,这种感觉是错误的:

  • 我访问一个私有变量
    \u rings
  • 现在我禁用绘图,但要使线条可视化,我必须在可视化模式下重新初始化它
  • 要允许用户移动线条的2个点,我必须在编辑模式下重新初始化线条
  • 在编辑模式下,必须禁用在两个标记之间拆分一条线,这是否可行
  • 我是否错过了一种更简单的方法

    map.pm.enableDraw('Line', {
      snappable: true,
      snapDistance: 20,
    });
    
    map.on('pm:drawstart', (event: any) => {
      const { workingLayer } = event;
     
      workingLayer.on('pm:vertexadded', (e: any) => {
        if (workingLayer._rings[0].length >= 2) {
    
          map.pm.disableDraw('Line', {
            snappable: true,
            snapDistance: 20,
          });
        }
      });
    });
    
  • 使用
    layer.getLatLngs()
    代替变量
    \u rings
  • 不要调用
    map.pm.disableDraw()
    ,使用
    map.pm.Draw.Line.\u finishShape()
    将绘制的图层添加到地图中来完成形状
  • 您可以调用
    map.pm.enableGlobalEditMode()
    为所有层启用编辑,也可以使用
    layer.pm.enable()
  • 使用选项
    hideMiddleMarkers:true
  • map.pm.setGlobalOptions({hideMiddleMarkers: true})
    map.on('pm:drawstart', (event) => {
      const { workingLayer } = event;
    
      workingLayer.on('pm:vertexadded', (e) => {
        if (workingLayer.getLatLngs().length >= 2) {
           map.pm.Draw.Line._finishShape()
        }
      });
    });
    map.pm.enableDraw('Line');