1

当我创建一个新多边形时,在“PM:DRAWSTART”上我初始化事件“pm:vertexadded”

它允许我检测是否:

  • 新点位于现有多边形内,因此我将其删除。*
  • 如果创建的最后一条线与现有多边形(TurfJS lineIntersect)相交,我将其删除。
  • 如果最后一行创建了“扭结”(TurfJS 也是),我将其删除。

  • 我使用:"map.pm.Draw["Polygon"]._removeLastVertex();" 删除最后一点。

我的问题。

当多边形关闭时(最后一个点点击第一个)“PM:DRAWEND”事件被执行。所以在这种情况下,我无法检查新多边形是否与现有多边形重叠,就像我对事件“pm:vertexadded”所做的那样。

如果新多边形与现有多边形重叠以进入编辑模式(polygon.toggleEdit())并返回舞台,是否有可能在事件“PM:CREATE”上,因为我没有单击最后一个点来关闭多边形.

非常感谢。

4

1 回答 1

2

您可以使用现有的 latlngs 重新初始化绘制多边形:

map.on('pm:create',function (e) {
  e.layer.removeFrom(map);
  setTimeout(function (){ //Needed because snapping
    map.pm.enableDraw('Polygon');
    var latlngs = e.layer.getLatLngs();
    if(!L.LineUtil.isFlat(latlngs)){
      latlngs = latlngs[0];
    }
    latlngs.forEach(function (latlng) {
      map.pm.Draw.Polygon._createVertex({latlng: latlng})
    })
  },100);
})

示例:https ://jsfiddle.net/falkedesign/omw2pt34/ 绘制多边形

于 2020-04-12T12:30:13.597 回答