Leafletjs:如何访问和更新图层内的标记

时间:2016-10-12 11:16:38

标签: javascript leaflet layer markers

我有一个包含不同位置的列表。每当有人点击某个位置时,我都会从我的地图中删除标记图层,然后触发一个功能,该功能会生成一个新的标记图层,其位置与之前相同,只是这次使用的是所选位置的不同图标。

我的问题是我不想删除和添加图层,而只是想更新特定标记的图标,但我找不到访问它的方法。

有人提到这可以通过.eachLayer函数实现,但我无法看到,因为这是控制图层而不是标记。

markers = new L.featureGroup(); 


function updateMarker(locations, clickedID){
    //Adding all markers on map
    for (var i = 0; i < locations.length; i++) 
    {       
        //red marker for the selected location
        if (locations[i][2] == clickedID){
            marker = new L.marker([locations[i][0],locations[i][1]],{
                icon: redIcon})
                .bindPopup(locations[i][3]);
            markers.addLayer(marker);   
        }
        else{
            //add regular marker
            marker = new L.marker([locations[i][0],locations[i][1]])
                .bindPopup(locations[i][3])
                .addTo(map);
            markers.addLayer(marker);
        }


    } ;

    map.addLayer(markers);
}

1 个答案:

答案 0 :(得分:2)

如果没有一个例子,你想要达到的目标并非100%明确。

但是,如果你想操纵标记(例如使用setIcon()),那么保留所有标记的数组要容易得多。

var markers = {};   // list of created markers

创建标记时,将其添加到数组

markers[theID] = L.marker();
map.addLayer(markers[theID]);

然后,您可以轻松修改标记,而无需扫描您的featureGroup。

markers[theID].setIcon();