1) мои информационные окна, которые должны брать свой текст из другого массива, всегда используют последнее значение массива
2) я не могу заставить карту центрироваться автоматически.Я использую немного кода, который работал в других обстоятельствах, но в моем коде это не так.
1) Да, это проблема закрытия.Вот как я могу обойти это.
Я создаю объект для хранения всех свойств, которые я буду использовать.В вашем примере я собираюсь использовать postcode
и description
.
function location(postalcode, desc){
this.PostalCode = postalcode;
this.Description = desc;
}
Теперь выполните быстрый цикл для добавления всех объектов location
в массив.
var locations = [];
for(var i = 0; i < postcodes.length; i++) {
locations.push(new location(postcodes[i], descriptions[i]));
}
Извлечение функциональности геокода в его собственную функцию с параметром для получения объекта location
.Затем вы можете просмотреть массив объектов location
и геокодировать каждый в отдельности.Теперь почтовый индекс и описание находятся в области действия при создании и отправке запроса.
function GeoCode(singleLocation){
geocoder.geocode(
{
'address': singleLocation.PostalCode,
'region' : 'uk'
},
function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
var marker = new google.maps.Marker({
position: results[0].geometry.location,
map: map
});
//quick and dirty way
bounds.extend(marker.position);
map.fitBounds(bounds);
markersArray[i] = marker;
console.log(markersArray[i]);
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(singleLocation.Description);
infowindow.open(map, this); //this refers to the marker
});
} else {
alert("Geocode was not successful for the following reason: "
+ status);
return false;
}
}
);
}
2) Как вы можете видеть выше, быстрый способ сделать это - расширить и установить границы внутри.функции обратного вызова для геокода.Это приводит к тому, что функция fitBounds
вызывается несколько раз, и это не имеет большого значения, если у вас есть только несколько маркеров, но вызовет проблемы, если у вас есть сотни или тысячи маркеров.В этом случае правильный способ сделать это состоит в создании функции асинхронного цикла.Вы можете увидеть пример этого на одном из моих предыдущих ответов .
Вот пример работы кода, основанного на вашем примере .