Клуб API Карт

Динамическое изменение опций кластера

krasnov@rirubro.ru
12 августа 2016, 16:46

Вечер добрый.

В базе данных имеется более 2000 объектов, которые нужно отобразить на карте. Для группировки объектов, расположенных близко друг к другу, используется кластеризатор. Заказчик дал задание: при приближении карты достаточно близко (уровень зума 15 или выше), объекты должны переставать группироваться и "рассыпаться" из кластера. Есть решение данной задачи: установить в опциях кластера параметр maxZoom = 14. Однако, возникает другая проблема: если у двух и более объектов координаты совпадают, то placemark одного объекта перекрывает все остальные.

Решение, которое первым пришло в голову - это менять опцию кластера groupByCoordinates на true при приближении карты на 15ый уровень и выше и наоборот. Код:

myMap = new ymaps.Map ("ya-full-map", {
    center: [55.76, 37.64],
    zoom: 13,
    behaviors: ["drag", "scrollZoom"],
    controls: []
});
	
clusterer = new ymaps.Clusterer({
    groupByCoordinates: false,
    clusterDisableClickZoom: false,
    zoomMargin: [10, 10, 128, 10]
});
	
myMap.events.add('boundschange', function (event) {
    if (event.get('newZoom') > 14 && event.get('oldZoom') <= 14) {
        console.log('true');
        clusterer.options.groupByCoordinates = true;
    } else if (event.get('newZoom') < 15 && event.get('oldZoom') >= 15) {
        clusterer.options.groupByCoordinates = false;
        console.log('false');
    }
});

myMap.geoObjects.add(clusterer);

К сожалению, динамически опция кластера не меняется, не смотря на выводы в консоли сообщений (true/false) тогда, когда это ожидается и отсутствие ошибок.

Вопрос: как можно реализовать отключение кластеризации объектов при определенном уровне зума карты, при этом оставив кластеризированными объекты с одинаковыми координатами? Можно ли доработать мой код для достижения желаемого результата? Если нет - то какие есть варианты?

Спасибо.

2 комментария
Подписаться на комментарии к посту
Менять опции надо через интерфейс:

clusterer.options.set('groupByCoordinates',  true);



Я бы рассмотрел еще как вариант сдвигать оверлеи меток
http://dimik.github.io/ymaps/examples/2.1/camomile-clusterer/
dimik,
выручаешь меня сегодня уже второй раз ) Спасибо большое.