Клуб API Карт

Получить название города/района/улицы из GeocoderResult.

Пост в архиве.

Здравствуйте, члены клуба Разрабатываю сервис, тесно связанный с картами и столкнулся с небольшой загвоздкой. Получаю ответ от геокодера (GeocoderResult), он в свою очередь содержит AddressDetails, который содержит название страны/города/улицы и т.п. Так вот, мне нужно сохранять в разные перменные страну, город и улицу. Конечно можно забирать их путем AddressDetails.County.CountryName, AddressDetails.Country.Locality.LocalityName, но последовательность вложения бывает разная (где-то добавляется регион/область/район и т.п.). Так вот, существует ли способ забирать конкретно то, что нужно? Что-то типа AddressDetails.GetParam('County') или AddressDetails.GetParam('Street')?

9 комментариев

Объект AddressDetails формируется в соответствии со стандартом xAL

можно так:

res.geoObjects.get(0).properties.get('metaDataProperty.GeocoderMetaData.AddressDetails.Country')

Честно говоря, не совсем понял, как это решает мою проблему. Название улицы может находиться на разных уровнял вложенности и не угадывать же каждый раз, где именно.
Неохото костылить, например вот так: http://pastebin.com/WNZjSBbE

чем не устраивает поле text?

там как раз через запятую сджоина иерархия топонимов страна -> область -> город ...

поле текст не всегда содержит одинаковый набор данных.
Например:
страна, город, улица ,дом
страна, регион, город, улица ,дом
страна, город, район, улица, дом

Между страной и городом может появится регион, а между городом и улице - район. Даже если скрипт будет разделять строку по запятым, как он угадает где улица, а где номер дома. Мне всегда нужны только 3 параметра: страна, город, улица

Redfield-ru,
сделал так, не претендую на правильность но из адреса выцепляю все что мне нужно

foreach($from_components as $component):
if($component->kind=='country') $from_country=$component->name;
if($component->kind=='province') $from_region=$component->name;
if($component->kind=='locality') $from_city=pgt($component->name);
if($component->kind=='street') $from_street=$component->name;
if($component->kind=='house') $from_house=$component->name;
endforeach;

на будущее, может кто гуглить будет и попадёт на эту страницу..

https://gist.github.com/Coltspb/5788975 

Chooozy,


Вот гуглил, попал, но ссылка твоя не рабочая. А ответа в топике так и не дали. Может с версией 2.0 что-то изменилось и получить эти данные раздельно как-то можно?
job.andrey.tarasov,
В 2.1 геокодер возвращает GeocodeResult, в котором есть методы получения элементов xAL вне зависимости от структуры его вложенности
Китай