Есть ли какая-либо функция API gmap для объединения адресной строки из структуры AddressDetails? - PullRequest
2 голосов
/ 11 марта 2010

Я использую Google Map GClientGeocoder для преобразования координат карты в строковый адрес. Точно так, как показано в примере Google здесь http://code.google.com/apis/ajax/playground/?exp=maps#geocoding_reverse

Но я хотел бы удалить LocalityName (place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName) из place.address и иметь адресную строку без какого-либо LocalityName.

Прямой способ будет объединять все элементы AddressDetails, кроме LocalityName. Однако порядок элементов структуры в окончательном строковом представлении зависит от географического положения.

Например:

Заказ для города Австралия:

ThoroughfareName + «,» + LocalityName + «» + AdministrativeAreaName + «» + PostalCodeNumber + «,» + CountryName

Заказ по городу России:

CountryName + «,» + PostalCodeNumber + «,» + LocalityName + «,» + ThoroughfareName

Более того, PostalCodeNumber не был указан в AddressDetails для последнего примера.

Пожалуйста, помогите!

1 Ответ

2 голосов
/ 27 февраля 2012

Получите LocalityName и создайте новую строку без него. Поскольку LocalityName скрыт неизвестным образом в структуре JSON, вам необходимо рекурсивно проходить через весь AddressDetails, пока не будет найдено LocalityName. Пример:

function findLocalityName(item) {
  for (key in item) {        
    if (key == "LocalityName") return item[key];
    else if (item[key] instanceof Object) return findLocalityName(item[key]);
  }
}

var place = response.Placemark[0];
var localityName = findLocalityName(place.AddressDetails);          
var noLocalityAddress = place.address.replace(localityName, '');

Рабочий пример:

http://savedbythegoog.appspot.com/?id=6da11815a8a7435cc971acc9cebe99f4732fc5d0

Нажмите в любом месте на карте, чтобы показать полный адрес, LocalityName и фиксированный адрес.

Это может использовать некоторые незначительные улучшения, т. Е. Если вы нажмете "Redfern St." в примере он удалит название улицы вместо названия населенного пункта, потому что название улицы совпадает с названием населенного пункта!

...