Руководство для общественного транспорта

16 марта, 2019
  • Руководство по построению и корректировке маршрутов общественного транспорта.
  • Самые распространенные ошибки
  • Проверка в OSM Inspector (Data validator)
  • Проверка в JOSM (Data validator)
  • Всем привет!

    Как вы уже знаете, мы недавно выпустили обновление нашего приложения для Android!

    И знаете, что там? То, что позволяет нашим пользователям строить маршруты на общественном транспорте, и это, безусловно, поможет быстрее перемещаться по бетонным джунглям. Однако база данных OSM содержит некоторую непроверенную и сомнительную информацию, поэтому мы решили помочь вам и показать, как использовать новейшие обновления в ваших интересах. Наши инструкции будут подробными, но в целом не слишком сложными, потому что мы хотим, чтобы вы участвовали в процессе формирования данных OSM. Постарайтесь ничего не сломать, хорошо? Просто шучу! Если вам нужна дополнительная поддержка, используйте LearnOSM.

    Руководство по построению и корректировке маршрутов общественного транспорта

    Рассмотрим процесс создания маршрута в JOSM. Для этого необходимо обладать базовыми навыками использования этого редактора. Создадим простой автобусный маршрут. Для начала разметим остановки. Они состоят из двух видов объектов: непосредственно точка остановки транспорта (public_transport=stop_position) и место, где пассажиры ожидают прибытия транспорта (public_transport=platform). Точки остановки транспорта должны находиться на линии маршрута. Им нужно задать теги: public_transport=stop_position, имя name (рекомендуется). Также можно воспользоваться пресетами, находящимися в Presets - Transport - Public transport.

    Место ожидания транспорта, как правило, расположено напротив точки остановки транспорта. Оно может быть точкой, линией или полигоном. Ему необходимо задать как минимум тег public_transport=platform, а также highway=bus_stop (для совместимости со схемой PT v1). Рекомендуется указывать имя (тег name).

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

    Убедившись, что на всём протяжении будущего маршрута остановки затегированы верно и находятся на концах сегментов пути, приступаем непосредственно к созданию отношения маршрута. Для этого в правой боковой панели находим панель Relations (если её нет, то она включается через Windows - Relations) и нажимаем кнопку “Create a new relation”.

    Открывается окно создания отношения. Описание тегов, использующихся для отношений маршрутов общественного транспорта..

    Добавим к отношению теги:

    type=route

    route=bus

    from=Bus stop 1

    to=Bus stop 3

    name=Bus 5: Bus stop 1 => Bus stop 3

    ref=5

    Добавим сегменты пути, по которым проходит данный маршрут. Для этого нужно перейти в основное окно программы, не закрывая окно создания отношения. Один за другим, с начала до конца, выделим участки пути, по которым проходит данный маршрут (множественное выделение делается с зажатой клавишей ctrl). Эти выделенные части дорог появятся в разделе Selection окна создания отношения.

    Добавим их в раздел "Members" с помощью блока кнопок, выделенных на скриншоте.

    Теперь необходимо добавить в отношение точки public_transport=stop_position и public_transport=platform. Не закрывая окно отношения, выделяем их на карте и добавляем в отношение (выше путей!). Чтобы с ними было удобнее управляться в дальнейшем, лучше выделять их в таком порядке: stop_position 1, platform 1, stop position 2, platform 2 и т.п. Теперь наше отношение выглядит так:

    Обратите внимание что у некоторых участников отношения автоматически заполняется столбец Role: у stop_position роль stop, а у platform - platform. Теперь нужно изменить роли у первой и последней platform и stop_position. У точек, относящихся к первой остановке, должен быть добавлен суффикс “_entry_only” (stop_entry_only, platform_entry_only) означающий что на остановке можно только садиться в транспорт, а не выходить из него. У последней остановки маршрута, суффиксы, соответственно, должны быть “_exit_only” (stop_exit_only, platform_exit_only). Если по каким-то причинам роли автоматически не проставились, их нужно заполнить самостоятельно.

    Для перемещения и сортировки участников отношения предназначены блоки кнопок 1 и 2 соответственно.

    Если порядок остановок в отношении неправильный, то OsmAnd не сможет построить корректный маршрут!

    Обратите внимание что в блоке Members у путей справа указаны стрелочки. Они обозначают направление путей, а также по ним можно узнать непрерывен ли маршрут. Теперь наше отношение описывает маршрут, который начинается на улице Фединской на остановке Bus stop 1 и заканчивается на дороге с именем “Бывшая трасса А-108” на остановке Bus stop 3.

    Теперь наше отношение описывает маршрут, который начинается на улице Фединской на остановке Bus stop 1 и заканчивается на дороге с именем “Бывшая трасса А-108” на остановке Bus stop 3.

    Как правило транспорт курсирует в обоих направлениях. Поэтому создадим аналогичный маршрут для обратного направления. Для облегчения процесса можно дублировать отношение кнопкой на панели “Relations - Create copy of this relation”. Также эта кнопка доступна в самом окне редактирования отношения. Чтобы не запутаться, удалим из копии отношения все stop_position и platform, оставив только пути. Далее с помощью кнопки “Reverse the order of the relation members” в окне редактирования отношения обратим порядок путей и проверим их корректность для обратного направления движения. Добавим соответствующие stop_position и platform, откорректируем теги отношения.

    Схема PTv2 требует чтобы все направления, варианты и описание, относящиеся к одному маршруту, были объединены отношением типа route_master. Создадим новое отношение, заполним теги:

    type=route_master

    route_master=bus

    ref=5

    В теге "ref" указывается номер маршрута.

    Не закрывая окна редактирования отношения, найдем ранее созданный маршрут в панели Relations, и из контекстного меню выберем Select relation. Маршрут подсветится на карте фиолетовым цветом, а в панели "Tags / Membership" появятся его теги.

    В окне редактирования отношения в блоке Selection должен появиться выделенный маршрут. Добавим его в блок Members соответствующими кнопками и сохраним отношение.

    Самые распространенные ошибки

    Проверка в OSM Inspector (Data validator)

    Неплохим инструментом для проверки корректности маршрутов является OSM Inspector. (Руководство на английском языке.)

    Обнаружив ошибку, нажимаем на неё, и в разделе Selection справа видим информацию о ней. Если ошибок несколько на разных слоях (overlays), то появляется вертикальная полоса прокрутки. В заголовке каждой ошибки есть кнопка с буквой "J". Эта кнопка загружает область в JOSM с помощью механизма remote control.

    Если при попытке загрузки в JOSM выдаётся сообщение “The OSM server ‘api.openstreetmap.org’ reported a bad request. The area you tried is too big or your request was too large. Either request a smaller area or use an export file provided by the OSM community”, то проще всего загрузить эту область вручную через JOSM - File - Download data - Download from Overpass API. Загрузка через Overpass API позволяет получить больше данных с сервера за один запрос, а также загрузить только требуемый тип данных.

    Gap / Gap or unordered before this way

    Данная ошибка означает что в отношении-маршруте имеется разрыв. Найдём в одноименной панели отношение с ошибкой и откроем окно редактирования.

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

    Для перемещения между участниками отношения также можно использовать стрелки вверх и вниз на клавиатуре. Таким образом, пройдясь по участку маршрута с ошибкой, можно определить какой именно путь находится не на своём месте. Зная причину ошибки, мы можем переместить путь, используя простое перетаскивание или соответствующие кнопки слева.

    Часто ошибка кроется в том, что смежная группа сегментов имеет в списке участников отношения инвертированный порядок. Чтобы это исправить, выделим в списке Members эти пути, и нажмём кнопку слева “Reverse the order of relation members”. В последних версиях JOSM рядом с этой кнопкой появилась кнопка сортировки с изображением автобуса. Она автоматически исправляет простые ошибки. Теперь, когда мы разобрались с ручным исправлением ошибок такого рода, можно попробовать пользоваться ей. При этом следует контролировать корректность исправлений.

    Empty role for non-way object

    Скорее всего не задана роль у stop_position или platform. Необходимо задать роль.

    Road vehicle route over non-road

    Маршрут проложен по дороге, тип которой подразумевает запрет проезда транспорта. Нужно проверить маршрут и внести коррективы.

    Stop without proper tags

    На месте остановки отсутствуют теги, указывающие на вид транспорта (bus=yes, train=yes и т.п.).

    Route has only stops/platforms

    В маршруте отсутствуют пути. Необходимо добавить их.

    Trolley bus without trolley wire

    На дороги, по которым проходят маршруты троллейбусов, необходимо проставить теги trolley_wire=yes, обозначающий контактную электрическую сеть.

    Unknown route type

    Тип маршрута неизвестен. Требуется уточнить его.

    Unknown role

    Уточните тип роли.

    Stop is not node

    Место остановки транспорта должно быть точкой.

    Stop not on way

    Место остановки транспорта должно располагаться непосредственно на пути движения транспорта.

    Проверка в JOSM (Data validator)

    В JOSM есть встроенный инструмент проверки данных. Он автоматически вызывается при попытке отправить данные на сервер, а также его можно запустить вручную. Для этого найдем с правой стороны главного окна панель “Результаты проверки”. Если она отсутствует, то включим её через “Окна” (Windows) - “Результаты проверки” (Validation results). Проверка всей загруженной области (если ничего не выделено) запускается по нажатию кнопки “Проверка” (Validation). При попытке отправки данных на сервер эта проверка запускается только для изменённых объектов.

    Рассмотрим результаты, относящиеся к общественному транспорту:

    - Route relation contains a ‘forward/backward/alternate’ role

    Схема PTv1 предполагала наличие ролей у путей, но из PTv2 это требование убрано. Необходимо убрать роли и перепроложить маршрут в случае необходимости.

    - Route relation contains a gap

    Аналогично Gap / Gap or unordered before this way в OSM Inspector.

    - Route scheme is unspecified. Add public_transport:version

    Если маршрут соответствует схеме PTv2, как описано в этой статье, то нужно добавить к отношению тег public_transport:version=2

    - Stop position is not part of the route

    Аналогично Stop not on way в OSM Inspector

    ____________

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

    P.S. Мы сделаем все возможное, чтобы улучшить навигацию на общественном транспорте. И помните, что каждый пользователь может внести свой вклад. Давайте создавать данные OSM вместе!