Google地图 - 如果有多个标记,则在标记中显示地址

时间:2014-07-09 07:34:47

标签: javascript asp.net google-maps google-maps-api-3 geocoding

我正在使用google map api 3根据用户输入在地图上绘制标记。我正在根据数据库中的邮政编码获取地址,并且它正常运行。我正在使用geocoder将地址转换为latlong,而且也是正确的。地图也正在显示,但我的问题开始时,我试图向用户显示哪个标记代表什么地址,我使用title marker属性执行此操作,但它显示数组的最后一个地址每个商标都有很多。我的脚本是

var markers = response.d.split('^^');
            //var markers = ["Goregaon, Mumbai", "Malad, Mumbai"];
            var latlng = new google.maps.LatLng(51.474634, -0.195791);
            var mapOptions1 = {
                zoom: 14,
                center: latlng
            }
            var geocoder = new google.maps.Geocoder();
            var infoWindow = new google.maps.InfoWindow();
            var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions1);
            for (i = 0; i < markers.length; i++) {
                var data = markers[i];
                // Geocoder area
                geocoder.geocode({ 'address': data }, 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,
                            title: data
                        });


                    } else {
                        alert("Geocode was not successful for the following reason: " + status);
                    }
                });

            }

在这里,我从markers数组中传递了两个位置,即Goregaon, MumbaiMalad, Mumbai,并且它们正在被绘制而不会失败:)。但是我把两个红色标记悬停在地图上,悬停时我都得到相同的值,即Malad, Mumbai。我尝试使用alert();来查看发生了什么,我在for循环中输入Geocoder Area之前找到了代码,执行了2次(数组的大小)而 Geocoder Area正在执行2次(无序列执行),这就是显示Malad, Mumbai作为结果的原因,因为title : data在上次迭代时总是有data = Malad, Mumbai,但没有人会喜欢这个结果。真正的结果将是标记悬停时告诉他们的地址。怎么做?

解决方案

抱歉MrUpsidown你迟到了所以我无法测试你的答案并找到了另一种解决方案

title : data更改为title: results[0].formatted_address为我工作。非常感谢您的回复:)

更新1

我的代码不适用于InfoWindow

var infoWindow = new google.maps.InfoWindow({ content: distanceArray[j]});
                j++;

我试过

var infoWindow = new google.maps.InfoWindow({ content: distanceArray[j];
j++;
});

显然,它不起作用:(

1 个答案:

答案 0 :(得分:1)

地理编码器是异步的。因此,在地理编码器获得响应之前,您的for循环结束。您可以使用每次地理编码器返回结果(或错误)时递增的另一个变量,并使用它来引用正确的markers数组值。

var j = 0;

for (var i = 0; i < markers.length; i++) {

    // Geocoder area
    geocoder.geocode({
        'address': markers[i]
    }, 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,
                title: markers[j]
            });

        } else {

            alert("Geocode was not successful for the following reason: " + status);
        }

        //Increment variable here
        j++;
    });
}

JSFiddle demo