这很简单我很确定,但我对这里的很多代码都很陌生。
我有这段代码:
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)。
我确信解决方案显而易见,但我迷路了。
非常感谢任何帮助。
由于
史蒂夫
答案 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
,其中包含我想要显示的帖子代码。