osmot - препроцессор для карт маршрутов общественного транспорта

Написал небольшой скрипт для получения карт маршрутов городского транспорта. От существующих отличается выводом конечных и указанием направления движения односторонних маршрутов.
Для запуска требуется osm2pgsql и PostGIS. Скрипт создаёт в базе две новых таблицы, которые можно открыть в QGIS. У меня он работает в osgeolive из коробки, детальную инструкцию смотрите на гитхабе.

В качестве точки конечной берётся первая точка первой линии маршрута, а название - из поля from, поэтому пришло время проставлять их по всей России!

Примеры:

Kursk trolleybus routes map 2013 by trolleway, on Flickr


unfinished mostroll map 2013-09-24 by trolleway, on Flickr


Карта Могилёвского троллейбуса 2012 by trolleway, on Flickr

http://www.flickr.com/photos/trolleway/tags/osmot/
https://github.com/trolleway/osmot

Чего только люди не придумают, лишь бы не использовать ptproc :slight_smile:

Как определяется направление маршрута? Насколько я знаю, mapnik не гарантирует никак расположение и направление надписи.

Троллейбус 81 to=Метро Новоясеневская, конечная остановка Битцевский рынок

Алгоритм такой:
Берём каждый вей в маршруте.
Смотрим, каким концом он соединяется со следующим. Получается, что направление движения этого маршрута по этому вею либо “вперёд”, либо “назад”. Составляем надпись, например “3>”
Потом, если один маршрут с №3 по этому вею проходит “вперёд”, а другой с таким же номером “назад”, значит направление - “оба”.
Выделяем отрезок из 2 точек в середине вея.
Определяем его азимут. Тут могут быть проблемы с проекциями.
Если отрезок направлен с запада на восток, то есть диапазон углов такой-то - то добавляем к нему поле с надписью “3>”. А если отрезок направлен с востока на запад - значит переворачиваем в надписи все стрелки на противоположные.
В рендере подписываем слой стандартным средством расстановки надписей, в кугисе оказалось даже надписи на двухпутных трамвайных линиях расставляются правильно.

Бывают иногда ошибки: у длинных L-образных веев надписи могут отображатся не в ту сторону, например на этой трамвайной линии.
http://openstreetmap.ru/#layer=MT&zoom=17&lat=55.060939&lon=38.758
Для избежания этого нужно будет в скрипте разрезать улицы на кусочки, если они поворачивают больше чем на 90 градусов.