User:Trolleway/Ввод маршрутов ОТ
Постановка проблемы
В наше время научно-технической революции остаётся нерешенными часть задач в области городского транспорта. В частности при поездках в другие города, возникает проблема: "Где взять схему городского транспорта"? Традиционно наши транспортные организации схемы не публикуют. Их рисуют любители транспорта, и выкладывают на свои сайты. У схем с фанатских сайтов недостаток в том, что они публикуются в растре. Соответственно, их может обновить только автор. Сами авторы схем своими произведениями пользуются мало, потому что и так всё запоминают во время рисования. Соответственно они не расчитывают их вёрстку на то, что их будут печатать на бытовых принтерах. Порог вхождения в CorelDraw достаточно высок, поэтому иногда попадаются ужасы вроде схем нарисованых в Paint и сжатых в jpg.
Способом преодоления этих неудобств является использование OpenStreetMap. Неограниченое количество пользователей вносят в общую базу данных остановки и прокладывают по улицам маршруты. Эти данные хранятся в векторном виде, и в любой момент могут быть запрошены вместе с геометрией уличной сети и всеми остальными географическими данными. В этом состоит отличие OSM от карт Яндекса и Гугла. Далее есть различные варианты использования этих данных.
Чем OSM поможет любителям транспорта
Сейчас функционируют несколько серверов, которые рендрят схему линий и регулярно её обновляют.
- http://openbusmap.org (обновление раз в сутки)
http://openptmap.org(обновление раз в несколько суток)http://latlon.org/pt(обновление не работает)http://openmap.lt(обновление раз в сутки, так же видно на http://openstreetmap.ru)
Интервалы обновлений на разных сайтах время от времени меняются, тут они написаны по состоянию на май 2016.
По ним могут ориентироватся владельцы коммуникаторов с доступом к сети. Эти карты могут использовать в качестве картографической подложки различные интернет-сайты, например они уже используются на http://transpoto.ru, http://busphoto.ru, http://phototrans.eu . Возможно поднять сервис, который будет раз в сутки скачивать с них тайлы и склеивать удобный для печати pdf. К сожалению, на них не подписываются стрелочки у односторонних маршрутов, зато у некоторых под названиями остановок подписываются проходящие маршруты.
Второй способ - это отрендрить маршруты самому. Для этого я написал скрипт: https://github.com/trolleway/osmot. Он открывает локальную базу данных PostGIS, в которую импортирован дамп маршрутов, и создаёт отдельные пространственные таблицы с точками конечных и подписями со стрелочками для односторонних маршрутов. Далее эти данные можно подать в QGIS, Nextgis.com или mapnik.
Используя векторные данные можно значительно ускорить собственноручное создание карт.
- Простой способ: экспортировать сетку улиц с остановками и нужными маршрутами программой QGIS затем в нём же расставить подписи маршрутов.
- Воспользоваться скриптом [1], который обрабатывает дамп загруженный в PostGIS, генерируя слои подписей маршрутов со стрелочками и конечными. Эти слои рендрятся в QGIS, Mapnik, или NextGIS.com.
- Поднять openptmap на Ubuntu.
- По таким данным возможно сделать автоматический роутинг. Пока этого ещё никто не сделал, потому что маршрутов мало ввели.
Так вот, если вы любитель транспорта, то попробуйте повводить маршруты ОТ в OSM. Вы станете ещё лучше ориентироваться в транспорте своего города, запомните все маршруты, и найдёте себе увлекательное занятие.
Ввод остановок
Маршруты в базе хранятся в форме отношений (читайте остальную вики). В них входят участки дорог и остановки, но в принципе, остановки можно не включать. Дорожная сеть в базе есть почти вся, а вот остановок ещё мало. Для начала можно начать с указания остановок, это просто. Работать будем в основном редакторе JOSM. В Potlach в маршруты лезть не следует, он не рассчитан на такую сложную работу, и может их испортить.
- Читаем в этой вики основные понятия, раздел RU:Beginners_Guide и RU:Map_Making_Overview
- Запускаем Josm, и скачиваем область, где будем ставить остановки. Для него нужна Java.
- Включаем подложку Bing, и сдвигаем её так, что бы контуры зданий на слое данных совпадали с контурами зданий на уровне земли(не крыш) на снимке.
- Для автобусов и троллейбусов ставим точку рядом с дорогой, можно на линию тротуара. Как вы знаете, пользоватся бумажными картами, гуглом и яндексом нельзя. Зато можно пользоватся панорамами на яндекс-картах, можно проехаться по всем улицам и снять координаты остановок GPS-навигатором, или можно проехатся с распечаткой карты, и отметить остановки ручкой. Точку остановки лучше ставить на место павильона (при его наличии) и указать при этом shelter=yes и/или bench=yes. Крышу павильона часто можно разглядеть в Бинге.
- Назначаем точке теги public_transport=platform, name=*.
- Собственно всё, данные можно закачивать на сервер.
Примечание. Трамвайные остановки отмечаются точкой на пути с тегом railway=tram_stop. В некоторых городах двухпутная линия нарисована одной линией, в некоторых - двумя. Так вот, лучше сначала трамвай одвухпутить, а потом рисовать маршруты, потому что одвухпучивать с разделением маршрутов очень трудоёмко. Обратитесь к какому-нибудь более опытному любителю трамваев
Ввод маршрутов
Здешние пользователи с 4 раза согласовали подробную схему (стандарт), как вводить маршруты: RU:Общественный_транспорт. Это длинная статья в вики, где написано, какие теги чему назначать. Схема очень гибкая, то есть туда можно завести наверное любой маршрут без костылей. Но поэтому она избыточная, полное её понимание приходит не сразу. К счастью, маршруты можно вводить используя только минимальное число тегов.
Подразумевается, что сейчас вы знакомы с интерфейсом JOSM и особенно с кнопочками в окне редактирования отношений.
- Скачиваем (фрагментами) область вдоль всей трассы маршрута
- В JOSM включаем панель фильтров, добавляем три фильтра
- stop | platform
- motorway | trunk | primary | secondary | tertiary | unclassified | bus_stop | public_transport | highway=residential | highway=service
- place
- living_street
Два последних фильтра в списке активируем (положение checkbox-ов: true, true, false). У длинного фильтра выставляем три checkbox-а в true. Эта операция уберёт с экрана всё, что нам не понадобится. Фильтром stop | platform при необходимости будем включать и выключать отображение всего кроме остановок.
- Создаём новое отношение. У него обязательно должны быть 4 тега:
- type=route
- route=bus|trolleybus|tram|share_taxi
- ref=25
- name=Автобус №25: Нагорный бульвар – Красная площадь (от пункта "А" до пункта "Б).
Не забудьте: теги пишутся маленькими буквами. Между пунктами назначения ставится тире, выделенное пробелами.
- Идём на конечную А, с зажатым Ctrl кликаем по порядку на все сегменты дорог входящие в маршрут. Их список попадает в правый список в окно, жмём на кнопку, и он попадает в левый. Добавляем, пока не доходим до пункта "Б".
- Если в выделение попадутся точки - выкидываем их. Скорее всего линии не будут разрезаны на некоторых перекрёстках. Тогда что бы разделить линию выделите узел, и нажмите клавишу P
- В левом списке, справа от названий улиц есть столбец с вертикальной линией. Так обозначается непрерывность маршрута. Маршрут должен быть непрерывный, в нём не должно быть дырок. Если в столбце заметите разрыв - найдите крайние сегменты разрыва, и вставьте в отношение нужные сегменты между ними.
- Теперь хорошо бы добавить остановки. Нам нужны точки или линии стоящие на обочине, с тегами highway=bus_stop или public_transport=platform. По порядку выделяем их, и добавляем В НАЧАЛО ОТНОШЕНИЯ с ролью platform. (сегменты дорог добавлялись с пустой ролью).
- Отношение готово. Закрываем его, и создаём другое - для направления от пункта "Б" к пункту "А". Ставим ему такие же теги, а тег name=Автобус №25: Красная площадь - Нагорный бульвар. Наполняем отношение аналогично предыдущему пункту.
- Создаём отношение, которое обьединит оба направления:
- type=route_master
- route_master=bus
- name=Автобус №25: Нагорный бульвар - Красная площадь.
- Добавляем в него два отношения: маршрут (Автобус №25: Нагорный бульвар - Красная площадь) и маршрут (Автобус №25: Красная площадь - Нагорный бульвар)
- Вот и всё, данные можно закачивать. Через час линию можно будет посмотреть на http://latlon.org/pt
Здесь описаны не все теги, которые можно использовать для ввода маршрутов. За остановки мы считали места посадки пассажиров находящиеся на тротуаре, и вносили их с ролью platform. В схеме предусмотрено, что можно ещё вносить места остановки транспортных средств - точки на дорогах с ролью stop. Я их тут не упомянул для простоты изложения. Это что касается автобусов и троллейбусов. Трамваи наоборот - рекомендуют вносить с точками на путях с ролями stop.
Ещё есть более подробное руководство по вводу от пользователя Stud. В нём более подробно изложено описание действий в интерфейсе JOSM. Оно писалось давно, и рекомендуемые в нём теги устарели. Участки дорог заносятся с пустой ролью, остановки с ролью platform, и если маршрут не кольцевой а обыкновенный, то нужно не забыть route_master.
Заготовка с тегами для JOSM от iav
Она добавляет в меню "Заготовки" пункт "Общественный транспорт" c кнопками для добавления остановок и отношений маршрутов. Использование этого инструмента заметно упрощает ввод тегов для остановок и маршрутов. Зайдите в "Настройки" -> "Параметры проекции карты и отображения данных" -> "Заготовки с тегами", и добавьте заготовку с URL http://josm.openstreetmap.de/josmfile?page=Presets/PublicTransportWMasterRoute&preset
Поставьте точку или линию на платформу где останавливается транспорт, и нажмите пункт "Место посадки". Откроется окно, где можно будет указать все нужные для остановки теги щёлкая мышкой, а не вводя ключи с клавиатуры. Для создания маршрута не выделяйте ничего, выберите пункт "Маршрут", введите в нём все нужные названия, и нажмите большую кнопку посредине.