Как стать автором
Обновить

Размещаем слой с пробками на своей Я.Карте

Время на прочтение2 мин
Количество просмотров3K
API Яндекс.Карт на текущий момент не позволяет «автоматически» нанести на карту слой с пробками (UPD: имеется ввиду официально документированный способ, сопутствующие котнтролы, etc...) Впрочем, данная проблема все же решается довольно просто средствами API.

API имеет методы для размещения на карте собственного слоя. Слой карты характеризуется источником тайлов (YMaps.TileDataSource). Для создания источника требуется указать шаблон URL с тайлами.

Источник тайлов


Первая проблема — узнать адрес источника, используемого Я.картами. Решается просто — смотрим с помощью FireBug на карту с пробками и видим в самом верху <img /> с [src=http://trf.maps.yandex.net/tiles?l=trf&x=2500&y=1244&z=12&tm=1267986241] Здесь x,y и z — координаты тайла и информация о зуме карты. tm — временная отметка, за которую отдаются данные о пробках. Без указания параметра tm сервер тайлов отдает 404…

Время обновления пробок


Вторая проблема — узнать текущую временную отметку, за которую отдаются пробки. Снова воспользуемся FireBug.

Можно обнаружить в логе обмена с сервером запрос на адрес trf.maps.yandex.net/trf/stat.js В ответ приходит скрипт с вызовом YMaps.TrafficLoader.onLoad('stat', «JSON_packed_data»); Внутри данных, передаваемых вторым аргументом, присутствует параметр timestamp который совпадает с текущим параметром tm при загрузке тайлов. PROFIT!

На главной Я.Карт YMaps.TrafficLoader определен, на обычной странице с картой — нет.

В итоге был написан код, определяющий объект YMaps.TrafficLoader, метод onLoad в нем и использующий полученную информацию для создания нового слоя, TileDataSource для него, и добавляющий слой на карту. Данные обновляются раз в 5 минут.

Загрузить traffic.js.

Подключить нужно после загрузки API, до загрузки кода, создающего карту на вашей странице. В коде инициализации карты нужно вызвать YMaps.TrafficLoader.init(mapObject), где mapObject — экземпляр YMaps.Map содержащий вашу карту. У себя я вызываю инициализацию на событии geocoder.Events.Load.

UPD: Перенес из блога Яндекса в Web-разработку.
Теги:
Хабы:
+6
Комментарии7

Публикации

Изменить настройки темы

Истории

Ближайшие события

PG Bootcamp 2024
Дата16 апреля
Время09:30 – 21:00
Место
МинскОнлайн
EvaConf 2024
Дата16 апреля
Время11:00 – 16:00
Место
МоскваОнлайн
Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн