Клуб API Карт

Задать свойство кластера в котором есть определенный объект

amarieea91
16 января 2015, 11:24

Имеется objectManager:    

 

 objectManager = new ymaps.ObjectManager({

      clusterize: true,

      groupByCoordinates: true,

      gridSize: 32,

      geoObjectOpenBalloonOnClick: false,

      clusterOpenBalloonOnClick: false,

      clusterIcons: [

        {

          href: '/Content/images/map-label.png',

          size: [25, 25],

          offset: [-20, -20]

        }

      ],

      clusterIconContentLayout: null,

      clusterDisableClickZoom: true,

      clusterHideIconOnBalloonOpen: false,

      geoObjectHideIconOnBalloonOpen: false,

      balloonCloseButton: true,

      balloonPanelMaxMapArea: 'Infinity'

    });

 

 

    В нем объекты с одинаковыми координатами объединяются в кластер. В дальнейшем нужно у объектов с определенным id изменить картинку. 

Делаю так:

 

objectManager.objects.setObjectOptions(1006, {

        iconImageHref: '/Content/images/map-label-grey.png', preset: ''

    });

 

Вопрос: Если объект с id=6 входит в кластер, то как найти кластер в который он входит и изменить его картинку?

6 комментариев
Подписаться на комментарии к посту

Для этого есть метод getObjectState. Он не подцепился в документации, поправим в ближайшее время.

Пример использования можно посмотреть тут

https://tech.yandex.ru/maps/jsbox/2.1/object_manager_balloon

большое спасибо! :-)

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

Может можно как-то отключить это самое пересоздание ведь я группирую метки только с одинаковыми координатами (groupByCoordinates: true), или еще как-то можно решить эту проблему?

var clIcons= [ { href: '/Content/images/map-label-red.png', size: [25, 25], offset: [-20, -20] } ]

 var objectState = objectManager.getObjectState(pId);

            if (objectState.isClustered) {

                objectManager.clusters.setClusterOptions(objectState.cluster.id, {

                      clusterIcons: clIcons

                });

Тогда надо подписаться на событие add коллекции кластеров и в обработчике проверять, входит ли нужная метка в кластер и в случае необходимости менять цвет

спасибо. все получилось :)

ура)