Клуб API Карт

Получение области города и улицы по geocode

dejurin
15 июня 2013, 17:26

Здравствуйте, столкнулся с такой ситуацией 

нужно получить информацию: область, город, улицу - http://geocode-maps.yandex.ru/1.x/?format=json&geocode=

например = "Татарстан Республика Мамадышский Район пос. Ферма N2 Совхоза Мамадышский Гагарина улица д.10"

проблем с получение геоточек нет, но когда отслеживаешь название города, области или адреса эти данные меняются сейчас поясню. 

Например по этому адреса можно получить гео точки $json['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']['Point']['pos']

а адрес например 

Так вот проблема в том, что если геоточки всегда находятся в определенном месте, то адреса, названия города и область меняется для других адресов. Отсюда вопрос, где можно получать постоянные данные о городе, области и улице в ответе на запрос http://geocode-maps.yandex.ru/1.x/?format=json&geocode= ?

Если я неправильно выразился, объясню еще раз конкретней: чтобы получить геоточки любого адреса нужно обратиться к массиву $json['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']['Point']['pos'], а где такое же получить для названия области, города и адреса? потому, как они могут иметь разные названия ключей массива.

 

"featureMember": [{
        "GeoObject": {
            "metaDataProperty": {
                "GeocoderMetaData": {
                    "kind": "house",
                    "text": "Россия, республика Татарстан, Казань, улица Татарстан, 10",
                    "precision": "exact",
                    "AddressDetails": {
                        "Country": {
                            "AddressLine": "республика Татарстан, Казань, улица Татарстан, 10",
                            "CountryNameCode": "RU",
                            "CountryName": "Россия",
                            "AdministrativeArea": {
                                "AdministrativeAreaName": "республика Татарстан",
                                "Locality": {
                                    "LocalityName": "Казань",
                                    "Thoroughfare": {
                                        "ThoroughfareName": "улица Татарстан",
                                        "Premise": {
                                            "PremiseNumber": "10"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ]

 

 
array(4) {
    ["AddressLine"] = >
        string(72)
    "Пензенская область, Пенза, улица Мира, 55" ["CountryNameCode"] = >
        string(2)
    "RU" ["CountryName"] = >
        string(12)
    "Россия" ["AdministrativeArea"] = >
        array(2) {
            ["AdministrativeAreaName"] = >
                string(35)
            "Пензенская область" ["Locality"] = >
                array(2) {
                    ["LocalityName"] = >
                        string(10)
                    "Пенза" ["Thoroughfare"] = >
                        array(2) {
                            ["ThoroughfareName"] = >
                                string(19)
                            "улица Мира" ["Premise"] = >
                                array(1) {
                                    ["PremiseNumber"] = >
                                        string(2)
                                    "55"
                            }
                    }
            }
    }
}
array(4) {
    ["AddressLine"] = >
        string(122)
    "республика Татарстан, Мамадышский район, Мамадыш, улица К.Маркса, 27" ["CountryNameCode"] = >
        string(2)
    "RU" ["CountryName"] = >
        string(12)
    "Россия" ["AdministrativeArea"] = >
        array(2) {
            ["AdministrativeAreaName"] = >
                string(39)
            "республика Татарстан" ["SubAdministrativeArea"] = >
                array(2) {
                    ["SubAdministrativeAreaName"] = >
                        string(33)
                    "Мамадышский район" ["Locality"] = >
                        array(2) {
                            ["LocalityName"] = >
                                string(14)
                            "Мамадыш" ["Thoroughfare"] = >
                                array(2) {
                                    ["ThoroughfareName"] = >
                                        string(26)
                                    "улица К.Маркса" ["Premise"] = >
                                        array(1) {
                                            ["PremiseNumber"] = >
                                                string(2)
                                            "27"
                                    }
                            }
                    }
            }
    }
}
 

вот обращение к данные разное

 

7 комментариев
Подписаться на комментарии к посту
Персидский Иван
15 июня 2013, 18:55

Дейсивительно, насущный вопрос. Хотелось бы у гео-объекта иметь методы типы .getCity(), getCountry(), getStreet().

Персидский Иван
15 июня 2013, 22:07

Вот, сварганил на коленке для javascript(php не знаю и разрабатываю на клиенте). Все довольно просто.

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

В функцию нужно передавать GeoObject из массива $json['response']['GeoObjectCollection']['featureMember']. Возвращает объект типа {'country': 'Россия','city':'Москва', 'street': 'названиеулицы'...}

Иван! У вас не остался случайно этот парсер? Очень нужен.

Персидский Иван
17 июля 2015, 10:43

Да, простл переехал https://gist.github.com/persidskiy/5788975

Спасибо огромное ):-)

Действительно очень актуальный вопрос. Лично я обрабатываю перебором возможных вариантов, но и это не даёт уверенности. Например для получения улицы смотрю тут:

["response"]["GeoObjectCollection"]["featureMember"]["0"]["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["AddressDetails"]["Country"]["Locality"]["Thoroughfare"]["ThoroughfareName"]

потом тут:

["response"]["GeoObjectCollection"]["featureMember"]["0"]["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["AddressDetails"]["Country"]["Locality"]["DependentLocality"]["Thoroughfare"]["ThoroughfareName"]

и наконец тут:

["response"]["GeoObjectCollection"]["featureMember"]["0"]["GeoObject"]["metaDataProperty"]["GeocoderMetaData"]["AddressDetails"]["Country"]["Locality"]["DependentLocality"]["DependentLocality"]["DependentLocalityName"]

И этого явно не достаточно. По другим областям улицу я порой не получаю.

Действительно очень бы хотлось получить что-то универсальное.

Вроде есть GeoObject -> description

и GeoObject -> name

 

Вся эта структура описана стандартом xAL address standart

К сожалению ждать каких-либо изменений тут врятле стоит.

Проще и быстрее написать свои методы