gpt4 book ai didi

google-maps - Google Maps API v3 多标记信息窗口

转载 作者:行者123 更新时间:2023-12-04 23:46:17 25 4
gpt4 key购买 nike

我使用下面的代码来显示带有多个标记和信息窗口的 map 。现在我遇到了最后一个信息窗口出现在所有标记上的非常常见的问题。我尝试了各种解决方案,包括:http://you.arenot.me/2010/06/29/google-maps-api-v3-0-multiple-markers-multiple-infowindows/还有这个 http://www.robertbolton.com/blog/google-maps-v3-multiple-markers-and-infowindows-in-a-loop但他们都没有解决问题。

这是我的代码:

var infowindow = null;
var geocoder;
var map;

$(document).ready(function() {
initialize();
});

function initialize() {

var myOptions = {
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP,
disableDefaultUI: true,
scrollwheel: false
};

map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

setMarkers(map, people);

infowindow = new google.maps.InfoWindow({
content: "loading..."
});

}

var people = [
{"userid":"47","lastname":"lastname1","firstname":"firstname1","address":"Paris, France","phone1":"00000000000","phone2":"","email":"me@me.com"},
{"userid":"42","lastname":"lastname2","firstname":"firstname2","address":"Versaille, France","phone1":"0","phone2":"0","email":"me@me.com"}
];

function setMarkers(map, people) {

for (var i = 0; i < people.length; i++) {
var p = people[i];

geocoder = new google.maps.Geocoder();

geocoder.geocode( { 'address': p["address"] }, function(results, status) {

if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);


var marker = new google.maps.Marker({
position: results[0].geometry.location,
map: map,
html: p["address"]
});

var contentString = "Some content";

google.maps.event.addListener(marker, "click", function () {
infowindow.setContent(this.html);
infowindow.open(map, this);
});


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

});

}

}

最佳答案

地理编码是一个异步请求。所以当你在 for 循环中使用地理编码时,当你收到结果时,循环已经完成,i将始终为 1 并指向人的最后一项。

您可以做什么:将标记创建拆分为 2 个功能。 1 用于调用创建标记的第二个函数的循环:

删除当前函数 setMarkers并将以下 2 个函数添加到您的脚本中:

function setMarkers(map,people) {
for (var i = 0; i < people.length; i++) {
setMarker(map, people[i])
}
}

function setMarker(map, people) {
var p=people;
geocoder = new google.maps.Geocoder();

geocoder.geocode( { 'address': p["address"] }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);

var marker = new google.maps.Marker({
position: results[0].geometry.location,
map: map,
html: p["address"]
});

var contentString = "Some content";

google.maps.event.addListener(marker, "click", function () {
infowindow.setContent(this.html);
infowindow.open(map, this);
});
}
else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}

脚本的其余部分可能会保持原样。

关于google-maps - Google Maps API v3 多标记信息窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11916158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com