2017-06-21 4 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

を、私はキーとしてその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 
+0

私は別の辞書を維持することはBSだと思います。あなたがすでに持っているものと協力してください。しかし、私はあなたのドリフトをキャッチします。キンダーはユースケースに依存します。 – iH8

+0

もちろん、我々はOPのプログラムのアーキテクチャを知らない。しかし、私はこれが別の* dictだとは思わない、ここで唯一のdictです。 – IvanSanchez

関連する問題