Вечер добрый.
В базе данных имеется более 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) тогда, когда это ожидается и отсутствие ошибок.
Вопрос: как можно реализовать отключение кластеризации объектов при определенном уровне зума карты, при этом оставив кластеризированными объекты с одинаковыми координатами? Можно ли доработать мой код для достижения желаемого результата? Если нет - то какие есть варианты?
Спасибо.