Клуб API Карт

Как поменять иконки для кластеров в API 2.0?

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

Кто-то может подсказать возможно ли это сделать? Хочется поменять их цвет, чтобы сделать более подходящими к дизайну.

В документации для Cluster есть параметр iconLayout, но как его использовать пока не очень понятно.

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

Посмотрите ответ тут http://clubs.ya.ru/mapsapi/replies.xml?item_no=23701.

Если этого недостаточно, то можно создать собственный макет иконки с помощью http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/templateLayoutFactory.xml и передать его в качестве значения опции iconLayout.

Спасибо, похоже то, что нужно. Почему-то через поиск в группе не нашел той темы.

Алексей Yarrr!
28 января 2016, 04:57

Тема старая, но в доках не нашел ничего похожего.

 

ymaps.option.presetStorage.add('myns#group', {

  clusterIconLayout: ymaps.templateLayoutFactory.createClass('$[geoObject.count]')

});

...

var clusterer = new ymaps.Clusterer();

clusterer.options.set({ preset: 'myns#group' }); // падает при отрисовки кластеров.

 

В исходниках какой-то хитрый класс описан, подскажите, как именно "можно создать собственный макет иконки" с помощью шаблонов?

Алексей Yarrr!
28 января 2016, 04:57

При создании preset для cluster#icon нужно обязательно от неё наследоваться.

Рядом с clusterIconLayout дописываем preset: "cluster#icon", и все начинает работать)...

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

Подскажите, пожалуйста,

если я хочу использовать свою иконку для кластера,но эта иконка находится в спрайте.

 

Так написала

    // Иконка кластера
    var clusterIcons = [
     {
        iconImageHref:'/img/icon_test.png',
        iconImageClipRect: [[0, 0], [100, 100]],
         size: [40, 40],
         // Отступ, чтобы центр картинки совпадал с центром кластера.
         offset: [-20, -20]
     }];

    // Оформление надписи на метке кластера.
    var MyIconContentLayout = ymaps.templateLayoutFactory.createClass(
     '$[properties.geoObjects.length]');
    var clusterer = new ymaps.Clusterer({
            clusterBalloonContentBodyLayout: "cluster#balloonCarouselContent",
            clusterBalloonContentItemLayout: myBalloonLayout,
            clusterBalloonWidth: 500,
            clusterBalloonPagerSize: 15,
            balloonContentBodyLayout: myBalloonLayout,
            clusterIcons: clusterIcons,
            clusterIconContentLayout: MyIconContentLayout
        });

 

Не показывает совсем иконку, как написать правильно атрибут для ссылку на объект и координаты того ккак вырезать объект из спрайта.

Стандартный макет кластера не умеет обращаться со спрайтами. Придется написать собственный макет для этого.

как это:

 

    var MyIconContentLayout = ymaps.templateLayoutFactory.createClass(
     '$[properties.geoObjects.length]');

 

только для картинки?

 Общий принцип такой, да. Только макет будет сложнее.

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