1

ジオコーディングでJSONを使用して複数のマーカーを表示しようとしています。私のコードでは、すべてのマーカーが正しい場所に表示されていますが、正しい情報ウィンドウや正しいタイトルが表示されていません。私はそれが閉鎖と関係があることを知っています。しかし、私はそれを理解していません。私を助けて、親切に私のコードを編集して、なぜそれを編集する必要があるのか​​説明してください。助けてください!!

points = data.POINTS;
var geocoder;
//var map;

geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(41.2324, - 98.4160);
var mapOptions = {
    zoom: 4,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

var infoWindow = new google.maps.InfoWindow();

for (var i = 0, length = points.length; i < length; i++) {
    data = points[i],
    address = data[1] + ", " + data[2] + ", " + data[3] + ", " + data[4] + ", " + data[5];

    geocoder.geocode({
        'address': address
    }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
            //Creating a marker and putting it on the map
            var marker = new google.maps.Marker({
                map: map,
                position: results[0].geometry.location,
                title: data[4],
                animation: google.maps.Animation.DROP
            });
            // Creating a closure to retain the correct data, notice how I pass the current data in the loop into the closure (marker, data)
            (function (marker, points) {
                // Attaching a click event to the current marker
                //console.log(data[6]);
                google.maps.event.addListener(marker, "click", function (e) {
                    infoWindow.setContent(data[6] + " " + data[0]);
                    infoWindow.open(map, marker);
                });
            })(marker, data);
        } else {
            //alert("Geocode was not successful for the following reason: " + status);
        }
    });

}

});
4

2 に答える 2

1

答えは次のとおりです。
必要なのは、ループの外側でマーカーの追加関数を呼び出すことでした。私の問題についてご検討いただきありがとうございます。私のソリューションが他の誰かを助けることを願っています。

points = data.POINTS;
var geocoder;
//var map;
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(41.2324, - 98.4160);
var mapOptions = {
    zoom: 4,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
infoWindow = new google.maps.InfoWindow();
for (var i = 0; i < points.length; i++) {
    var myLoc = points[i];
    var geoOptions = {
        address: myLoc[1] + "," + myLoc[2] + "," + myLoc[3] + "," + myLoc[4] + "," + myLoc[5]
    }
    geocoder.geocode(geoOptions, addMarkers(myLoc[6]));
}

function addMarkers(myTitle) {
    return function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var marker = new google.maps.Marker({
                map: map,
                position: results[0].geometry.location,
                title: myTitle,
                zIndex: i
            });
            (function (marker, myTitle) {

                // Attaching a click event to the current marker
                //console.log(data[6]);
                google.maps.event.addListener(marker, "click", function (e) {
                    infoWindow.setContent(myTitle);
                    infoWindow.open(map, marker);
                });
            })(marker, myTitle);
        }
    };
}
于 2012-09-18T12:53:37.193 に答える
0

これは、常にコンテンツをdata [6] +data[0]に設定しているためです。

マーカーを反復処理しているときに、反復ごとに情報ウィンドウのコンテンツを変更する必要があります。

infoWindow.setContent(data[i] + " " + data[i]);

上記のようなものでうまくいくはずですが、データに何が必要かわかりません。HTH

...あなたはあなたがいつもそれをtitle[4]に設定しているあなたの地域のタイトルと同じ問題を抱えています

于 2012-09-17T17:43:13.477 に答える