Клуб API Карт

Управление геообъектами в кластеризаторе

Пост в архиве.
arthur-pv
31 июля 2013, 20:36

Функционал карты таков: при смещении центра карты или изменения масштаба происходит запрос к АПИ, получается список точек с координатами, затем они добавляются в кластеризатор.

Проблема в том, что после десятка таких манипуляций в кластеризаторе образуется несколько тысяч точек. Из-за этого (насколько я понял) с нагрузкой не справляются браузеры на тач-устройствах – они вылетают.

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

Но geoObjects кластеризатора отдают только те геообъекты, которые находятся в области видимости. Соответственно, мы не имеем доступ к остальным, чтобы их удалить.

Передача GeoObjectCollection в Clusterer, для того, чтобы управлять точками, тоже невозможна, из-за того, что метод Clusterer.add ожидает простой массив из геообъектов, а не Геоколлекцию.

 

Вопрос: как можно решить такую проблему?

P.S. Метод Clusterer.removeAll(), вероятно, помог бы, но тогда все иконки кластеров заново перерисовываются и вообще кластеризатор заново все строит, из-за чего появляется некоторая задержка в появлении. 

 

Спасибо.

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

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

Вообще говоря, кластеризатор и так отрисовывает только точки, попадающие в видимую область карты. Математическая обработка точек в составе кластера отнимает не очень много времени. Так что надо понять, действительно ли это кластеризатор тормозит или что-то еще.

Правильно ли я понимаю, что для такой проверки достаточно очищать все геообъекты из кластеризатора перед добавлением в него новых методом clusterer.removeAll()? То есть каждый раз сначала .removeAll(), затем добавляем метки. И если будет продолжать вылетать, то значит точно не из-за кластеризатора?

Ага, например так