Клуб API Карт

Кластеры, geoXml и изменение границ карты

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

В настоящее время при изменении границ карты (масштабирование или перетаскивание) обработчик складывает в массив полученные из скрипта точки, очищает ранее созданный кластер, складывает в него точки из нового массива, удаляет старый кластер с карты и добавляет новый.

Насколько я понимаю, этот подход неправильный, при движении карты происходит заметный переброс картинок с точками: сначала все пропало, потом отобразилось на новом месте. Если же не удалять все из кластера, при перемещении точки начинают дублироваться. Видимо, по каждой точке нужно прописать уникальный ID, но куда его всунуть, ума не приложу.

ymaps.geoXml.load("(адрес YMapsML)?"+boundsparams.join('&')).then(function (res) {
            var arr = [];
            res.geoObjects.each(function (obj) {
                arr.push(obj);
            });
            cluster.removeAll();
            cluster.add(arr);
            map.geoObjects.remove(cluster);
            map.geoObjects.add(cluster);
        });
5 комментариев

Я правильно понимаю что на каждое движение карты, даже на 1 пиксель, вы заного загружаете все точки, которые попадают в новый bounds карты?

Ну в общем случае да, даже на пиксель. Да, надо конечно, ослеживать величину перемещения. Но в общем случае, если это и не 1 пиксель, а половина карты, как поступить в таком случае?

 

Если вы используете кластеризатор, то нужно грузить весь массив точек за раз и передать их ему 1 раз.

А не заниматься ерундой типа убивания и создания заного кластеризатора по видимой области ибо кластеризатор это и сам делает (убивает те кластеры что в эту область не попали и создает и добавляет те что попали)

А порядка 10000 точек получится скормить кластеризатору?

попробуйте
не попробуешь - не узнаешь =)