Клуб API Карт

Асинхронный геокодер и кластер

alexip74
20 июня 2012, 11:19

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

Я вынужден выбирать из базы набор адресов, часть из которых не имеют точных координат (а другая часть - имеют). Соответственно в скрипте целый ряд вызовов ymaps.geocode('адрес'), внутри которых добавляю в массив точек результаты каждого геокодирования.

В итоге код выглядит как:

..

placemarks[0] = new ymaps.Placemark(готовые координаты)

placemarks[1] = new ymaps.Placemark(готовые координаты)
..

ymaps.geocode (адрес).then(function (res) {

   placemarks[10] = new ymaps.Placemark(res.geoObjects.get(0)...) 

}

ymaps.geocode (адрес).then(function (res) {

   placemarks[11] = new ymaps.Placemark(res.geoObjects.get(0)...) 

}

...


и потом надо собрать все в кластер и передать в карту:

cluster.add(placemarks);

obj.geoObjects.add(cluster);

но не ранее, чем асинхронный geocode закончит работу всех внутренних ф-ций. иначе в массиве placemarks еще могут быть "недоделанные" точки. что дает ошибку 
Uncaught TypeError: Cannot read property 'id_13401753664395968' of undefined

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

Вы можете посчитать количество запросов, которые пришли, и количество пришедших ответов. Как только числа сойдутся, добавляйте массив в кластеризатор.