Клуб API Карт

geocode() по массиву

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

Есть массив типа:

list {

  0 : {addr: "адрес 1, дом1", coords: ""},

  1 : {addr: "адрес 2, дом 2", coords: ""},

  2 : {addr: "адрес 3, дом 3", coords: ""},

}

Запускаю геокодер по массиву list:

for(i in list){

  ymaps.geocode(list[i].addr).then(

    function (res){  ???  },

    function (err) {  console.log(err);  }

  );

}

Как записать координаты домов в соответствущее поле coords?

Не понимаю как это сделать, поскольку в callback-функции, которая обрабатывает ответ геокодера, неизвестно с каким элементом массива list она работает.

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

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

Тот же пример есть в песочнице

Спасибо, но это совсем не то. В этом примере массив адресов передается в геокодер, который рисует метки на карте. А как их потом соотнести с исходным массивом? Как узнать какая метка какому элементу исходного массива соответствует? Ведь с использованием данного примера, ничего кроме как поставить метку на карту сделать нельзя, даже текст для метки нельзя передать.

Собственно я так и не понимаю, как в исходный массив проставить координаты объектов.

И еще вопрос есть: если запускать геокодер в цикле, то как узнать в последствии, что уже все геокодеры завершили работу? Спасибо.

метод geocode возвращает упорядоченную коллекцию геообъектов

Геообъекты в ней хранятся по тем же индексам (в том же порядке) что и данные в массиве исходных запросов

Вы можете по этим индексам получить из коллекции геообъекты и обновить свой массив

 

 

И еще вопрос есть: если запускать геокодер в цикле, то как узнать в последствии, что уже все геокодеры завершили работу? Спасибо.

там в классе всё эти задачи решены

посмотрите в код