Клуб API Карт

Подменять иконку кластера в зависимости от свойств вложенных объектов

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

Здравствуйте! Подскажите, пожалуйста, можно ли сделать так, чтобы иконка кластера подменялась, если у всех вложенных объектов пользовательское свойство равно определенному значению.

К примеру по умолчанию всех кластеров отображается иконка  "not_ready.png", но если вдруг у всех вложенных объектов в каком-нибудь кластере свойство "ready" равно к примеру "yes", то иконка этого кластера меняется на "ready.png".

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

Есть метод createCluster, его можно перекрыть и реализовать свою логику

Большое спасибо! То, что нужно! B-)

Столкнулся с другой проблемой. Как мне теперь после изменения значения свойства объекта, пересоздавать кластер, в котором он находится? 

Если точнее , у меня по клику на иконку кластера в балуне появляется список объектов с возможность поменять им значение одного из свойств. Хотелось бы при смене свойства вызывать как-то по новой этот метод и пересоздавать кластер.

Почитал документацию, всё равно не очень понял:

 

1) К какому объекту мне применять данный метод? К шаблону кластера var customBalloonContentLayout = ymaps.templateLayoutFactory.createClass( ... ) или к какому-то базовому шаблону? Если к базовому, то как к нему обратиться?

 

2) Это точно поможет в моей ситуации? Мне в балуне менять ничего не надо,  мне бы вызвать мою clusterer.createCluster function , которая решает какую иконку задать кластеру, то есть по сути задача - сменить иконку кластера после изменения свойства одного из объектов внутри.

Если вам надо что-то сделать с иконкой после создания кластера, то это надо делать в макете иконки кластера.

Все равно не очень понимаю, что мне нужно сделать.

 

По вашему совету я использовал метод createCluster для того, что чтобы у меня для кластеров отображалась либо одна иконка, либо другая.

 

Какая именно иконка будет отображаться зависит от свойства "driver" у объектов, которые находятся внутри этого кластера. Если у всех объектов свойство "driver" равно 0, то одна иконка, если хоть у одного не равно 0 - то другая.


Всё отлично работает, пока я не меняю значение свойства "driver" у одного из объектов на 1. В этом случае иконка кластера, в котором содержится этот объект уже должна меняться.

И она меняется например, если увеличить, а затем уменьшить масштаб карты и я полагаю, потому что "пересоздается" кластер.

 

Так вот как мне делать "пересоздавать" кластер, чтобы срабатывала моя , содержащаяся в createCluster функции проверка?





Функция createCluster предназначена для создания кластера. Ее можно использовать для передачи каких-либо данных в кластер один раз при его создании. В вашем случае никакого повторного создания не происходит – область видимости карты и меток на ней не меняется. 

 

Вам нужно подписываться на изменения данных всех объектов в кластере в момент создания иконки кластера и отписываться в момент ее уничтожения, при изменении данных одного из объектов вызывать rebuild макета иконки кластера (или менять кластеру опцию iconImageHref).

Правильнее все это делать в методах макета содержимого иконки кластера