0

マップ上に複数のマーカーを表示する際に問題が発生しました。コードは、配列をループすることから始まり、マーカーを表示してinfoWindowのコンテンツを返されたアドレスに設定する前に、lat、lon値を逆ジオコーディングします。

私のコードは以下の通りです。

for(var i=0; i < useNowArray.length; i++) {
        // plot useNow on map
        latlng = new google.maps.LatLng(useNowArray[i]['lat'], useNowArray[i]['lon']);
        console.log(useNowArray[i]['lat'] + useNowArray[i]['lon']);
        geocoder.geocode({'latLng': latlng}, function(results, status) 
        {
            if (status == google.maps.GeocoderStatus.OK) 
            {
                if (results[0]) 
                {
                    marker = new google.maps.Marker({
                        position: latlng,
                        map: map,
                        icon: 'http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png',
                        title: results[0].formatted_address
                    });
                    content = results[0].formatted_address;
                    console.log(content);

                    google.maps.event.addListener(marker, 'click', (function(marker, i) {
                        return function() {
                            infowindow.setContent(content);
                            infowindow.open(map, this);
                        }
                    })(marker, i));
                }
            } else {
                alert("Geocoder failed due to: " + status);
            }
        }); // end geocode function
    }  
    var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 

問題は、私の最後のマーカーだけが表示されることです。

私は何が欠けていますか?:(

どうもありがとう。

4

1 に答える 1

0

マーカー変数はグローバルであり、ジオコーディングは非同期です。ループが実行され、useNowArray.lengthリクエストが実行され、それぞれが結果の位置でグローバルマーカーを更新します。ループが完了すると、マーカーはループの最後の位置に残ります。問題の解決策に関する同様の質問:

于 2012-11-20T00:43:57.777 に答える