Клуб API Карт

Есть ли возможность отображать разные иконки кластера в зависимости от меток в нем?

Пост в архиве.
dmishin82
8 февраля 2013, 14:55

То есть, в кластере может быть метка "АЗС Лукойл" и "АЗС РосНефть", к примеру. Кластер должен быть, например, красным. А может быть метки "АЗС Лукойл" и "АЗС Газпром" - кластер должен быть синий. 

Я вижу, что есть возможность добавлять либо свои иконки кластера различающиеся размером clusterNumbers, либо можно создать одну иконку в clusterIconContentLayout

Но есть ли возможность засунуть в кластер 50 разных иконок и потом, исходя из сочетания меток в кластере, показывать ту или иную?

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

Посмотрите эту статью в нашем блоге.

Я правильно понимаю, это частная реализация, а не ваша?

Вопрос не понял.

Этот пример написал я

да, это я затупил что-то. Просто у гугла есть PieChart-ы тоже.

это и есть гугловый пайчарт.

И такой вопрос: правильно ли следующее? каждый раз при зуме и перемещении карты я делаю вот так:


this.cluster.removeAll();
this.map.geoObjects.remove(this.cluster);
тут происходит добавление видимых меток в цикле с помощью cluster.add(this);
this.map.geoObjects.add(this.cluster);

 

не слишком ли это тяжело для клиента каждый раз полностью очищать кластер и снова загружать его метками? Или есть другой способ обновлять данные в кластере?

Самому этого делать не надо.

Кластеризатор сам следит что область видимость карты изменилась и пересчитывает кластеры.

что я делаю неверно? как убрать количество меток в кластере?
if (this.cluster == null) {
        clusterer = new ymaps.Clusterer({ clusterOpenBalloonOnClick: false, gridSize: 85, minClusterSize: 2 });
        clusterer.createCluster = function (center, geoObjects) {
            var cluster = ymaps.Clusterer.prototype.createCluster.call(this, center, geoObjects);
            cluster.options.set({
                icons: [{
                    href: '/Images/map_icons/clusters/clstr-mdm1.png',
                    size: [42, 38],
                    offset: [-21, -19]
                }],
                number: 100
            });
            return cluster;
        };
        clusterer.events.add("click", this.SetClusterDescription);
        this.cluster = clusterer;
    }

Надо создать свой макет метки кластера.

Все получилось! Большое спасибо за пример.

Кстати, такое наблюдение, возможно будет полезно для кого-то: если каждый раз при изменении карты (перемещении или зуме) я удаляю кластеризатор из объекта карты и затем, заполнив его новыми метками, добавляю его обратно в объект карты

 

this.clusterer.removeAll();

this.map.geoObjects.remove(this.clusterer);

добавляю метки в кластеризатор в цикле с помощю  this.clusterer.add(placemark);

this.map.geoObjects.add(this.clusterer);

 

ТО у меня все работает гораздо быстрее, нежели б я не убирал кластеризатор из объекта карты и не добдавлял его вновь каждый раз:

 

this.clusterer.removeAll();

добавляю метки в кластеризатор в цикле с помощю  this.clusterer.add(placemark);

 

Так все работает гораздо медленнее.

Выходит, лишние 2 операции удаления/добавления кластеризатора отрабатывают быстрее, чем "родной" пересчет кластеров. Так?