我有一段代码,我试图在谷歌地图中放置一组标记:
for(var i = 0; i < postcodes.length; i++) {
var address = postcodes[i].innerHTML +", uk";
geocoder.geocode({'address': address}, function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
var marker = new google.maps.Marker({
position: results[i].geometry.location,
map: map,
icon: image,
});
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
然而,在我尝试设置位置时,这将返回undefined。如果我在结果[#]中使用数字(0)而不是变量i,它可以正常工作,但我无法迭代结果。有没有人遇到过这个问题?
谢谢,
答案 0 :(得分:2)
问题是启动一个for循环,遍历邮政编码:
for(var i = 0; i < postcodes.length; i++) {
所以我是邮政编码数组中的索引。然后尝试在结果对象中使用该索引从邮政编码的地理编码请求返回[i];但这两个阵列是无关的。变量结果是postcodes [i]的结果,并包含该邮政编码的所有搜索结果。因此,结果[0]是一个邮政编码的最接近的结果。
我认为你想要的是:
for(var i = 0, num = postcodes.length; i < num; i++) { // loop through postal codes
geocoder.geocode(
{
address: postcodes[i].innerHTML + ", uk"
},
function(results, status) {
if (status != google.maps.GeocoderStatus.OK) {
alert("Geocode was not successful for the following reason: " + status);
return false;
}
for (var i = 0, num = results.length; i < num; i++) { // loop through results
var marker = new google.maps.Marker({
position: results[i].geometry.location,
map: map,
icon: image
});
}
}
); // end geocode request
}
如果您只想显示最接近的结果,请省略第二个for循环并使用结果[0]而不是结果[i]。