0
假设你有一个单张地图,一组自定义标记,每个标记具有价值的独特ID:寻找通过期权价值的标志
var marker = new L.marker(latlong, {id: id, icon: icon}).addTo(map);
有什么建议的方法来访问标记(特别是,我想修改一个标记的类),通过它的'ID'值?
假设你有一个单张地图,一组自定义标记,每个标记具有价值的独特ID:寻找通过期权价值的标志
var marker = new L.marker(latlong, {id: id, icon: icon}).addTo(map);
有什么建议的方法来访问标记(特别是,我想修改一个标记的类),通过它的'ID'值?
迭代所有地图图层,检查它是否是一个标志和比较的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
而不是通过所有标记循环的,我会建议保持一个标记dictionary,使用他们的ID作为关键,例如:
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
我认为保持另一种字典是BS。与你已有的东西一起工作。但我赶上你的漂移。有点取决于用例寿。 – iH8
当然,我们不知道OP的程序架构。但我不认为这是另一个字典,这里是唯一的字典。 – IvanSanchez