Google Map API和标记数组的问题

时间:2016-02-03 15:34:50

标签: javascript google-maps-api-3

这很简单我很确定,但我对这里的很多代码都很陌生。

我有这段代码:

function initMap() {
    var myOptions = {
        center: new google.maps.LatLng(52.0209079,-0.751136),
        zoom: 12,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    var map = new google.maps.Map(document.getElementById("map"), myOptions);
    var addressArray = ["mk4 1eh","mk4 4fy","mk8 0er"];
    var geocoder = new google.maps.Geocoder();

    var markerBounds = new google.maps.LatLngBounds();

    for (var i = 0; i < addressArray.length; i++) {
        var postcode = addressArray[i]
        geocoder.geocode( { 'address': addressArray[i] }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var marker = new google.maps.Marker({
                    map: map,
                    title: postcode,
                    position: results[0].geometry.location
                });

                markerBounds.extend(results[0].geometry.location);
                map.fitBounds(markerBounds);
            } else {
                alert("Geocode was not successful for the following reason: " + status);
            }
        });
    }
}

应该在addressArray中对三个邮政编码(邮政编码)进行地理定位,然后将其显示在带有标题的地图上。

我遇到第15行var postcode = addressArray[i]

的问题

如果我使用索引的常量,即var postcode = addressArray[0]

然后每个地图标记都会像我期望的那样获得与mk41eh相同的标题。

麻烦的是,如果我使用索引i,那么所有标记最终都被标题为数组中的最后一项(在此示例中为mk8 0er)。

我确信解决方案显而易见,但我迷路了。

非常感谢任何帮助。

由于

史蒂夫

2 个答案:

答案 0 :(得分:0)

https://developers.google.com/maps/documentation/javascript/geocoding

  

访问地理编码服务是异步的,因为Google Maps API需要拨打外部服务器。因此,您需要传递一个回调方法,以便在请求完成时执行。此回调方法处理结果。请注意,地理编码器可能会返回多个结果。

您传入.geocode()的函数是回调函数,一旦您收到回复就会发生。在请求进行时,您的循环继续运行,同时postcode正在更改。第一次触发回调后,循环结束,postcode设置为最后一个索引i

有关如何异步改善请求和响应范围的示例,请参阅this answer

答案 1 :(得分:0)

好的,我已经解决了我的问题。 geocoder返回一个JSON对象,其中包含许多有关该位置的可靠信息。 See here了解详情。

其中一个元素称为formatted_address,其中包含我想要显示的帖子代码。