Pobrałem sobie Google Maps API pod JS. Napisałem skrypt, który pobiera dane na temat stacji benzynowych (nazwy i ulice) i przekazuje je do API, aby zostały zwrócone pozycje GPS.
Wszystko działa dla pojedynczych wywołań, tylko że jeśli przesyłam do wywoływanej funkcji geocodeAddress(address) w pętli kolejne elementy tablicy (w której siedzą nazwy i ulice stacji benzynowych), to ostatecznie zwracane mi jest kilka razy ostatni element tablicy, a nie wszystkie po kolei. Dziwne jest to, że przed samym wywołaniem funkcji wyświetlam sobie zmienną address i za każdym razem ma ona (prawidłowo) inną wartość (inne nazwy ulic). Natomiast, gdy wyświetlę tą zmienną już po wejściu do funkcji geocodeAddress(address), to zmienna zawsze ma wartość ostatniego elementu tablicy, ale wywołanie powtarza się tyle razy, ile jest elementów w tablicy.
Kod JavaScript:
function initMap(nazwaAdres) {
var startPos = {lat: 51.235218, lng: 22.548834},
startPlace = 'lublin';
geocoder = new google.maps.Geocoder();
map = new google.maps.Map(document.getElementById('map'), {
center: startPos,
zoom: 10
});
//Wywolanie funkcji z adresem
for (var index in nazwaAdres)
{
var address = nazwaAdres[index];
//console.log('adres PRZED ',address);
setTimeout(function(){geocodeAddress(address)},2500);
}
}
function geocodeAddress(address) {
//console.log('adres PO ',address);
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var longtitude = results[0].geometry.location.lng();
var latitude = results[0].geometry.location.lat();
console.log(longtitude);
console.log(latitude);
infowindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker({
position: {lat: latitude, lng: longtitude},
map: map,
title: address
});
} else {
console.log("Geocode was not successful for the following reason: " + status);
}
});
}