Кластеризация меток на Яндекс.Картах – два решения

Известно, что с ростом числа маркеров на карте, растет и нагрузка на браузер пользователя (особенно на Internet Explorer), а это в свою очередь ведет увеличению времени загрузки карты и «затормаживанию» при различных манипуляциях, прочим неудобствам для рядовых пользователей.

Для решения этой проблемы в API Яндекс.Карт можно использовать различные способы: диспетчер объектов или активные области.

Также можно выводить маркеры по категориям.

В этой заметке я хочу рассказать Вам еще об одном методе — кластеризации.

Кратко опишу, что такое кластиризация и как она работает.

Вся область карты разбивается на прямоугольники фиксированного размера, все метки, попадающие в заданный прямоугольник при данном масштабе заменяются одной меткой с указанием количества исходных.

Можно производить кластеризацию как на стороне сервера, так и на стороне клиента.

Я покажу Вам два способа реализации кластеризации на стороне клиента.

Первый способ, с помощью скрипта по адресу https://github.com/aztek/yaclusterer.

Кластеризация выполняется в файле yaclusterer.js

Первый пример использования данного скрипта идет в месте с ним в архиве загрузки.

На странице с картой мы должны указать какое число меток с генерировать и нажать кнопку Go.

На карту случайным образом наносятся метки и происходит их кластеризация.

 

 

Посмотреть пример в действии и исходный код

В начале мы подключаем файл со скриптом

 

<script src="/yaclusterer.js" type="text/javascript"></script>

В этом примере как всегда задаются параметры карты и добавляются необходимые элементы управления.

В строке

 

clusterer = new PlacemarkClusterer(map, null, null);

определяется объект кластерера

И в строке

 

clusterer.addOverlays(placemarks);

мы добавляем в него массив меток placemarks.

Мы можем задавать настройки параметров при определении объекта кластерера:

 

var cluster = new PlacemarkClusterer(map, null, {
	gridSize: 60, // размер ячейки кластера
	maxZoom: 16, // уровень зума, после которого показываются все маркеры
	style: {
		url:    'cluster.png', // адрес иконки группы маркеров кластера
		height: 50, // высота
		width:  50  // ширина
	}):

Я приведу практический пример использования кластиризатора для вывода на карту Нижнего Новгорода меток с указанием расположения терминалов QIWI (555 – штук).

 

 

Посмотреть пример в действии и исходный код

В этом примере из таблицы qiwiterminal базы данных, с помощью файла vivmarkers.php, мы извлекаем информацию об адресах терминалов и их координатах, а затем формируем файл в формате JSON, который передается в наш основной файл ymap_pr_66_2.html.

Там из полученных данных формируется массив меток placemarks, который потом обрабатывается кластеризатором.

Второй способ, с помощью скрипта по адресу http://bitbucket.org/beholder/yandex.clusterer/.

Для использования необходимо создать объект YandexClusterer.

Можно это сделать двумя способами:

- создание объекта YandexClusterer при каждом добавлении маркеров:

Создать массив точек YMaps.Placemark Создать объект YandexClusterer с необходимыми параметрами и передать в него массив маркеров: new YandexClusterer(map, markers, opts)

- создание объекта YandexClusterer только один раз (эффективнее):

Создать массив точек YMaps.Placemark Создать объект YandexClusterer, не передавая в него маркеров: new YandexClusterer(map, [], opts) Использовать методы setMarkers(markers) и repaint() для обновления информации Для очистки маркеров можно использовать clearMarkers()

Основные параметры при создании объекта YandexClusterer:

max_zoom — максимальный масштаб, на котором маркеры объединяются в кластеры [0] grid — размер сетки для кластеризации (чем меньше размер, тем больше будет кластеров) [60] min_size — минимальный размер кластера [2] centered — вычислять ли центр кластеров по точкам (медленнее, но точнее) [false] batch — размер шага при вычислении кластеров (можно уменьшить при тормозах или для IE) [400] style — объект для задания стиля метки кластера style.icon — картинка иконки для кластера style.height — высота иконки [52] style.width — ширина иконки [53]style.offset — массив с отступами для привязки иконки [[0, 0]] style.textColor — цвет текста подписи [#000000] style.textSize — размер шрифта [11] style.printable — делать ли иконки печатаемыми при отключенной печати фона [false]

Для кластеризации можно использовать файлы yandex.clusterer.js или yandex.clusterer.min.js (сжатая версия).

Примеры использования.

Первый пример, генерация произвольного количества меток.

 

 

На странице с картой Вы указываете необходимое количество меток для добавления на карту и отмечаете или нет возможность использования кластеризатора.

Это Вам позволяет сравнить скорость работы с большим количеством меток на карте без кластеризации и с её использованием.

 

 

Посмотреть пример в действии и исходный код

Второй пример, использования кластиризатора для вывода на карту Нижнего Новгорода меток с указанием расположения терминалов QIWI (555 – штук).

 

 



Кластеризация меток на Яндекс.Картах – два решения - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.

Блог

Календарь приёма объявлений

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

Дырка в com_content

Сегодня у товарища, сайт которого находится на старой  Joomla 1.0.3, была сильная нагрузка на сервере, просматривая логи обнаружил не вежливый запрос такого порядка: http://сайт/index2...

Лечим вирус на сайте

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

Troj/JSRedir-MH

Снова грянул гром зарежения сайтов новым вирусом  Troj/JSRedir-MH.  И так в коротко по вирусу Troj/JSRedir-MH. Вирус или троян куда интереснее чем свои предшествиники, тепер...

Доработка расширения для рассылки Send Email JK

Сегодня поделюсь немного интересной информацией для владельцев сайтов собранных ан joomla.  Рано и поздно возникает задача подписки и рассылки информации с сайта, это может быть разная постановка зада...

Привет Ie 10 регулярка

И вот и мне пришлось столкнулся с проблемами перехода на win 8 в придачу с ie 10, некоторых постоянных пользователей моих сайтов. На многих сайтах  имеющих раздел по приёму объявлений, использ...

Kunena заменяем ссылку на профиль пользователя

Всем привет, снова снова кунена, получил задание на допиливание популярного форума Kunena, сегодня потребовалось поменять ссылку на профиль пользователя. Это связано с тем, что на сайте стоит социа...

Работает на Kunena - зачем на каждой странице?

  Все у кого стоит форум kunena мешает надпись с двумя ссылкам внизу форума "Работает на Kunena". Сея надпись висит на каждой странице форма, а также страница разработчиков содержит множество вн...

Kunena избавимся от лишних quote

Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посеща...

Kunena решаем проблему с пропажей аватаров

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

Джомлавикам

Обработка параметров расширений joomla

При разработке расширений для CMS Joomla, таких как плагины, модули, компоненты или шаблоны, часто возникает необходимость получить параметры разрабатываемого или любого другого расширения. В этой ...

Кunena крамсаем шаблон

1. В папке \components\com_kunena\template\ваш_шаблон\ находим файл template.xml и вставляем в него такой кусок (чтобы была возможность выбора показывать это поле или нет): <param name="l...

Подключить свои классы и методы в Joomla?

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

3 новых полезных класса в Joomla 2.5

В платформе Joomla 11.3 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информац...

Репозиторий файлов на Joomla средствами Apache

Создадим две вложенные директории /files/files в корне сайта. Если вы пожелаете использовать другие имена директорий, то вам необходимо будет внести соответствующие правки в дальнейшем. ...