使用传单geoman限制折线中的制造商点成为一条线

问题描述

我想让用户画一条线(这是一条只有 2 个点的折线)。

我启用绘图并监听 vertexadded。当 _rings 标记计数等于 2 时,我禁用绘图。

这感觉不对有几个原因:

  1. 我访问了一个私有变量 _rings
  2. 现在我禁用绘图但要可视化我必须在可视模式下重新启动它
  3. 为了允许用户移动线的 2 个点,我必须在编辑模式下重新启动线。
  4. 在编辑模式下,必须禁用在 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,});
    }
  });
});

解决方法

  1. 使用 layer.getLatLngs() 代替变量 _rings
  2. 不要调用map.pm.disableDraw(),用map.pm.Draw.Line._finishShape()完成形状将绘制的图层添加到地图
  3. 您可以调用 map.pm.enableGlobalEditMode() 来启用对所有图层的编辑,或者您可以使用 layer.pm.enable() 启用所需的图层
  4. 使用选项 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');

https://jsfiddle.net/falkedesign/7sL02y53/