Клуб API Карт

Динамическое обновление кластера

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

Доброго времени суток.

 

Подскажите, пожалуйста, как правильно обновлять содержимое кластеризатора.

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

 

Пример - http://jsfiddle.net/global_max/a2SUK/3/

 

Делаю с помощью GeoQuery. Не получается удалять объекты из кластеризатора. Объекты как-будто не уникальные и каждый раз добавляются заново. Можно конечно каждый раз удалять все объекты и добавлять только нужные, но не совсем то, что нужно.

7 комментариев

Добрый вечер. Кластеризатор и так обрабатывает объекты в видимой области карты. Этого недостаточно для решения вашей задачи?

Большое кол-во объектов говорит, что этого явно не достаточно. Всего 15 000 меток. Если добавлять их сразу все, пусть даже по таймауту, то картам немного нехорошо. Поэтому и решил ограничить только по видимой области.

 

Для больших зумов сделаны серверные кластеры. А для маленьких колдую с обычными метками.

Понятно.

С кластеризатором такая штука geoQuery(clusterer) не прокатит - кластеризатор на самом деле неполноценная специфическая коллекция.

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

Т.е. каждый раз очищать кластеризатор и добавлять в него нужные метки?

Нет, смотрите.

1. находите объекты в видимой области карты, добавляете их в кластеризатор и сохраняете в geoQueryResult параллельно

2. при сдвиге карты смотрите, какие объекты попадают в видимую область карты. Затем смотрите, какие из этих объектов есть в старой выборке, каких нет. Добавляете в кластеризатор объекты, которых нет в старой выборке. Также смотрите, какие объекты есть в старой выборке, но нет в новой - удаляете такие из кластеризатора.

3. Сохраняете ссылку на свежую выборку.

и тд

Спасибо огромнейшее, получилось! http://jsfiddle.net/global_max/a2SUK/4/

Ура)