Решил поэкспериментировать в создании (пока что для себя) сервиса поиска маршрутов общественного транспорта (далее ОТ).
Уверен, кто-то с подобным работает, сталкивался или, по крайней мере, интересовался. Из того, что успел сделать, всё в голове :)
Картина следующая…
Случай №1:
— Город.
— Много маршрутов ОТ.
— Ещё больше остановок.
— ОТ может двигаться по этим маршрутам в нескольких направлениях (иногда маршрут в одну сторону не полностью совпадает с маршрутом другую либо маршрут в виде петли как на «Кольцевой» линии).
— Маршруты могут пересекаться на определенных остановках.
— Одним маршрутом можно не добраться из пункта отправления в пункт назначения, нужно делать пересадки.
— Человек находится в месте, которое может оказаться ближе к одной остановке по расстоянию, но не по доступности (мешают, допустим, забор или река).
— Добраться может также не получиться. Выберется ближайшая остановка.
Случай №2:
Сеть дорог города… ОГРОМНЫЙ граф. Если учитывать дальнейшее добавление сервиса «пробок»…
Интересуют следующие моменты:
— литература;
— примеры (открытые проекты);
— более оптимальный способ хранения данных;
— ваши мысли, опыт, «я когда-то собирался/делал» и т.п. :)
Из мыслей:
У каждой остановки ОТ будет «зона влияния».
На карте это выглядит как «многоугольник», внутри которого расположена точка (остановка), а не как «круг» (типа поиск остановки в радиусе «стольких-то метров»). Таким образом будет идти поиск, чтобы избежать предложения системой в качестве ближайшей остановки ту, которая, например, находится на другом берегу реки.
А что тут говорить, алгоритмически задача давно уже рассмотрена и даже программно имплеменированна. Взять хотя бы алгоритм Дейкстры. Для задачи «а может пешком ближе» нужно знать координаты всех остановок. Тут может помочь база данных с поддержкой географических объектов как-то Postgresql с postgis-ом.
Посмотрите в сторону OSM, вот кстати страница посвященная маршрутам общественного транспорта в Пензе wiki.openstreetmap.org/wiki/RU: Пенза/Общественный_транспорт (вы ж оттуда вроде?)