Клуб API Карт

Получение разделенных данных (город, улица) по координатам метки

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

Добрый день

Мне нужно получить раздельные данные по текущему местоположению метки (страна, город, улица, дом).

 

placemark.events.add("dragend", function(e){

    ymap_coordinates(e.get('target').geometry.getCoordinates());

});

 

При окончании перетаскивания - передаю новые координаты в ymaps.geocode и получаю данные по новым координатам (такие как улица, город, страна)

  

function ymap_coordinates(coordinates){

var myGeocoder = ymaps.geocode(coordinates, {results: 1, kind: 'house'});

myGeocoder.then(

   function (res) {

       console.log(res)

       var data = res.geoObjects.get(0);

       if(data !== null){

           console.log(data.properties.getAll());

       }

   },

        function (err) {

            // обработка ошибки

        }

);

}

  

Все данные что пришли смотрю таким способом console.log(data.properties.getAll());

Проблема в том что данные возвращаются в обобщенном виде, все в купе, мне же нужно распихать все в разные поля, раздельно: страну, город, улицу и дом (если есть)

 

{

balloonContentBody: "<h3>улица Остоженка, 12/1с1</h3><p>Россия, Москва</p>",

boundedBy: Array[2],

description: "Россия, Москва",

metaDataProperty: Object,

name: "улица Остоженка, 12/1с1",

text: "Россия, Москва, улица Остоженка, 12/1с1"

}

 

Разбивать поле text по запятым не вариант потомучто во всех адресах она разная, в Украине например вот такое

text: "Украина, Одесская область, Одесса, Приморский район, Пироговская улица, 27"

 

В недрах обьекта metaDataProperty можно добраться до всех этих данных в отдельных полях, но там просто безумная вложенность

 

Вот так например можно получить название города

data.properties.getAll().metaDataProperty.GeocoderMetaData.AddressDetails.Country.AdministrativeArea.Locality.LocalityName

а вот так номер дома в Одессе

data.properties.getAll().metaDataProperty.GeocoderMetaData.AddressDetails.Country.AdministrativeArea.Locality.DependentLocality.Thoroughfare.Premise.PremiseNumber

 

Но в россии такой трюк уже не сработал, там путь немного другой.

В документации вижу что можно можно вытаскивать данные в таком виде: data.properties.get('name')

но чтото не вижу методов для вытаскивания конкретного значения, скажем, города.

 

Как это можно сделать?

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

Все что есть в раздельном виде - лежит в объекте AddressDetails.

Пути и правда могут отличаться из-за разного административного деления в России и Украине

использовал эту функцию.

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

но за ответ спасибо