首页 文章

宣传单:从 Map 中删除标记

提问于
浏览
0

我加载一些lat / lon信息,然后用它来构建折线 . 然后,我想在每个折线顶点处添加一个标记,该标记将在点击折线时显示 . 如果单击不同(或相同)折线,顶点应消失 .

下面的代码创建折线和顶点标记 . 但顶点标记永远不会消失 .

我尝试用相同的结果做了几种方法 . 我已经尝试将顶点标记存储在一个数组中并将它们直接添加到 Map 中,然后map.removeLayer'ing它们 . 这也行不通 . 如果我使用L.featureGroup而不是layerGroup,它也不起作用 .

显然,我已经错过了关于如何移除标记的地方 . 有人能指出我的方法中的错误吗?

// trackMarkersVisible is a global L.layerGroup

// success is a callback from an ajax that fetches trackData, an array f lat/lon pairs
success: function (trackData) {
    // build an array of latLng's
    points = buildTrackPointSet(trackData, marker.deviceID);

    var newTrack = L.polyline(
            points, {
                color: colors[colorIndex],
                weight: 6,
                clickable: true
            }
    );

    $(newTrack).on("click", function () {
        trackMarkersVisible.clearLayers();

        $.each(points, function(idx, val) {
            var tm = new L.Marker(val);
            trackMarkersVisible.addLayer(tm);
        });
        map.addLayer(trackMarkersVisible);
    });
}

1 回答

  • 1

    如果没有JSFiddle或者Plunker,'s hard to say because i'我不确定你得到什么行为,但使用 L.LayerGroupclearLayers() 方法应该删除该组中的所有图层 . 如果组已经有图层,我会检查onclick处理程序: group.getLayers().length === 0 如果组为空,添加标记,如果组有图层使用 clearLayers . 代码示例:

    polyline.on('click', function (e) {
        if (group.getLayers().length === 0) {
            e.target._latlngs.forEach(function (latlng) {
                group.addLayer(L.marker(latlng));
            });
        } else {
            group.clearLayers();
        }
    });
    

    这适用于我,请参阅Plunker上的示例:http://plnkr.co/edit/7IPHrO?p=preview

    仅供参考:默认情况下,L.Polyline的实例始终可以点击,因此您可以省略 clickable: true

相关问题