Клуб API Карт

Получение района города по адресу улицы?

Пост в архиве.
seyferseed
7 декабря 2011, 08:15

В моем текущем проекте мне нужно получить по адресу улицы район города и сделать соответствующую сортировку.

Проблема в том, что ответ на геозапрос просто не содержит этого поля. 

Например

http://geocode-maps.yandex.ru/1.x/?format=json&geocode=%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D1%8F%D1%80%D1%81%D0%BA%20%D0%BC%D0%B8%D1%80%D0%B0%2022&key=ABGzzE4BAAAA2H9FNQMAkJ3t0UsFHTq9vmiJms8IVuO5OIkAAAAAAAAAAAByhMVzwdvY06wtHOh7hZMuK9HsRw==

 

В GeoObject улицы нет района.

 

"AddressLine""Красноярский край, Красноярск, Мира проспект, 22",

 

Район содержится только в GeoObject объекта в его объекте DependentLocality.

 

"AddressLine""Красноярский край, Красноярск, Центральный район, Мира площадь",

"DependentLocality"{"DependentLocalityName": "Центральный район",




 

Можно ли как-то получать DependentLocality принудительно?

2 комментария

Или придется использовать Google API для получения района.

Раз в геообьекте подожденным геокодером данные есть - то и в геокодере есть.

 Пару лет назад использовал вот такую конструкцию для доступа к расширенным данным кодирования.

Сейчас с ходу даже не скажу как она работает, но она работает.

YMaps.Events.observe(geo, geo.Events.Load, function () {
var elem = this.get(0);
var geodeep = function (ar) {
                                var i;
                                for (i in ar) {
                                    if (i && ar[i] && ar[i][i + 'Name']) {
                                        ar[i]['n'] = ar[i][i + 'Name'];
                                        co[i] = ar[i];
                                    }
                                    if (typeof(ar[i]) == 'object') {
                                        geodeep(ar[i]);
                                    }
                                }
                            }
                            var r = elem.AddressDetails;
                            geodeep(r);
                            var ret = {};
                            ret.addr = elem.text;
                            ret.country = co.Country.n;
                            ret.region = co.AdministrativeArea ? co.AdministrativeArea.n : co.Locality.n;
                            ret.adm1 = co.SubAdministrativeArea ? co.SubAdministrativeArea.n : '';
                            ret.city = co.Locality.n;
                            ret.street = co.Thoroughfare ? co.Thoroughfare.n : '';
                            ret.bld = (co.Thoroughfare && co.Thoroughfare.Premise) ? co.Thoroughfare.Premise.PremiseNumber : '';