2016-10-12 14 views
1

私は異なる場所のリストを持っています。マークのレイヤーをマップから削除した後、以前と同じ位置のマーカーの新しいレイヤーを作成する関数がトリガーされ、選択された場所に異なるアイコンが使用されます。リーフレット:レイヤー内のマーカーにアクセスして更新する方法

私の問題は、レイヤーを削除して追加するのではなく、特定のマーカーのアイコンを更新するだけですが、アクセスする方法が見つからないということです。

誰かが.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); 
} 

答えて

1

たとえば、達成したいことは100%明確ではありません。

しかし、(たとえばsetIcon()を使用して)マーカーを操作する場合は、すべてのマーカーの配列を保持する方がはるかに簡単です。あなたは、マーカーを作成すると

var markers = {}; // list of created markers 

は、あなたは、あなたのfeatureGroupをスキャンすることなく、簡単にマーカーを変更することができ、あなたの配列

markers[theID] = L.marker(); 
map.addLayer(markers[theID]); 

に追加します。

markers[theID].setIcon(); 
+0

だから、私はleafletjsレイヤーの代わりにリストを使用し、地図上の各マーカーを別々に追加する必要がありますか? もしsetIcon()がマーカーのアイコンを即座に更新するならば、私はそれが仕事をすると思います。ありがとうございました。 – Sky

+0

はい。私は答えを – YaFred

+0

更新しました。ありがとうございました。 :)デフォルトのアイコンを戻す簡単な方法があるのか​​、それとも青いアイコンで新しいカスタムアイコンを作成する必要があるのでしょうか? – Sky