2017-06-21 39 views
0

假设你有一个单张地图,一组自定义标记,每个标记具有价值的独特ID:寻找通过期权价值的标志

var marker = new L.marker(latlong, {id: id, icon: icon}).addTo(map); 

有什么建议的方法来访问标记(特别是,我想修改一个标记的类),通过它的'ID'值?

回答

1

迭代所有地图图层,检查它是否是一个标志和比较的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 
2

而不是通过所有标记循环的,我会建议保持一个标记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 
+0

我认为保持另一种字典是BS。与你已有的东西一起工作。但我赶上你的漂移。有点取决于用例寿。 – iH8

+0

当然,我们不知道OP的程序架构。但我不认为这是另一个字典,这里是唯一的字典。 – IvanSanchez