Клуб API Карт

Изменение options кластеров при каждом перестроении

vechorkastv
10 ноября 2013, 23:03

Доброе утро!
Столкнулся с задачей сделать запоминание посещённых объектов и кластеров на карте. Просто с объектами всё легко, но кластеры при каждом зуме обновляются. То есть, если в кластере есть объект, который уже был посещён - его иконка должна отличаться.

Порылся по документации, но до конца не понял куда копать. Нужно отслеживать событие обновления кластеров и вешать дополнительный обработчик, который бы предоставлял доступ к кластеру? Что это за событие и как его лучше повесить? И попутный вопрос. Метод refresh имеет ли к моей задаче какое-то отношение? Когда он используется?

Спасибо огромное!

===UPDATE======

Вопрос решён. Вот решение, вдруг кому пригодится =)

        clusterer.createCluster = function(center, geoObjects) {

            var cluster = ymaps.Clusterer.prototype.createCluster.call(this, center, geoObjects);

            geoObjects = cluster.properties.get('geoObjects');

            for(i=0; i<geoObjects.length; i++) {

                if(geoObjects[i].properties.get('checked')) { cluster.options.set('icons', clusterIcons); }

            }

            return cluster;

 

        };

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

Надо перекрыть метод кластеризатора createCluster и в своей реализации проверять наличие посещенных геообъектов и использовать нужную иконку.

refresh тут ни при чем

Помогите новичку в выводе информации, пожалуйста.

вот я получаю массив геообъектов (из массива данных, полученных из БД)

 

for (var i = 0; i myGeoObjects[i] = new ymaps.GeoObject({
 geometry: {type: "Point", coordinates: [myPoints[i].lat, myPoints[i].long]},
 properties:{ balloonContentHeader: myPoints[i].name, balloonContentBody: [myPoints[i].weight]},
  },
 {preset: 'islands#redDotIcon', draggable:true, iconColor:myPoints[i].link});
   }

 

 

 Подготавливаю кластер

var myClusterer = new ymaps.Clusterer({clusterDisableClickZoom: true});

делаю по рекомендациям vechorkastv

 

clusterer.createCluster = function(center, geoObjects) {
var cluster = ymaps.Clusterer.prototype.createCluster.call(this, center, geoObjects);
geoObjects = cluster.properties.get('geoObjects');
for(i=0; icluster.options.set('iconContebt', clusterWeight);
return cluster;
}


и пытаюсь вывести кластеры на карту

 

cluster.add(myGeoObjects);
myMap.geoObjects.add(cluster);

 

и не выводятся (выводится только карта). Подозреваю, что запутался в переменных. Прошу помощи.