You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Geoman自定义变换控件中复用内置形状高亮功能?

问题描述

我想要为Geoman添加一个自定义变换控件,用于对折线(polyline)和多边形(polygon)执行特定变换。我注意到Geoman在编辑时会在顶点上方绘制提示线,希望我的工具也能以相同样式高亮折线/多边形。

以下是我的Action代码骨架:

const ConvertAction = L.Toolbar2.Action.extend({
  options: {
    toolbarIcon: {
      html:
        '<div class="icon-maps icon-convert" title="Convert point"></div>',
      tooltip: 'Convert point'
    }
  },
  addHooks: () => {
    // draw polygon
    // map.pm.enableDraw();

    changeConvert();
  }
});

function changeConvert() {
  convert = true;
  map.eachLayer(function (layer) {
    if (layer.feature && layer.feature.geometry.type === 'Point') {
      layer._icon.style['pointer-events'] = 'auto';
    }
  });
}

请问是否有可用于勾勒形状的内部函数?启用Geoman内置的「Edit layers」工具时,形状会自动被勾勒,如何在我的代码中实现这一效果而无需重新实现整个功能?


解决方案

Geoman内置了现成的高亮方法,可直接复用它的编辑模式样式:

  • 单个图层高亮:调用目标图层的pm.enableHighlight()方法,就能自动添加和编辑工具一致的勾勒及顶点提示线效果,取消高亮用pm.disableHighlight()。
  • 批量处理图层:修改你的changeConvert函数,给所有折线、多边形图层启用高亮:
    function changeConvert() {
      convert = true;
      map.eachLayer(function (layer) {
        // 保留原有点图层处理逻辑
        if (layer.feature && layer.feature.geometry.type === 'Point') {
          layer._icon.style['pointer-events'] = 'auto';
        }
        // 给折线、多边形添加高亮
        if (layer instanceof L.Polyline || layer instanceof L.Polygon) {
          layer.pm.enableHighlight();
        }
      });
    }
    
  • 清理高亮残留:在自定义Action中添加removeHooks方法,切换工具时取消所有图层的高亮,避免样式残留:
    const ConvertAction = L.Toolbar2.Action.extend({
      options: {
        toolbarIcon: {
          html:
            '<div class="icon-maps icon-convert" title="Convert point"></div>',
          tooltip: 'Convert point'
        }
      },
      addHooks: () => {
        changeConvert();
      },
      removeHooks: () => {
        map.eachLayer(function (layer) {
          if (layer instanceof L.Polyline || layer instanceof L.Polygon) {
            layer.pm.disableHighlight();
          }
        });
      }
    });
    

这种方式完全复用Geoman内置的样式和逻辑,和「Edit layers」工具的勾勒效果完全一致,无需自行实现绘制逻辑。


内容的提问来源于stack exchange,提问作者Igor Shmukler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:30:52