Pull to refresh

Общественный транспорт в мобильном телефоне

Reading time 5 min
Views 7.2K
Сейчас уже во многих городах появились сервисы, которые показывают движение общественного транспорта на карте. Наш Курган — не исключение. Вот только одна проблема: чтобы просмотреть, где едут автобусы, нужен компьютер или хотя бы мощный смартфон, который сможет загрузить всю карту. Если же вы много перемещаетесь по городу, то максимум, что у вас есть под рукой — обычный телефон, на котором ни о какой карте не может быть и речи.

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


Мечта


Всё начинается с мечты. Многие (и я в том числе) хотели бы не тратить свое время на остановках, выглядывая свой любимый автобус. Особенно в 30-градусный мороз. Особенно когда два из пяти автобусов на маршруте внезапно (!!) сломались.

Как было бы хорошо в такой момент глянуть на телефоне, где едет твой автобус. Может быть, не стоит ждать, и проще проехать с пересадкой? Или, наоборот, не запрыгивать в первый попавшийся автобус, а чуть-чуть подождать, но уехать на том, который проедет как нужно. Или (высший пилотаж) спланировать выход из дома так, чтобы совсем не стоять на остановке.

План действий


Конечно, в нашем городе есть карта, по которой катаются автобусы в режиме реального времени. Но попытки открыть ее в моем (довольно стареньком) смартфоне окончились ничем — он ее не тянет. Тогда в голову пришла разумная мысль — а что, если превратить данные с карты в обычный текст? Примерно вот так:

б. Солнечный -> 1-й микрорайон
Х 537 ЕУ: КЗКТ ->--- Гастроном Воскресенье

1-й микрорайон -> б. Солнечный
Х 446 КЕ: АТС №6 >---- 5-й микрорайон

на конечных
Х 442 КЕ: 1-й микрорайон конечная

Ведь всё, что нам, по сути, нужно знать — направление движения автобусов, между какими остановками каждый находится, и, пожалуй, еще пригодится госномер. Оказывается, не так уж и много информации — потянет любой телефон. Естественно, немаловажным фактором является и объем мобильного трафика — в данном случае он тоже минимален.

Таким образом, нам нужен сервис, который бы умел превращать положение автобусов на карте в текст.

Алгоритмы


Для разработки алгоритма, естественно, нам нужны исходные данные: остановки (координаты, названия) и сами маршруты (координаты всех отрезков). Были сделаны связи остановок с маршрутами, отрезков с направлениями движения и т.д. Всё положили в таблицы MySQL.

В бета-версии алгоритм был самый простой: берем геоточку, соответствующую автобусу, находим sql-запросом, к какому из отрезков маршрута она ближе всего. Далее по отрезку восстанавливаем остановки, между которыми едет автобус, и направление его движения. Идея хороша, но практика показала, что она работает только для кубических автобусов в вакууме. В реальности автобусы начинают «перепрыгивать» с одного направления на противоположное, и обратное. Связано это, как нетрудно догадаться, с реальным дорожным движением — объезды, перекрестки, развороты и тому подобное.

Спустя примерно месяц алгоритм был доработан. Мы заметили, что gps-трекеры, помимо координат, отдают еще и текущее направление движения (азимут). Грубо говоря, азимут — это угол между направлением на север и стрелкой, характеризующей расположение автобуса. Если добавить эту информацию в наш первый алгоритм, то уже получится намного лучше. Действительно, даже с учетом всех «вихляний» автобуса, его азимут не может меняться более чем на 50-60 градусов от реального направления движения. Теперь мы можем достаточно точно определять, откуда и куда едет каждый автобус.

Определение азимута автобуса:



Проверяем точность


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

Предположим, что два человека через небольшой промежуток времени сделали по одному запросу на один и тот же маршрут. Очевидно, что за такой малый промежуток ни один автобус не успеет изменить направление на противоположное (исключаем те, которые стоят на конечных). Если же наш алгоритм покажет, что у какого-то из автобусов вдруг сменилось направление — значит, это ошибка вычисления.

Исходя из такой логики мы сделали скрипт, который прошелся по всем накопленным данным. Были взяты пары данных, отстоящие друг от друга не более чем на 2 минуты. На разных маршрутах таких пар получилось от трехсот до нескольких тысяч. Рассчитанная точность (число ошибок / общее число пар) получилась довольно хорошая — 94-98%. Как видно, алгоритм иногда всё-таки сбоит, но для текущего уровня вполне достаточно. К тому же мы рекомендуем пользователям делать по 2-3 запроса, чтобы исключить такие аномалии.

Интерфейс


В плане интерфейса рекомендации довольно типовые. Спустя какое-то время, мы перевели всё на twitter botstrap, чтобы было читабельно на любых устройствах — от самых простых телефонов до мощных планшетов.

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

Интерфейс (просмотр на десктопе):



Кроме того, функционирует ICQ-бот, который выдает аналогичные ответы. Достаточно отправить ему номер интересующего маршрута.

Статистика


В настоящее время посещаемость сервиса 100-150 человек в сутки, каждый из которых делает 6-8 запросов. Возможно, кому-то эти цифры покажутся невелики, но достигнуты они безо всяких вложений на рекламу. К тому же, многие моменты всё еще требуют «доводки напильником», чтобы сервис был максимально полезен людям. На первое место мы ставим качество, а не посещаемость.

План развития


О самом вкусном напоследок…

Сейчас «мобильные автобусы» легли в основу диплома, который делает у нас один из студентов. Суть диплома довольно интересна: по информации о движении автобусов вычислять возникающие в городе пробки, а исходя из пробок — давать рекомендации, на каком из маршрутов лучше всего добираться из точки А в точку Б. Мне кажется, в нынешнее время это крайне актуально, причем не только пассажирам, но и автомобилистам, и всем тем, кто сильно зависит от дорожной обстановки (такси, развозка продуктов питания, служебный транспорт и т.д.). Ближе к маю посмотрим, что у нас получится — постараемся отписаться на хабре.

Утренние пробки в Кургане (данные 14 февраля):



Ну и, разумеется, мы открыты для обсуждения, если вы хотите внедрить что-то подобное в своем городе. Хватит уже тратить свое время на остановках, давайте лучше тратить его на что-нибудь более полезное! :-)

P.S. Часто задаваемый вопрос

Почему бы не сделать андроид-приложение?

— Сделать приложение — можно, но это вторично. Основная задача, которую мы решаем: научиться преобразовывать геоданные в текстовый формат. Как только мы научимся так делать, формат вывода информация уже станет делом техники. Можно через браузер, можно через бота ICQ, можно через джаббер, можно через приложение…
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+29
Comments 32
Comments Comments 32

Articles