LeafletJs GeoMan多边形编辑

时间:2020-04-10 09:37:32

标签: javascript leaflet leaflet-geoman

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

它可以让我检测是否:

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

  • 我使用:“ map.pm.Draw [”多边形“] ._ removeLastVertex();”删除最后一点。

我的问题。

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

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

非常感谢。

1 个答案:

答案 0 :(得分:2)

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

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/ 绘制多边形

相关问题