Клуб API Карт

Вопрос по кластерам.

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

Подскажите, я использую кластеры. Для кластеров задал свои метки, но при приближении кластера распадаются и там метки стандартные, как сделать одинаковые метки для кластера и для меток внутри кластера?

6 комментариев
Всеволод Шмыров
28 января 2016, 02:06
Распадаются на отдельные геообъекты? Если да, то нужно задать метки этим геообъектам.

вот рабочий код:

$.getJSON(

query_src,

{jsonData:res, action:action, type_prop:type_prop, ajax:1}, 

function(data){

$('.cont').html(data.map);

 

 

clusterer && myMap.geoObjects.remove(clusterer);

myGeoObjects = [];

$('input[name="map"]').each(function(i){

myGeoObjects[i] = new ymaps.GeoObject({

   geometry: {type: "Point", coordinates: [parseFloat($(this).attr('data')), parseFloat($(this).val())]},

   properties: {

       clusterCaption: 'Геообъект №'+(i+1),

       balloonContentBody: 'Содержимое балуна геообъекта №'+(i+1)

   }

});

//console.log(myGeoObjects[i]);

})

//console.log(myGeoObjects);

var clusterIcons=[{

href:'files/images/system/mark1.png',

size:[13,13],

offset:[-10,0]

}]

clusterer = new ymaps.Clusterer({clusterDisableClickZoom: true, clusterBalloonContentBodyLayout: "cluster#balloonAccordionContent", clusterIcons:clusterIcons });

clusterer.add(myGeoObjects);

myMap.geoObjects.add(clusterer);

 

});

 

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

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

 

вчера перепробовал 100500 способов как задать вид отдельностоящих точек, ничего не получилось, в большинстве случаев точки просто не отображались, пробовал делать вот таким образом:

myGeoObjects[i] = new ymaps.GeoObject({

geometry: {type: "Point", coordinates: [parseFloat($(this).attr('data')), parseFloat($(this).val())]},

properties: {

clusterCaption: 'Геообъект №'+(i+1),

balloonContentBody: 'Содержимое балуна геообъекта №'+(i+1)

}

},{

iconImageHref:'files/images/system/mark1.png',

iconImageSize:[13,13],

iconImageOffset:[-10,0]

}

 

);

 

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

P.S. еще маленький вопрос не совсем по теме, как из значка кластера убрать цифру обозначающую количество объектов в кластере?

 

Всеволод Шмыров
28 января 2016, 02:06
Кластеризатор не влияет на возможность установки иконки геообъекта. Ваш код установки собственных меток выглядит нормальным. Путь до изображения точно правильно указан ? Не пропущен в начале слеш?  Попробуйте указать абсолютный путь с доменом.

Про цифры в кластерах.
Можно создать собственный макет кластера. Как показано в примере #1 на странице
http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/Cluster.xml

я попробовал все варианты записи пути:

1. абсолютный /files/images/system/mark1.png

2. с php T']?>/files/images/system/mark1.png

3. без php Z:/home/fullbnwork.ru/www/files/images/system/mark1.png

4. относительный files/images/system/mark1.png


При этом в 1 и 4 случае маркер вообще не появляется, а во 2 и 3 появляется ошибка:

Not allowed to load local resource: file:///Z:/home/fullbnwork.ru/www/files/images/system/mark1.png

 

Всеволод Шмыров
28 января 2016, 02:06
Видимо в 1 и 4 относительный путь неверный.
В примере 2 и 3 вы указываете абсолютный адрес в файловой системы (в 2 сервера, а 3 судя по всему своего компьютера). JavaScript отрабатывает на клиенте, а не на сервере. Укажите адрес типа http://./files/...

Спасибо, я уже разобрался! Решил проблему другим способом.

Создал стиль для метки внутри кластера таким образом:

ymaps.layout.storage.add('voina#cluster', ymaps.templateLayoutFactory.createClass(''));


Убрал цифры из значка кластера таким образом:

ymaps.layout.storage.add('voina#ttt', ymaps.templateLayoutFactory.createClass('$[properties.geoObjects.length]'));

 

потом при создании кластера все подключил:

clusterer = new ymaps.Clusterer({clusterDisableClickZoom: true, clusterIcons:clusterIcons, iconLayout: 'voina#cluster', clusterIconContentLayout : 'voina#ttt' });

 

В итоге все работает в лучшем виде!

 

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