2012-05-07 17 views
10

Próbuję uzyskać długość i szerokość geograficzną przez adres z następującego kodu:Google Maps API - geocode() nie zwraca lat i długo

function initialize() { 
    directionsDisplay = new google.maps.DirectionsRenderer(); 
    geocoder = new google.maps.Geocoder(); 
    var address = "HaYarkon 100 TelAviv Israel"; 
    geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) 
     { 
      TelAviv = new google.maps.LatLng(results[0].geometry.location.latitude,results[0].geometry.location.longitude);    
     } 
    }); 

    var myOptions = { 
     zoom:7, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     center: TelAviv 
    } 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    directionsDisplay.setMap(map); 
} 

Problemem jest to, że wyniki [0]. geomety.location.latitude i longitude są undefinde.

Co widzę w wynikach w konsoli są następne:

location: O 

    $a: 51.5414691 

    ab: -0.11492010000006303 

Dlaczego pokazują $ ai ab zamiast szerokości i długości geograficznej

Odpowiedz

19

korzystać z następujących funkcji zamiast bezpośredniego uzyskiwania dostępu do właściwości:

results[0].geometry.location.lat() 

i

results[0].geometry.location.lng() 

Kod Google jest zaciemniany i wewnętrznie używa krótkich nazw zmiennych, które mogą zmieniać się z dnia na dzień.

+0

Doskonale, thx! – Alon

+2

I w twoim przykładzie nie musisz tworzyć nowego "google.maps.LatLng"; 'wyniki [0] .geometry.location' _is_ a google.maps.LatLng'. –

+0

@Sean Mickey, Może możesz pomóc z innym problemem, nie mogę zapisać tych danych do zmiennej w moim skrypcie. Jak mogę go zapisać i użyć? – Alon

1

MUSISZ użyć

results[0].geometry.location.lat() 
results[0].geometry.location.lng() 

Korzystanie

results[0].geometry.location[0] 
results[0].geometry.location[1] 

zwraca wartość undefined.

To było dla mnie bardzo mylące, ponieważ API czasami zwracało pole o nazwie "ab", a innym razem zwracało "Za". Uzyskiwanie dostępu do elementów przez ich wartość semantyczną (z rozszerzeniem .lat i .lng) zamiast dokładnej nazwy łańcucha jest znacznie bezpieczniejsze i bardziej czytelne.

Powiązane problemy