Рост аудитории интернет-пользователей и интернет-проектов выводит геосервисы на новый уровень.
Если раньше большинство проектов, использующих «карты», оперировали десятками и сотнями точек, то теперь речь идет о сотнях тысяч точек.
В статье будут рассмотрены несколько вариантов использования геосервисов и способы их реализации для Google API 3 и нового Yandex API 2.
Покажем до 100 баллов.
Самый распространенный вариант использования — отображение адресов офисов компании на карте.
Обычно – до пары десятков.
Реализация самая простая, нестандартная.
Мы не будем на этом останавливаться.
И яндекс и Google отлично с этим справляется, не перегружая ни разработчика, ни пользователя.
От нескольких сотен до одной-двух тысяч точек.
Способ реализации зависит от плотности точек.
Вариант использования 1: справочники по узкой теме (например, «все банки Москвы») и т. д.
Например, если взять «все банки Москвы» с 2000 точками (условно говоря), то плотность будет достаточно большой.Почти все 2000 точек будут отображаться в одном окне просмотра со средним увеличением.
В этом случае поможет кластеризация точек.
У Google есть несколько бесплатных библиотек для кластеризации (например, MarkerClusterer), а в новом API от Яндекса кластеризация интегрирована в API и легко подключается несколькими строками кода.
И хотя в API Яндекса представление кластера по умолчанию может быть спорным вопросом, настроить можно практически всё.
Основным недостатком (как и преимуществом) такого способа реализации является то, что все данные необходимо загружать сразу.
Значит, страдает пользователь, который ждет загрузки карты, а вот админ радуется, глядя на загрузку сервера.
Фильтрацию точек также легко выполнить на клиенте.
Вариант использования 2: точки распределены по большой площади
Если точки распределены по большой территории (например, «Магазины Спортмастер в России»), то логично было бы сделать меню с выбором города, или отдельную карту (не интерактивную) с указанием городов.При нажатии на город вы увидите интерактивную карту с маркерами.
Кластеризация при таком подходе может не потребоваться; достаточно прикрепить к событию изменения масштаба слушатель, который вызывает меню выбора города при достижении определенного минимального масштаба.
С таким количеством точек оба API справляются нормально, без серьезных подтормаживаний.
К преимуществам Google можно отнести менее контрастную карту, на которой ваши маркеры будут лучше видны.
Плюсы Яндекса - более точная (по слухам) карта и большее количество нарисованных городов России.
И Google API 3, и Yandex Api 2 используют холст, то есть отрисовку меток прямо на клиенте (однако для Яндекса это должно быть специально включено).
Теперь о зубной боли в сердце - т.е.
Огромное количество dom-элементов (и на каждую точку приходится 3-4 объекта).
Когда количество объектов достигает 2000-3000, браузер убивается.
Единственным возможным костылем может быть FlashCanvas. При использовании на ie были получены очень хорошие результаты, но все же были некоторые «косяки».
Много, много точек
Есть несколько способов реализовать это.
Способ 1.
Используйте службу кластеризации, например: v2.maptimize.com Дорого, некрасиво и вообще не наш метод.Способ 2.
Создайте свой собственный сервер рисования тайлов.Мы используем комбинацию PostGIS + Tirex + Mapnik2 + Mod_tile + Nginx. Все очень быстро, но есть лишь несколько существенных ограничений: 1. Обновление.
При добавлении/удалении точек вам придется перерисовывать множество картинок.
Обычно это достигается удалением устаревших картинок из кэша, и счастливчик, первым посмотревший на этот участок карты, ждет, пока отрисуются недостающие тайлы.
Мне удавалось рисовать до 100 тайлов в секунду по 200 точек каждый на четырехъядерном процессоре Xeon. Поэтому при нечастых обновлениях все хорошо.
2. Невозможность фильтрации.
Да, вы можете нарисовать несколько наборов плиток.
Но в любом случае с N категориями вы: а) необходимо собрать N наборов плиток б) вы не сможете показывать сразу несколько категорий (теоретически можно сделать несколько слоев, но это получается плохо из-за наложения теней друг на друга и увеличения времени загрузки).
Вывод: данный метод подходит для однотипных наборов данных без возможности фильтрации.
Например – «все отделения Почты России».
Способ 3.
Рисование плиток на лету.Суть метода в том, чтобы сохранить в кеше часто используемые наборы тайлов (без фильтрации, с фильтрацией по основным категориям).
А сложные фильтры (например, банкоматы Сбербанка + банкоматы ВТБ) можно рисовать на лету.
В этом случае размер отметок можно сделать не менее 5х5 и разбросать по всей карте.
Кластеризация здесь становится ненужной.
Этот метод требует небольшого программирования и большого количества аппаратного обеспечения.
То есть мало ошибок и хорошая стабильность при высоких затратах на железо.
Один «графический» сервер сможет обслуживать 100-200 одновременных подключений.
Способ 4.
Есть еще один метод – комбинированный – который позволяет отображать много (до 10 000) по региону/городу.Об этом я расскажу в следующей статье.
Теги: #API Google Maps #API Яндекс Карты #картография #карты #кластеризация #API Карт
-
«Ростелеком»: Укрепление Региональной Сети
19 Oct, 24 -
Старая Игра Ibm
19 Oct, 24 -
Xss В Твиттере
19 Oct, 24