API Карт Google - geocode() не возвращает lat и long

Я пытаюсь получить широту и долготу по адресу со следующим кодом:

 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);
}

Проблема заключается в том, что результаты [0].geomety.location.latitude и longitude undefinde.

То, что я вижу в результатах на консоли, следующее:

 location: O

   $a: 51.5414691

   ab: -0.11492010000006303

Почему он отображает $a и ab вместо широты и долготы

Ответ 1

Используйте следующие функции вместо прямого доступа к свойствам:

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

и

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

Код Google запутан и внутренне использует короткие имена переменных, которые могут меняться с одного дня на другой.

Ответ 2

Вы ДОЛЖНЫ использовать

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

Использование

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

возвращает undefined.

Это меня очень сбивало с толку, потому что API иногда возвращал поле с именем "ab", а иногда возвращал "Za". Доступ к элементам по их семантическому значению (с .lat и .lng), а не по точной строке, намного безопаснее и читабельнее.