Клуб API Карт

Кластеры, вопрос

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

Привет, пара вопросов от чайника в js и картах... помогите разобраться.

конструкция вида ниже - чудесно работает

 

 

ymaps.geoXml.load(somefile.xml)

                     .then(function (res) {  

                        map.geoObjects.add(res.geoObjects);

                     }, 

                     function (error){   

                         alert(error);         

                     });

 

Если map.geoObjects.add(res.geoObjects);

заменить на 


var MyClusterer = new ymaps.Clusterer();

MyClusterer.add(res.geoObjects);

map.geoObjects.add(MyClusterer);

 

кластеры не создает. В чем ошибка?

 

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

map.removeAllGeoObjects(); не работает

map.removeAll(); не работает


Спасибо!

 

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

1. Кластеризатор принимает на вход массив объектов, а вы передаете в него коллекцию. Нужно из коллекции сделать массив, а уже его передавать в кластеризатор.

2. Корректный способ удалять объекты с карты - это объединять их в коллекцию и затем эту коллекцию удалять map.geoObjects.remove(myCollection);

спасибо! а как из коллекции res.geoObjects сделать массив для передачи в кластеризатор?


У коллекции геообъектов есть метод each.

var placemarks = [];

res.geoObjects.each(function (object) {placemarks.push(object)});

скажите, а так можно? =)

res.geoObjects.each(placemarks.push, placemarks);

Нет, так нельзя) а надо?

хотелось по короче. )

вообщем, да, вы же передаете еще и индекс в обработчик

res.geoObjects.each(function (object, index)

а без него работало бы )

Спасибо, работает.

А как сделать так, чтобы кластеры распадались при максимальном масштабе? Получается, что если метки близко друг к другу и масштаба не хватает, то метки в кластере и при клике открывается что-то непонятное.

"Что-то непонятное" - это балун кластера. Если вы правильно заполните поля properties у меток, балун сможет отобразить информацию об объектах в составе кластера. Если такой вариант не подходит, можно поэкспериментроваться с опцией maxZoom - максимальный зум, на котором осуществляется кластеризация.

с maxzoom что то не очень получилось. Метки просто очень близко находятся.  А properties заполняется в gml:metaDataProperty в случае использования geoXML?  Пробую задать http://api.yandex.ru/maps/doc/ymapsml/1.x/ref/reference/gml-metaDataProperty.xml - не выходит. Зато тут http://api.yandex.ru/maps/jsbox/cluster_balloon_layout все работает.

Ольга Стогова
28 января 2016, 03:10

а какой у вас gridSize, minClusterSize стоит? может быть в них дело, что не распадется

Я правильно понимаю, что вы решили все-таки использовать балун кластера и теперь стоит задача, как через YMapsMl передать данные для балуна кластера?

вот и мне интересно как через YmapsML передать данные для балуна кластера и по возможности и шаблон балуна,что используется и для меток

Александр
28 января 2016, 03:10

Не кластеризуется.

 

clusterer = new ymaps.Clusterer();

 

var result = [];

ymaps.geoXml.load('https://----')

 .then(function (res) {

 res.geoObjects.each(function (geoObject) {

 result.push(geoObject);

 });

clusterer.add(result);

 });

  myMap.geoObjects.add(clusterer);

В чем ошибка?