2011-06-18 19 views
0

Googleマップから個々のマーカーを削除します。私はバージョン3 APIを使用しています。 markerArrayを維持し、すべてのマップをnullに設定することによって、すべてのマーカーを削除する方法を知っています。Googleマップから個々のマーカーを削除する - API v3

1つずつ削除する場合は、キー値のペアの組み合わせを考えています。私はキーを与え、特定のマーカーを削除するように。私はこれ以上の助けが必要です。続き

は、私はドラムのマーカーに使用すること、コードです:

function geoCodeAddresses(data) { 

    var markerInfo = {addressKey: '', marker:''}; 

    for (var i = 0; i < data.length; i++) { 
     myLocation = data[i]; 

     geocoder.geocode({"address":myLocation}, function (results, status) { 

      if (status == google.maps.GeocoderStatus.OK) { 
       map.setCenter(results[0].geometry.location); 
       var marker = new google.maps.Marker({map:map, position:results[0].geometry.location}); 
       // checkpoint A 
       alert(myLocation); 
       /* 
       markerInfo.addressKey = myLocation; 
       markerInfo.marker = marker;*/ 

       //mArray.push(markerInfo); 
      } 
     }); 

    } 
} 

私はaddresskeyを検索し、mArrayからマーカーを削除します。しかし、私はジオコードコールバックメソッドで毎回最後の値を取得します。 1つのオブジェクトが毎回プッシュされました。 var myLocationは常に私の配列の最後のインデックスのアドレスを返します。私がチェックポイントAで警告したら、

私のアプローチは正しいですか?

答えて

0

あなたの問題は、この行です:あなたの配列にmarkerInfoの値をプッシュしていない

mArray.push(markerInfo); 

。 markerInfoへの参照を配列にプッシュします。今度はループの次の繰り返しで、markerInfoの値を変更すると、配列内の参照によって指される値も変更されます。あなたの配列は、すべて同じ値を持つ要素を持つことになります。

は、代わりにこれを試してみてください:

mArray.push({addressKey:myLocation,marker:marker}); 

問題が解決しない場合は、この:

mArray.push({addressKey:data[i],marker:marker}); 
+0

はい変数とクロージャのスコープに問題がありました。 –

関連する問題