Я здесь полностью озадачен. У меня есть список объектов, каждый из которых содержит местоположение. Я ищу это место с помощью google.maps.geocoder, а затем помещаю маркер этого места на карту.
Но по какой-то причине появляется только один маркер. Я предполагаю, что это связано с проблемой закрытия, которую я видел в других потоках здесь, но я просто не могу применить решение к тому, что у меня есть.
Мой код следующий:
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
map.fitBounds(bounds);
for (var item in list) {
var geocoder = new google.maps.Geocoder();
var geoOptions = {
address: item.location,
bounds: bounds,
region: "NO"
};
geocoder.geocode(geoOptions, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
addMarker(map, item, results[0].geometry.location);
} else {
console.log("Geocode failed " + status);
}
});
}
function addMarker(map, item, location) {
var marker = new google.maps.Marker({ map : map, position : location});
marker.setTitle(item.title);
var infowindow = new google.maps.InfoWindow( {
content : item.body,
size : new google.maps.Size(100, 300)
});
(function(map, marker) {
new google.maps.event.addListener(marker, "click", function() {
infowindow.open(map, marker);
});
})(map, marker);
}
Любая помощь - это оценен.
Обновление: Чтобы избежать замыканий в циклах, как было предложено в первом ответе, я изменил код на следующий:
//This is the entry
function codeLocations(list, map) {
for (var i = 0; i < list.length; i++) {
console.log("Looping " + list[i].location);
var geocoder = new google.maps.Geocoder();
var geoOptions = {
address: list[i].location,
bounds: getBounds(),
region: "NO"
};
geocoder.geocode(geoOptions, createGeocodeCallback(list[i], map));
}
}
function createGeocodeCallback(item, map) {
console.log("Generating geocode callback for " + item.location);
return function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
console.log("Geocoding " + item.location + " OK");
addMarker(map, item, results[0].geometry.location);
} else {
console.log("Geocode failed " + status);
}
}
}
function addMarker(map, item, location) {
console.log("Setting marker for " + item.location + " (location: " + location + ")");
var marker = new google.maps.Marker({ map : map, position : location});
marker.setTitle(item.title);
var infowindow = new google.maps.InfoWindow( {
content : item.body,
size : new google.maps.Size(100, 300)
});
new google.maps.event.addListener(marker, "click", function() {
infowindow.open(map, marker);
});
}
Согласно операторам журнала, теперь у меня есть правильные объекты в правильных местах, Это означает, что объекты элемента и местоположения различаются каждый раз, когда установлен маркер, но я все равно получаю только один маркер на моей карте. Как это может быть?