Пеленгация общественного транспорта в любом смартфоне

1 360
Воскресенье, 5 января 2014, 19:55

Интерактивная карта

Наверняка многие из нас знают об интерактивной карте общественного транспорта Одинцово и даже пользовались ею. Удобно, интересно, красиво наблюдать за тем, где и как едет твой автобус или маршрутка. Особенно это полезно для тех отдаленных и не очень уголков района, где транспорт всего один и ходит редко, а в пробках стоит наравне с остальными. На примере Измалково и Переделок могу сказать, что в утренние часы опоздание автобуса/автолайна доходило до 45 (!) минут. Можно нервно и зябко ждать на остановке, а можно, взглянув на карту, понять, что быстрее дойти пешком.

Есть одно «но». У стоящего на остановке пассажира нет с собой полноценного настольного компьютера. А вся красота интерактивной карты превращается в тыкву при попытке открыть карту в браузере смартфона. Не тянет младший брат. Да, есть специальные приложения для смартфонов. Но пока только для Android. Еще есть текстовая версия, аналогичная электронным табло на остановках. Но она не дает полной картины. Например, не показывает автобус, если он стоит на конечной.

Метки на карте

И тут возникает мысль. Почему бы не взять карту Яндекс или Google, и не поместить на нее в виде меток координаты автобусов нужного маршрута? С метками всё просто: Яндекс и Google позволяют ставить пользовательские метки на свои карты. А вот как получить координаты? Есть ли у карты транспорта odinbus.ru какой-нибудь интерфейс для считывания координат? С подобным вопросом я обратился по указанному на сайте адресу info@odinbus.ru. Прошло 2 месяца абсолютной тишины в ответ. Что характеризует качество техподдержки, а также бросает тень на и без того уже покрытые пятнами Администрацию Одинцовского района и небезызвестный ОГИ.

Но вернемся к конструктиву. В очередной раз убеждаюсь, что Firefox — неплохой браузер. А именно, если открыть в нем консоль Javascript (Меню Инструменты — Веб-разработка — Веб-консоль — Вкладка «JS»), то можно увидеть, какие запросы делает интерактивная карта к своему серверу:

Листинг

А если скопировать этот запрос и ввести его самостоятельно в адресную строку браузера (для тех, кто не в курсе — это место, в котором мы набираем «vk.com» или «odnoklassniki.ru»), то получим список автобусов/маршруток и их координаты:

Листинг

Дело за малым — извлечь координаты и нанести их на карту на своей веб-странице. Но для этого потребуются усилия. А именно, найти бесплатный домен, предоставляющий PHP и междоменные запросы, а затем — написать на PHP обработку запроса к серверу и — на Javascript — отображение результатов в окне браузера. К счастью, нужный сервер нашелся (хотя всего таковых единицы), а освоение PHP в нужном объеме с учетом желанности цели прошло легко, да и само по себе оно полезно.

Карта в смартфоне

В итоге получил, что хотел — карту с координатами автобусов практически в любом браузере. Один минус — точки на карте не движутся и не указывают направление движения. Но движение и не понадобилось. При ближайшем рассмотрении оказалось, что на odinbus.ru оно делается чисто программно, а не отражает реальность — при получении от сервера новых координат карта плавно передвигает автобус в нужную точку. А получение координат происходит лишь раз в 30 секунд. Поэтому, если мы сами будем опрашивать сервер, наши координаты будут актуальнее odinbus-овских. Достаточно просто обновить веб-страницу в браузере. И еще один момент следует учесть. На сервере координаты также появляются с небольшим опозданием — автобус к этому моменту может уехать на пол-остановки дальше. Но с этим мы можем только смириться. Что касается направления движения, то из ответа сервера оно совсем не очевидно, особенно когда автобус стоит. Поэтому вместо него я использую идентификатор маршрута — он в odinbus разный в зависимости от направления. Общее правило таково: четный ID — из Одинцово / от станции, нечетный — в Одинцово / на станцию. Например, на рисунке видно, что оба 339-х автобуса едут на станцию Одинцово (ID маршрута = 3).

Вы можете настроить карту под собственные нужды. Для этого к адресу веб-страницы карты нужно добавить параметры в следующем виде:

Листинг

Например, если нужно показать карту размером 700×500, то запрос будет таким:

Листинг

Еще один пример — показать только маршрут 339:

Листинг

В этом запросе перечислены идентификаторы маршрута 339: 2 и 3 (2 — направление из Одинцово, 3 — в Одинцово). Чтобы узнать, какие ID у вашего маршрута, нажмите на сайте odinbus.ru кнопку «Маршруты», затем выделите нужный и откройте консоль Javascript, как описано выше. В запросах вы увидите фрагмент типа «2;0|3;0» — это и есть идентификаторы вашего маршрута (2, 3). Можно выделить сразу несколько маршрутов.

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

А если кому интересно самостоятельно повозиться с программированием, то прилагаю файл программы на PHP-Javascript. В качестве хостинга рекомендую eu5.org — PHP, MySQL, междоменные запросы и другое вы получите за бесплатно .

Всем счастливых путешествий!

Cyber100
лично#
достаточно интересным способом произведен «дизасемблинг — бекинжинииринг» «пердла», ежели так можно сказать!)
Серьезный и полезный труд, на который оказались неспособны доморощенные огишные разработчики!
Гость
#
alexander_ermoshin: на который оказались неспособны доморощенные огишные разработчики
Александр, вот Вы только что оскорбили «38 (тридцать восемь) сотрудников, включая дипломированных специалистов по географическим информационным системам, аппаратно-техническому и программному обеспечению, специалистов по мониторингу транспорта» (из заявки на участие в контракте)!!!

а по теме…
сиё Хабра достойно!
только вот
Цитата: С подобным вопросом я обратился по указанному на сайте адресу info_odinbus_ru. Прошло 2 месяца абсолютной тишины в ответ.
обратился автор не по адресу… надо было разработчику ИП Кондрахин А. В. в Рязань писать, ну или в «М2М телематика Рязань», которая поддержкой этой системы там занимается…
dmpol
лично#
Александр, Гость — спасибо на добром слове!
Хотя по сути я всего лишь изменил форму представления информации. Проблема в том, что мобильные браузеры не дружат с Adobe Flash Player-ом, на котором должна воспроизводиться карта. Думаю, что решение этой проблемы, равно как и появление мобильного приложения для WinPhone — дело времени. А вот над чем действительно следует потрудиться разработчикам — так это повысить оперативность обновления данных. Вчера смотрю по карте — маршрутка в 3.7 км от меня, бац — через секунду уже вылетает из-за поворота!
Гость: обратился автор не по адресу… надо было разработчику ИП Кондрахин А. В. в Рязань писать, ну или в «М2М телематика Рязань», которая поддержкой этой системы там занимается…
Да, как правильно замечено еще в Территории профанаций, Одинцовская карта — всего
Цитата:  лишь «мордочка» аналогичного Рязанского ресурса
. Просто я поступил формально — раз указан адрес обратной связи, значит должны отвечать. Но нет.
lotti
лично#
у Яндекса есть сервис, в Одинцово отлично работает
macdigger.ru/iphone-ip…v-realnom-vremeni.html
в отличии от ОГИ-шных табло
Matthaus
лично#
ОГИшные табло в последнее время хотя бы температуру воздуха научились правильно показывать .
totosha
лично#
Matthaus: ОГИшные табло в последнее время хотя бы температуру воздуха научились правильно показывать
Это действительно, огромное достижение!
shatun
лично#
Matthaus: ОГИшные табло в последнее время хотя бы температуру воздуха научились правильно показывать .
Голод способствует увеличению умственной активности.
Комментировать могут только зарегистрированные пользователи