Нанесения слоя с пробками на Я.Карту

Posted by Olegas on Март 07, 2010
IT

API Яндекс.Карт не позволяет «автоматически» нанести на карту слой с пробками. По крайней мере пока. Но проблема решается довольно просто средствами API.

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

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

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

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

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

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

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

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

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

В комментариях принимаются замечания и предложения.

Tags: ,

Комментарии (4) to Нанесения слоя с пробками на Я.Карту

Nikitian
09.03.2010

Спасибо! Надеюсь Яндекс не будет прикрывать эту возможность, всё же хака как такового нет.

admin
09.03.2010

ИМХО закрыть не должны, пользовательскому соглашению, на мой взгляд, не противоречит.

Хотя топик про данную возможность из клуба разработчиков на clubs.ya.ru почему-то стерли без объяснения причин.

[...] регионов, кроме Москвы, Питера, Киева и Екатеринбурга. Как разместить слой с пробками на своей карте я писал ранее. Сегодня разберемся как можно получить [...]

Вячеслав
22.05.2010

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

Оставить комментарий

WP_Big_City