Типы компонентов адреса gmaps получают название страны - PullRequest
1 голос
/ 07 июня 2010

Я пытаюсь получить название страны, используя типы компонентов адреса, доступные в gmaps V3.

Я не знаю, как я могу сделать это правильно .. http://code.google.com/apis/maps/documentation/javascript/services.html#GeocodingAddressTypes

Я пытаюсь предупредить название страны здесь:

alert(results[1].address_component[country]);

и вот код .. любая помощь очень ценится .. спасибо

function codeLatLng() { 
    var input = document.getElementById("latlng").value; 
    var latlngStr = input.split(",",2); 
    var lat = parseFloat(latlngStr[0]); 
    var lng = parseFloat(latlngStr[1]); 
    var latlng = new google.maps.LatLng(lat, lng); 
    if (geocoder) { 
      geocoder.geocode({'latLng': latlng}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
          if (results[1]) { 
          alert(results[1].address_component[country]); 
          } else { 
            alert("No results found"); 
          } 
        } else { 
          alert("Geocoder failed due to: " + status); 
        } 
      }); 
    } 
  } 

Ответы [ 3 ]

10 голосов
/ 27 июня 2010

Во-первых, address_components должен быть во множественном числе. Документация Google вводит в заблуждение по этому поводу из-за опечатки.

В массиве address_components есть элемент для каждого компонента адреса. Массив типов внутри каждого элемента сообщает вам все типы, которые применяются к каждому компоненту адреса (например, страна, местность и т. Д.). Итак, что вы действительно хотите сделать, так это найти элемент массива address_components, в котором «страна» является одним из его типы, а затем взять для этого элемента массива короткое или длинное имя.

Кроме того, вы не всегда можете иметь значение для результатов [1]. Это предполагает, что возвращены как минимум 2 результата поиска. результаты [0] будут первыми.

вот пример:

var country;

for (i=0;i<results[0].address_components.length;i++){
    for (j=0;j<results[0].address_components[i].types.length;j++){
       if(results[0].address_components[i].types[j]=="country")
          country = results[0].address_components[i].long_name
    }
}
0 голосов
/ 03 августа 2012

Согласно документации Google , результаты всегда возвращаются в порядке от наиболее конкретного к наименее конкретному:

Как правило, адреса возвращаются от самых конкретных к наименее конкретным; более точный адрес - самый выдающийся результат, как и в этом случае. Обратите внимание, что мы возвращаем разные типы адресов, от самых конкретных уличных адресов до менее определенных политических объектов, таких как районы, города, округа, штаты и т. Д. Если вы хотите сопоставить более общий адрес, вы можете проверить "types" поле возвращаемых Placemark с.

Учитывая этот факт, нам даже не нужно циклически просматривать результаты. Просто выберите те, которые в конце:

alert(results.slice(-1)[0].address_components.slice(-1)[0].long_name);

Если выяснится, что «results» или «address_components» могут отсутствовать или иметь длину 0, можно добавить простую проверку ошибок.

0 голосов
/ 07 июня 2010

alert(results[1].address_component['country']); // страна является строкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...