我有一个包含不同位置的列表。每当有人点击某个位置时,我都会从我的地图中删除标记图层,然后触发一个功能,该功能会生成一个新的标记图层,其位置与之前相同,只是这次使用的是所选位置的不同图标。
我的问题是我不想删除和添加图层,而只是想更新特定标记的图标,但我找不到访问它的方法。
有人提到这可以通过.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);
}
答案 0 :(得分:2)
如果没有一个例子,你想要达到的目标并非100%明确。
但是,如果你想操纵标记(例如使用setIcon()),那么保留所有标记的数组要容易得多。
var markers = {}; // list of created markers
创建标记时,将其添加到数组
markers[theID] = L.marker();
map.addLayer(markers[theID]);
然后,您可以轻松修改标记,而无需扫描您的featureGroup。
markers[theID].setIcon();