Блог API Яндекс.Карт

Пример: отображение статуса метки кластера

17 декабря 2012, 13:41

Мы решили расширить пример «Метки кластера в виде круговой диаграммы» и добавили в него таблицу, которая позволяет отслеживать, добавлена ли метка на карту и входит ли она в кластер.

Статусы меток

Посмотреть пример в новом окне.

Пользуйтесь и присылайте свои примеры в комментариях, в клубе или на нашей страничке в Фейсбуке

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

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

Для начало правильно ли я понимаю, что генератор делает 200 меток с указанными presets, и задаёт им id, title, clusterCaption, balloonContentBody? И всё. Больше он ничего не делает?

 

Помогите, пожалуйста переделать блок группировки (// Группируем метки из исходного массива по типу пресета). Не совсем понятны некоторые моменты. Как должен выглядеть этот блок, если есть, к примеру 4 массива – coords-red, coords-green, coords-orange, coords-blue?

 

Для начало правильно ли я понимаю, что генератор делает 200 меток с указанными presets, и задаёт им id, title, clusterCaption, balloonContentBody? И всё. Больше он ничего не делает?

Да.

 

Помогите, пожалуйста переделать блок группировки (// Группируем метки из исходного массива по типу пресета). Не совсем понятны некоторые моменты. Как должен выглядеть этот блок, если есть, к примеру 4 массива – coords-red, coords-green, coords-orange, coords-blue?

В чем именно затруднение?

В данном примере тоже 4 группы меток, добавленных в один кластеризатор.

Затруднение - точках (point, placemark) и в том как их в тело скрипта вставить.

Давайте посмотрим на простом примере, возможно кому-то это будет полезно. Был простой пример1. Пытаюсь сделать пример2.

Мои циклы создают placemark, а генератор - point. Поменять не получилось... На 116 строке Uncaught ReferenceError: points is not defined.

Поменяйте points на название вашего массива.

Спасибо готово.

Рабочий вариант переделки примера с генератора на свои массивы - постоянная ссылка.

Изначальный вариант.

Здравствуйте! Помогите пожалуйста:
При использовании API версии 2.1 кластеры почему-то становятся стандартными. Ошибок не возникает, не могу понять что отвалилось.  

Здравствуйте!

Я загнал в этот пример несколько массивов с 3000 точек. Работа с картой замедлилась из-за обновления статуса геобъектов при каждом смещении. Для нормальной работы я вырезал из скрипта блоки отвечающие за список объектов в табе:

                // По клику на описание геообъекта в таблице// будем фокусировать центр карты на координаты центра геообъекта.

            // При смене центра или масштаба карты обновляем статус геообъектов.

//Таблица меток 

   

   

Проблема с замедлением ушла. Остались никому не нужные табы. Пример. (Изначально)

Помогите, пожалуйста сделать пример без табов, в котором были бы одни checkboxы.

Как я понял, это единственный пример динамического подключения-отключения массивов точек в кластеризатор. Пример очень функциональный и красивый, но он крайне сложен для начинающих. Хотелось бы получить простой, базовый скрипт, к которому добавлять что-то свое. 1я сложность в уходе от табов. 2 сложность в стилях для DOM-представлений групп, которые не привязаны к preset-ам, из-за чего нужно лезть в css.

Поменяйте 

на такой, какой нужен Вам

Можете показать пример с 4мя checkbox-ами, которые подлючают и отключают 4 приведённю в примере группы?

то, что нужно. Спасибо!!!

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

1. Есть несколько чек боксов (причем можно выбрать сразу все)
2. При чеке происходить запрос по аяксу, который взависимости от чека выплевывает большой массив точек, причем точки разделены на группы и подгруппы (подгруппы соотвествуют чек боксу, у групп одинаковые настройки отображаения точек)
3. Массив обрабатывается и каждая подгруппа загоняется в коллекцию, и добавляется на карту
4. При чекауте для соотвествующей коллекции делается .removeAll()

Соотвественно у меня несколько вопросов
- у вас удаление с карты это по сути скрытие через стандартное jquery, правильно ли это? 
- из-за того что у меня у группы один тип иконок (причем иконки кастомные) то для разделения подгруппы я добавил, доп опцию collectionName и соотвествующим образом поменял функцию 
getPresetColour, в итоге видно что иконка отрисовывается так как мне нужно, но на карте все равно стандартные синие
http://yadi.sk/d/uGU55FkoS8Qf7
http://yadi.sk/d/aw5gQBNVS8R4F
 

С иконками разобрался, для того чтобы корректно работало надо поправить createCluster

cluster.options.set({

                clusterIcons: this.getClusterIcons(geoObjects),

                clusterNumbers: this.getClusterNumbers()

            }); 

вопрос остался только с удалением, а именно вариант с выключение и последующим включением отображения, просто вариантов 2
- либо каким то образом правильно удалять через функцию апи, а не скрывать как в примере
- либо делать так чтобы ajax выполнялся один раз, на второй раз просто отображались ранее скрытые иконки 

 

- у вас удаление с карты это по сути скрытие через стандартное jquery, правильно ли это?

Нет, у меня удаление с карты это удаление из кластеризатора.

https://github.com/dimik/ymaps/blob/gh-pages/examples/piechart-clusterer/cluster-status.html#L71

 

 

- из-за того что у меня у группы один тип иконок (причем иконки кастомные) то для разделения подгруппы я добавил, доп опцию collectionName и соотвествующим образом поменял функцию 

getPresetColor используется для выбора соответствующего цвета для сегмента диаграммы из объекта COLORS

https://github.com/dimik/ymaps/blob/gh-pages/examples/piechart-clusterer/piechart-clusterer.js#L18

 

Если в вашем случае опция "preset" не выставлена, то в этой строчке она вернет 'twirl#blueIcon'

https://github.com/dimik/ymaps/blob/gh-pages/examples/piechart-clusterer/piechart-clusterer.js#L249

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

http://yadi.sk/d/Dory28vlSNfDS
http://yadi.sk/d/O9bfY7mASNfTt

Дело в том, что когда я загоняю точки в массив, который далее делится на группы и загоняется в кластер, я на каждую точку вешаю соотвествующий ее группе и подгруппе ajax, который по клику по точке вызывает балун с инфо

// добавляем ajax балун
geoObject.events.add('balloonopen', function (e) {    geoObject.properties.set('balloonContent', " Идет загрузка данных...");    // ajax    $.ajax({        type: "POST",        dataType: "json",        url: object.options.ajax_url,        data: {            action: object.options.ajax_action,            id: object.id        },        success: function (data) {            if (data.result == 1) {                var full_html = $('').html(data.list[0].HTML).contents();                geoObject.properties.set('balloonContent', full_html.find("p").html());            }        }    });});

 

+ для определенной группы точек по наведению мыши рисуется некий трек

поэтому чтобы выйти из этой ситуации необходимо следующее
- при максимальном зуме убирать группировку в кластер, при отдалении опять включать
- сделать хотя бы балун, с списком точек, при выборе точек, использовать ajax, при клике по кластеру выбирать первую точку и ее же грузить сразу 


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

Никто не подскажет как это реализовать?