【问题标题】:How do I remove a Leaflet polyline using marker coords?如何使用标记坐标删除传单折线?
【发布时间】:2019-11-22 16:55:49
【问题描述】:

我已经放置了我的标记并在它们之间绘制了多段线,效果很好。

我还为用户提供了使用以下函数删除标记的能力

function hide(marker) {
    map.closePopup();
    map.removeLayer(marker);
}

现在,当标记被移除时,我还想移除折线。我一直在进行大量搜索,但没有遇到我的具体问题:我正在使用像素坐标,需要删除两个标记之间的折线。

标记

var marker1 = L.marker(map.unproject([8706, 7789], map.getMaxZoom()));
var marker2 = L.marker(map.unproject([8302, 5273], map.getMaxZoom()));
var marker3 = L.marker(map.unproject([9303, 7251], map.getMaxZoom()));

折线

polyline = L.polyline([
    map.unproject([8706, 7789], map.getMaxZoom()),
    map.unproject([8302, 5273], map.getMaxZoom()),
    map.unproject([9303, 7251], map.getMaxZoom())
]);

因此,当用户删除marker1 时,折线在marker1marker2 之间消失,但​​仍保留在marker2marker3 之间,依此类推... 这是如何实现的?

【问题讨论】:

    标签: leaflet


    【解决方案1】:

    您可以将折线添加到标记。如果标记被删除,您可以读出这些行并将它们也删除。

    marker1 = L.marker([51.498912, -0.122223],{connectedLines: []}).addTo(mymap);
    marker2 = L.marker([51.496988, -0.056305],{connectedLines: []}).addTo(mymap);
    
    poly1 = L.polyline([marker1.getLatLng(),marker2.getLatLng()]).addTo(mymap);
    marker1.options.connectedLines.push(poly1);
    marker2.options.connectedLines.push(poly1);
    
    function removeMarkerLine(e){
      var marker = this;
        if(marker.options && marker.options.connectedLines){
           var lines = marker.options.connectedLines;
           lines.forEach(function(line){
             mymap.removeLayer(line);
           });
        }
      mymap.removeLayer(marker);
    };
    

    https://jsfiddle.net/falkedesign/3aukgm7t/

    【讨论】:

      【解决方案2】:

      最简单的方法,跟踪哪条折线属于哪两个标记,如果一个被删除,你也删除那个。

      可以使用图层组轻松完成。

      【讨论】: