Посмотрите на код в Google Maps API v3 Geocoder Tool , он, вероятно, имеет то, что вам нужно.
Одна вещь: генерация запросов непосредственно к API на http://maps.google.com/maps/api/geocode/json - это , а не , что нужно делать в JavaScript.Это работает, потому что API находится в том же домене, но вы никогда не должны этого делать.Вместо этого вы всегда должны использовать Сервис геокодирования , который является частью API Карт JavaScript V3.
Используя этот сервис, вам вообще не нужно анализировать ответ JSON, APIсделает это за вас, и тогда у вас будет массив Geocoding Results .Там results[0]
заменит json.getJSONArray("Placemark").getJSONObject(0);
Чтобы увидеть, как вы перевели бы весь код извлечения адреса, посмотрите на исходный код вышеупомянутого инструмента геокодера.Вместо дерева объектов V3 предоставляет плоский массив (address_component
).Каждый компонент имеет short_name
, long_name
и массив (types
) Типы компонентов адреса .Эти типы объясняют, как компоненты связаны друг с другом.
Кроме того, вы никогда не должны предполагать, что всегда будет компонент любого данного типа.Ваш текущий код слепо полагается на наличие locality
в ответе, но это не всегда так.