假设您有一张Leaflet地图,其中包含一组自定义标记,每个标记都有唯一的ID值:
var marker = new L.marker(latlong, {id: id, icon: icon}).addTo(map);
通过“id”值访问标记(具体来说,我想修改标记的类)的推荐方法是什么?
答案 0 :(得分:3)
迭代所有地图的图层,检查它是否是标记并比较id:
L.Map.include({
getMarkerById: function (id) {
var marker = null;
this.eachLayer(function (layer) {
if (layer instanceof L.Marker) {
if (layer.options.id === id) {
marker = layer;
}
}
});
return marker;
}
});
var map = new L.Map(...);
var marker = new L.Marker(..., {id: 1});
map.getMarkerById(1); // returns marker instance
map.getMarkerById(2); // returns null
答案 1 :(得分:3)
我建议使用ID作为密钥来保留dictionary个标记,而不是循环遍历所有标记,例如:
var markers = {};
markers[id] = new L.marker(latlong, {id: id, icon: icon}).addTo(map);
然后您只需参考marker[id]
。
一个更复杂的例子:
var markers = {};
var data = [ ['alpha', 0, -80],
['beta', 20, 35],
['delta', -70, 44],
];
data.forEach(function(item){
var id = item[0];
var latLng = L.latLng(item[1], item[2]);
markers[id] = new L.marker(latLng, {id: id, icon: icon}).addTo(map);
});
console.log(markers['delta']); // returns the marker at -70, 44