我正在使用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, Mumbai
和Malad, 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++;
});
显然,它不起作用:(
答案 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++;
});
}