0

私はグーグルマップv3に取り組んでいます。このマップでは、そのポイントに関する情報を表示する Infowindow を使用して、いくつかのマーカーをそれぞれ表示します。情報のソースは、各ポイントのデータを含む JavaScript 配列であり、ここまではすべて正常に動作します。配列には、(時々) 住所 (場合によっては null) と常に緯度経度座標が含まれているため、住所が存在しない場合は、逆ジオコーディングを行う必要があります。ここに私のコード:

var geocoder = new google.maps.Geocoder();  
for(var i=0;i<markersArray.length;i++){     
    var la=markersArray[i][0]);
    var lo=markersArray[i][1]);
    gpoint=new google.maps.LatLng( la,lo);
    var aMarker = new MarkerWithLabel({   //part of Google Maps Utility Lib
        position: gpoint,
        map: map,
        labelContent: deviceID,
        labelAnchor: new google.maps.Point(22, 0),
        labelClass: "labelStyle",
        html: "<ul><li>Speed: "+markersArray[i][3]+"</li></ul>",
        address: markersArray[i][4]
    });
    if (aMarker.address<="" || aMarker.address==null) {
        geocoder.geocode({'latLng': gpoint}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (results[1]) {
                    aMarker.address=results[1].formatted_address;
                }
            }
        });
    }    
    google.maps.event.addListener(aMarker, 'click', function () {
        infowindow.setContent(this.html+" "+this.address);
        infowindow.open(map, this);
    });

....
}

ほとんどすべて問題ありません。マーカーは適切な位置にあり、アドレスが空でリバース ジオコーディングされたものを除いて、正しい住所を含む正しい情報ウィンドウが表示されます。この最後のセットでは、最後の 1 つのマーカー情報ウィンドウのみが正しいアドレスを示し、他のすべての情報ウィンドウ アドレスは空です。何か案が?どうもありがとう!

4

1 に答える 1

0

これを修正する 1 つの方法は、リバース ジオコーディングを実行する関数を作成し、情報ウィンドウとマーカーで関数を閉じることです。

リバース ジオコード操作は非同期であるため、返された住所は最後のマーカー以外には使用できません。

于 2012-08-01T19:13:17.600 に答える