RU:Общественный транспорт по схеме Oxomoa

From OpenStreetMap Wiki
Jump to navigation Jump to search

Как только в русскоязычном осм заходит разговор об общественном транспорте, начинается хаос. В итоге, схемы транспорта в разных городах построены по разным схемам, и инструменты для одного региона могут быть неприменимы к другим. Хочется, однако, единого стандарта, и, поскольку только User:Oxomoa потрудился сделать таковой, эта работа основывается на его схеме. Также описываются принципы работы с плагином Public Transport для JOSM, серьёзно облегчающим применение схемы.

Начнём с того, что для обозначения общественного транспорта требуется внесение трёх сущностей: линейной и точечной инфрастуктуры, а также сети маршрутов.

Линейная инфраструктура

Это то, по чему движется транспорт. Дороги, рельсы, или паромный маршрут по воде. Автобусы и троллейбусы ездят, очевидно, по общей дорожной сети (highway=*). Для остальных используются следующие тэги:

Вид Геометрия Тэг
дороги с троллейбусными проводами линия highway=* и trolley_wire=yes
пути для поездов линия railway=rail
пути для лёгкого метро линия railway=light_rail
пути для метро линия railway=subway или railway=monorail
пути для трамваев линия railway=tram
фуникулёры линия railway=funicular
горизонтальные конвейеры линия highway=conveyor
эскалаторы линия highway=steps и escalator=yes
канатные дороги линия aerialway=*
водные пути для паромов линия waterway=ferry_way

Железные дороги

Если рельсы близки друг к другу и обладают одинаковыми свойствами, их можно, но не обязательно, рисовать одной линией с указанием количества путей в тэге tracks=*. Очевидно, по умолчанию подразумевается значение tracks=1.

Обычные железнодорожные пути

Для назначения железной дороги предлагается использовать тэг usage=* со следующими вариантами значений:

  • usage=main — основные пути;
  • usage=branch — побочные (например, разъездные) пути. Чаще используется service=siding;
  • usage=industrial — пути предприятий. Также см. service=spur;
  • usage=military — пути военного назначения;
  • usage=tourism — пути, используемые исключительно для туристических маршрутов.

Метро

Метро бывает трёх видов: подземное (railway=subway), лёгкое (railway=light_rail) и монорельс (railway=monorail). Подземное метро также обязательно должно дополняться тэгом tunnel=yes, когда оно проходит по землёй, и явным указанием tunnel=no при выходе на поверхность.

Для монорельса обязательно указывать его тип: monorail=hanging для подвесного или monorail=magnetic для магнитного.

Трамвайные пути

Пути для трамвая всегда должны рисоваться отдельной линией, даже когда проходят по центру улицы. Иначе станет затруднительно определить, к чему относятся дополнительные тэги (например, construction=yes).

Разделять пути для разных направлений можно, но не обязательно (пример разделения — Хельсинки).

Фуникулёры

Это вагончики, по рельсам взбирающиеся на горы. Для обозначения их путей используется railway=funicular.

Дополнительные тэги

Полный список тэгов, применимых к железными дорогам, есть на странице RU:Key:railway. Также про обозначение железных дорог немало написано здесь (на английском). Основные тэги перечислим в этой таблице:

Название Значения Описание
ref число или буквы номер пути
name текст название пути
disused yes / no уже не используются?
construction yes / no только строится?
planned yes / no запланированы?
tunnel yes / no в тоннеле?
bridge yes / no на мосту?
gauge число ширина полотна в миллиметрах
loading_gauge число максимальная ширина вагонов в миллиметрах
electrified yes / no / contact_line / rail электрификация (есть / нет / контактный провод / рельсы)
voltage число напряжение в контактной сети
operator текст владелец путей

Конвейеры

Также известны как горизонтальные эскалаторы. Один из примеров — подземный конвейер в аэропорту «Пулково». По аналогии с другими объектами пешеходной навигации, они обозначаются highway=conveyor и могут дополняться следующими тэгами:

Название Значения Описание
oneway yes / -1 / no односторонний?
wheelchair yes / no / limited / only подходит для людей в инвалидных колясках? (да / нет / ограниченно (с помощником) / только для колясок)

Паромные пути

Паромы редко движутся по центру реки. Чтобы не смешивать гидрографию и инфраструктуру, их маршруты обозначаются тэгом waterway=ferry_way. Не обязательно маршрут именно парома: например, в городе может быть водное такси, также обозначаемое этим тэгом.

Точечная инфраструктура

Для рисования остановок различных видов транспорта в однотипной манере требуется выделить общие свойства остановок. В этой схеме модель остановок состоит из четырёх компонентов:

  • точка остановки (stop position) на дороге, где непосредственно останавливается транспорт;
  • место посадки (access), где пассажиры входят на остановку, либо садятся в транспорт;
  • остановка в целом (stop area);
  • группа остановок (stop area group).
Модель остановок, иерархия

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

Точка остановки

Отмечаются как точки public_transport=stop_position прямо на линии дороги. Это ровно то место, где останавливается автобус или трамвай, например. Хотя такие точки не зависят от видов транспорта, что на них останавливается, да и эта информация может быть извлечена из отношений, содержащих точку, всё-таки желательно проставить на точку тэги с видами транспорта, что останавливаются на ней:

Название Значения Вид общественного транспорта
bus yes / no останавливаются автобусы?
rail yes / no останавливаются поезда?
light_rail yes / no останавливается лёгкое метро?
subway yes / no останавливается метро?
monorail yes / no останавливается монорельс?
tram yes / no останавливается трамвай?
funicular yes / no останавливается фуникулёр?
aerialway yes / no проходит канатная дорога?
ferry yes / no останавливается паром?

Сколько точек рисовать для каждой остановки? Ответ прост: одна точка, если на местности только одна: автобусы разных направлений останавливаются ровно напротив друг друга, либо там однопутная железная дорога. Иначе рисуется несколько точек: столько, сколько есть на самом деле. Чаще всего две, для каждого направления.

Место посадки

Геометрия и характеризующий тэг места зависят от вида:

Вид Геометрия Тэг
платформа или знак остановки точка or линия or полигон public_transport=platform
вход в помещение или транспортное средство точка public_transport=entrance


Также, дополнительные тэги:

Название Значения Описание
ref число или буквы маркировка (особенно касается платформ)
name текст название остановки
operator текст владелец остановки (если обслуживается только частными компаниями)
bus yes / no останавливаются автобусы?
rail yes / no останавливаются поезда?
light_rail yes / no останавливается лёгкое метро?
subway yes / no останавливается метро?
monorail yes / no останавливается монорельс?
tram yes / no останавливается трамвай?
funicular yes / no останавливается фуникулёр?
aerialway yes / no проходит канатная дорога?
ferry yes / no останавливается паром?
wheelchair yes / no / limited / only подходит для людей в инвалидных колясках?
bench yes / no есть ли скамейка?
bin yes / no есть ли мусорное ведро?
shelter yes / no есть ли навес?
toilet yes / no есть ли туалет?

Отношения остановки

В отношение public_transport=stop_area включаются все точки и места остановки, а также, возможно, здания, паромные терминалы и тому подобное. Дополнительно на отношение могут ставиться следующие тэги:

Название Значения Описание
ref число или буквы ID остановки
name текст название остановки
operator текст владелец остановки
uic_ref число официальный ID в соответствии с International Union of Railways
uic_name текст официальное название в соответствии с International Union of Railways

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

Группа остановок объединяется в отношение public_transport=stop_area_group, если формально всё это части одной остановки. Например, остановки «площадь Ленина-1» и «площадь Ленина-2» можно объединить в группу «площадь Ленина». Также группа может включать точки с другими функциями, связанными с транспортной инфраструктурой: пункты вызова такси, прокаты машин и велосипедов.

Примеры

Простой случай: одна точка автобусной остановки с названием:

Как выглядит
Как нарисовано

Две остановки разных типов, объединённые в группу:

Как выглядит
Как нарисовано

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

Приведённая модель полностью совместима с той, что используется повсеместно. Она лишь уточняет суть. Например, highway=bus_stop или railway=halt будут считаться точками остановки, если расположены прямо на дороге, либо местами посадки, если стоят рядом с ней. Многие существующие элементы уже определены как места посадки: например, railway=subway_entrance, или railway=platform. Добавляя теги public_transport=*, можно указывать дополнительные данные, не портя нарисованное. Затем эти элементы можно без проблем объединить в отношения остановок.

Лифты

Иногда остановки оборудованы лифтами. Они обозначаются следующим образом:

Название Значения Описание
highway elevator это лифт (подъёмник)
oneway yes / -1 / no односторонний?
wheelchair yes / no / limited / only подходит для людей в инвалидных колясках?
capacity число максимальная вместимость
maxweight число максимальный вес в килограммах
toll yes / no или число платный?
operator текст компания-владелец

Альтернативная модель остановок

Пользователь itschytoo предложил модель Unified Stoparea, которая ближе к привычным практикам обозначения остановок, но не настолько унифицирована, как предложение пользователя Oxomoa. Рекомендуется её прочитать (для лучшего понимания различий между точками остановки, местами посадки и отношениями остановки в целом), но не использовать.

Сеть маршрутов

Модель Oxomoa для отношений для маршрутной сети не стала популярной из-за противоречивости и, местами, несовместимости с вышеописанным. Поэтому здесь описывается общепринятая модель для маршрутов общественного транспорта.

Маршрут обозначается отношением type=route, в которое включаются все остановки и все отрезки пути, по которому проходит маршрут. Для каждого направления делается отдельное отношение. Причина проста: разные направления — это разные маршруты, по недоразумению обозначенные одной цифрой. Им принадлежат разные остановки и они нередко идут по разным дорогам (например, где одностороннее движение). Различать маршруты-направления нужно по тэгам отношения from=* и to=*, хранящим названия начальной и конечной точек маршрута. Желательно записывать в них те названия, что отражены в табличках на транспортных средствах.

Полный список тэгов для отношений type=route можно прочитать на странице RU:Relation:route, здесь приведу только те, что касаются маршрутной сети:

Название Значения Описание
type route (обязательно)
route bus, trolleybus, tram, share_taxi, subway, light_rail, ferry Тип транспорта: автобус, троллейбус, трамвай, маршрутное такси, метро, лёгкое метро, паром (обязательно)
ref число и/или буквы Номер, под которым известен маршрут: 4, 4A, X13, IR 3114 и т.д. (желательно)
to текст Название станции или конечного пункта, до которого идёт маршрут (желательно)
from текст Название станции или исходного пункта, от которого отправляется маршрут.
operator текст Название компании, обслуживающей маршрут. Например, Deutsche Bahn AG, Connex, Петербургавтотранс, Третий парк.
name текст Название маршрута или линии, например «Восточный экспресс».
network текст Название (аббревиатура) сети, например, BVG, RMV.
wheelchair yes / no / limited Подходит ли транспорт на маршруте для людей в инвалидных колясках.
colour пример: red / #FFEEDD «Официальный» цвет маршрута. Установлен в некоторых городах.
cycle yes / no Обозначает, что маршрут кольцевой и пассажир при желании может проехать несколько кругов.
price число Для несоциальных маршрутов (маршрутных такси) здесь указывается цена проезда в национальной валюте.
opening_hours интервал времени Интервал, в котором работает этот маршрут. Может использоваться для альтернативных трасс движения, например, по выходным дням.

Участники отношения добавляются с такими ролями:

Геометрия Роль Описание
линия (ничего) / route Отрезки, из которых состоит маршрут.
линия forward / backward Если маршрут проходит по отрезку только в одном направлении, роль определяет, в каком (относительно направления отрезка). Обычно все отрезки в маршруте имеют эту роль, так как «одно направление — одно отношение». Желательно, но не обязательно, сортировать отрезки в отношении.
точка stop Остановка: точка вида highway=bus_stop, railway=halt или public_transport=stop_position. Остановки в отношении должны быть отсортированы от начала к концу маршрута.
точка forward:stop / backward:stop Остановка, которая используется только при движении в одном направлении (относительно отрезка, а не точки назначения). Используется, когда маршрут по линии проходит сразу в двух направлениях. Ввиду неоднозначности этой роли использовать её нежелательно. Впрочем, соблюдение правила «одно направление — одно отношение» устраняет проблему.

«А теперь мы попытаемся со всем этим взлететь...»

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

Простой маршрут

Возьмём обычный маршрут и представим его в виде линии:

Bus-route-1.gif

У маршрута есть первая остановка, конечная остановка и улицы, по которым он едет. На местности остановки обозначены точками highway=bus_stop (да, это автобусный маршрут). Если не обозначены — обозначьте. «Но как же теги public_transport=platform?» — спросите вы. Честно говоря, ими пока мало кто пользуется. Например, они не отображаются на рендерах. Но если предложение (см. следующий раздел) пройдёт, можно будет без проблем ставить platform — ну или stop_position, если вы предпочитаете ставить точки на линии дороги.

Итак, остановки отмечены, дороги есть. Это уже две трети дела, и всё ещё ни одного отношения! Создаём первое с тегами type=route, route=bus, ref=14, from=Тверская, to=Ямская. Теперь добавляем в него по порядку все линии дорог по маршруту, от первой до последней. Те, что повёрнуты по пути следования, с ролью forward, встречные — с ролью backward. Проверьте, чтобы не было дырок: современные редакторы умеют показывать связность.

После линий добавьте остановки: каждую точку по порядку, от первой до последней. Каждую с ролью stop. Убедитесь дважды, что в отношение они попали по порядку. После этого одно направление маршрута считаем готовым.

Хотя на картинке линия одна, на самом деле их две. Вот так:

Bus-route-2.gif

Как видите, у них разный набор остановок и в одном месте, где улицы односторонние, они идут по-разному. Мы только что сделали отношение для одной линии, теперь будем делать для другой. Теги у нового отношения будут те же, только from и to меняются местами. И точно так же добавляем сначала линии, затем остановки, но уже для обратного направления. Заметьте, что остановки даже с одинаковыми названиями для разных направлений разные: они расположены с разных сторон дороги.

Пошаговую и очень подробную инструкцию с картинками написал Stud555, новичкам будет крайне полезно посмотреть на процесс.

Супермаршрут

У нас получилось два отношения на один маршрут. Если, например, по выходным автобус делает лишний крюк на кладбище (старушек подбросить), то это уже будет четыре отношения. Как это всё упорядочить? Просто: сделайте ещё одно отношение type=route с прочими тегами (кроме from и to) и добавьте туда два или четыре отношения на каждое направление с одним номером.

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

Кольцевой маршрут

А если автобус едет-едет, затем объезжает квартал по периметру и, не останавливаясь, едет обратно до конечной, которая совпадает с начальной? Или просто объезжает район по кольцу и возвращается в исходную точку? Зачем же резать маршрут на два, это нелогично!

Да, это нелогично. Чтобы определить, когда маршрут нужно резать, а когда нет, нужно понять, что такое «направление». Не будем изобретать словесный велосипед, а процитируем форум:

Отношение маршрута строится для роутинга. Используется свойство отношения, что все его члены упорядочены. Например, остановки:
1. первая остановка; к ней автобус, выезжая из отстойника, подъезжает пустым и проворный пассажир может занять сидячее место даже в час пик;
2. вторая остановка, до неё автобус собрал пассажиров с первой;
......
N-1. предпоследняя остановка. На ней в автобусе, кроме кондуктора, не выходят только те пассажиры, кому нужно на конечную;
N. конечная остановка: пассажиры выходят, кто не собирается, тех выгоняет кондуктор.
После конечной автобус идёт в парк или в отстойник, без пассажиров. Любой потенциальный пассажир, сев на остановке [1..N-1], может быть уверен, что доедет до конечной. Иногда человек, сев на N, может доехать до 1 и т.д., но это не обычная ситуация, и с вероятностью от 30% его прогонят, потому что автобус идёт в парк или в отстойник.
Отрезки маршрута собираются в отношение от первой к конечной остановке по порядку следования, роли forward и backward определяют направление движения относительно направления отрезка.
Чаще всего первых и конечных остановок на маршруте две: в начале и в конце. Но бывают т.н. кольцевые маршруты, которые оборачиваются в середине, или вообще делают полноценное кольцо. Вот так:
Bus-route-koltso.gif
Здесь N=17. Бездумное применение схемы Oxomoa может кого-то заставить разбить маршрут на два отношения с конечной где-то между 7 и 11 остановками, но это явная ошибка, потому что пассажир может, например, сесть на 6-й остановке и доехать до 16-й. И никто ему слова не скажет, потому что таков маршрут. И роутинг должен об этом знать, разумеется, чтобы оптимизировать затраты времени.
Поэтому приведённый маршрут делается одним отношением с 17 остановками и всеми отрезками по пути следования, сначала в одну сторону, затем в другую. Это не костыль, это логическое отражение реального маршрута.
Разбивается маршрут только если он на деле — два маршрута, и пассажир не может, сев на одной половине, сделать полукруг и выйти на той же остановке с другой стороны улицы.

Мозголомное «один маршрут» — «два маршрута» легче осмысливается, если использовать термин «направление».

Что если маршрут совсем кольцевой, как кольцевая линия московского метро? В схеме Oxomoa ответа нет, но это можно обозначить тегом cycle=yes на отношении маршрута. Точка разрыва (между первой и конечной остановками) выбирается там, где автобус съезжает с маршрута в парк (он же должен, рано или поздно).

Пересадка

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

Элементарно: создаёте отношение с тегами type=public_transport, public_transport=stop_area_group и добавляете туда все четыре точки остановок. Ну и можно добавить в отношение группы название соответствующим тегом. Если бы остановки назывались по-разному, названия бы либо не было, либо мы его придумали.

Пример

Маршрутов общественного транспорта в России нарисовано пока немного, а правильно нарисованных — и того меньше. Вот, например, работа Max Vasilev: relation 1276878. В этом отношении не проставлены роли для линий, но они и не обязательны.

Новое предложение

В конце ноября User:Teddych выдвинул предложение с целью утвердить схему Oxomoa для всех, в том числе для рендереров. Голосование по нему начато 31 марта. Это предложение подытоживает эту схему, в чём-то упрощает, в чём-то улучшает. Поскольку предложение почти наверняка будет принято, перескажу его с комментариями «как рисуют сейчас».

Остановка

Собственно, это вышеупомянутая «точечная инфраструктура».

Точка остановки

На этой точке останавливается транспорт. точка ставится непосредственно на линию дороги или ж/д путей. Сейчас роль такой точки остановки играют теги highway=tram_stop и highway=halt. Предлагается использовать общий тег public_transport=stop_position вместе со следующими дополнительными тегами:

Key Value Comment
public_transport stop_position Обозначает, что в этой точке останавливается общественный транспорт (обязательно)
train / subway / monorail / tram / bus /
trolleybus / aerialway / ferry
yes / no Для каждого вида ОТ, останавливающегося в этой точке, ставится тег
name Название Название, под которым известная остановка (рекомендуется)
ref Код Номер или иной код остановки
uic_ref число официальный ID в соответствии с International Union of Railways
uic_name текст официальное название в соответствии с International Union of Railways
operator текст владелец остановки
network сеть Название транспортной сети, обслуживающей остановку

Место посадки

Также известное как платформа. Обозначает место, где пассажиры ждут транспорта. Может обозначаться как угодно: точка линия полигон. Примеры из реального мира: автобусную остановку часто обозначают точкой highway=bus_stop возле дороги; железнодорожную платформу — railway=platform на линии или области (в последнем случае всегда нужно ставить area=yes). Всё это в схеме Oxomoa обозначается как public_transport=platform. Даже если платформы как таковой на местности нет, желательно ставить хотя бы точку. К ней навигатор будет вести потенциального пассажира.

Дополнительные теги на платформе могут быть такие:

Key Value Comment
public_transport platform Определяет, что здесь пассажиры ждут общественный транспорт (обязательно)
area yes / no Если платформа задаётся многоугольников, нужно поставить этот тег
name Название Название, под которым известная остановка (рекомендуется)
ref Код Номер или иной код остановки
operator текст владелец остановки
shelter yes / no Если есть крыша, не отмеченная отдельно amenity=shelter.
bench yes / no Если есть скамейка, не отмеченная отдельно amenity=bench.

Область остановки

Это знакомое тем, кто прочитал схему, отношение отношение public_transport=stop_area. Цитируя, «В отношение включаются все точки и места остановки, а также, возможно, здания, паромные терминалы и тому подобное». Улучшение схемы здесь заключается в том, что отношениям, связанным с ОТ, необходимо задавать тип type=public_transport. Скамейку amenity=bench и павильон amenity=shelter тоже нужно включить в это отношение, если они не указаны через теги платформы.

Станция

Это остановка повышенной важности. На ней часто оборачиваются автобусы или поезда, и из-за своей важности станция на местности представлена зданием полигон. На эту область или здание вешается тег public_transport=station. Станция добавляется в отношение stop_area, как платформа. Сейчас похожим образом используется тег railway=station: он часто ставится на железнодорожную платформу или на вокзал.

Теги все те же, что и для public_transport=platform, только вместо area=yes/no можно ставить building=*. Ну и uic_ref / uic_name, если есть.

Маршрут

Во многом этот раздел пересказывает главу «Сеть маршрутов» — в чём-то улучшая, в чём-то упрощая.

Направление

Каждое направление маршрута рисуется отдельным отношением отношение. Если у маршрута есть несколько вариантов (например, по выходным трасса меняется) — для каждого создаётся новое отношение.

В отношение маршрута записываются по порядку все остановки, по две позиции на каждую: stop_position с ролью stop, затем platform с ролью platform. После этого в отношение добавляются все линии, по которым проходит маршрут: по порядку от начала маршрута до конца. В предложении они добавляются с пустой ролью, обозначения forward/backward отменяются.

Список тегов на одно направление маршрута содержит самый минимум:

Key Value Comment
type route Отношение является маршрутом (обязательно)
route train / subway / monorail / tram / bus / trolleybus / aerialway / ferry Обозначает тип маршрута (обязательно)
from Initial stop Первая остановка в направлении маршрута
to Terminal stop Конечная остановка в этом направлении

Номер маршрута

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

Теги на это объединяющее отношение ставятся те же, что на направление, плюс номер маршрута ref и прочее. Список тот же, что выше, в разделе «Сеть маршрутов». Разве что from и to не применимы.

Пример

В качестве примера использования предложенной схемы Hind сделал маршрут по описанным правилам: relation 407276.

Плагин для JOSM

Плагин Public Transport упрощает создание маршрутов общественного транспорта в соответствии со схемой Oxomoa. Полное и очень подробное описание его работы можно найти на странице плагина, здесь же переведены общие принципы рисования маршрутов. Сразу отметим, что плагин крайне нестабилен, поэтому периодически сохраняйте результаты работы.

Устанавливается плагин так же, как все остальные: в окне настроек выберите кнопку с розеткой, там найдите «public_transport», поставьте рядом с ним галочку, «OK» и перезапустите JOSM.

Рисование автобусной линии с нуля

Схема требует одного отношения на каждое направление, которое содержит маршрут (itinerary) и остановки (stops) на нём. Основная работа будет в рисовании одного направления маршрута, обратное направление и остановки большей частью обнаружит плагин.

Скачайте область, где пролегает маршрут, и откройте окно «Общественный транспорт» -> «Шаблоны маршрутов» («Public Transport» -> «Route patterns»). В нём перечислены все существующие в загруженных данных маршруты. Нажмите кнопку «New» для создания нового маршрута, перейдите во вкладку «Tags» и заполните, как минимум, поля route (вид общественного транспорта), ref (номер маршрута) и to (точка назначения маршрута, отражаемая на транспортных средствах).

Выберите закладку «Itinerary». Тыкните в первый отрезок маршрута и нажмите «Add». Затем во второй, и тоже «Add». Можно добавлять сразу несколько отрезков одновременно. Если отрезки добавились в неправильном порядке, или не с теми ролями, выделите их в окне и нажмите «Sort». Если в списке есть строки [gap], то в тех местах не хватает соединительных линий. Тут поможет либо сортировка, либо добавление пропущенных отрезков. Иногда потребуется разбить существующие линии на части.

Для ускорения работы внизу окна есть полезные кнопки:

  • «Mark» выбирает на карте линии, отмеченные в окне маршрута;
  • «Show» перемещает карту к отмеченным линиям;
  • «Find» ищет в списке отрезков маршрута выбранную на карте линию.

Те же самые кнопки есть во вкладке со списком остановок.

Для удаления выбранных в списке отрезков из маршрута есть кнопка «Delete». Чтобы переместить несколько отрезков, выберите их и отметьте на карте кнопкой «Mark», затем удалите из списка («Delete»), отметьте в списке отрезок, перед которым нужно вставить выбранные линии и нажмите «Add».

После завершения маршрута добавить остановки просто: во вкладке «Meta» нажмите кнопку «Suggest Stops». Плагин найдёт все остановки близ маршрута и добавит их в список. Вы можете настроить дальность поиска (distance) и с какой стороны искать остановки: справа (right), слева (left) или с обоих сторон (both). По окончании откройте вкладку «Stops» и проверьте правильность остановок, тыкая в «Mark» и/или «Show». Лишние остановки удаляются кнопкой «Delete». Для добавления отмеченной на карте остановки выберите в списке ту, перед которой нужно добавить новую (или снимите отметку со всех, если нужно добавить остановку в конец) и нажмите «Add».

Закончив с одним направлением, вернитесь во вкладку «Overview» и проверьте, что выбран только что созданный маршрут. Нажмите «Duplicate» (создастся копия маршрута) и затем «Reflect» (выбранный маршрут поменяет направление). Проверьте путь во вкладке «Itinerary»: скорее всего, потребуется поправить односторонние участки. Потом во вкладке «Meta» снова найдите остановки кнопкой «Suggest Stops» и проверьте их.

Всё, маршрут готов. Не забудьте сохранить результат.

Копирование части другой линии

У плагина есть встроенный буфер обмена для хранения порядка и ролей объектов. При нажатии на кнопку «Mark» выбранные во вкладке «Itinerary» или «Stops» объекты отмечаются на карте, а их свойста сохраняются в плагине. Далее их можно вставить кнопкой «Add».

Так что копировать отрезки или остановки между маршрутами просто. Выберите во вкладке «Overview» исходный маршрут, затем отметьте во вкладках «Itinerary» или «Stops» отрезки или остановки для копирования и нажмите «Mark». Далее через вкладку «Overview» откройте создаваемый маршрут и в соответствующей вкладке выберите отрезок или остановку, перед которыми нужно вставить скопированное (или снимите отметку, если нужно вставить в конец списка), и нажмите «Add».

Если снять отметку со списка никак не получается, попробуйте нажать кнопку «Find».

Апгрейд линии в старом формате

Старый формат — это одно отношение на все направления маршрута, часто с беспорядочным и несвязным набором линий и всеми окрестными остановками с необычными ролями. Такое отношение несложно привести в порядок.

Выберите этот маршрут во вкладке «Overview», нажмите «Duplicate» и «Reflect». Получили два отношения для направлений туда и обратно. Во вкладке «Tags» заполните поля «to» и, может быть, «from», чтобы различать направления.

Затем, отметив первое отношение, откройте вкладку «Itinerary» и почистите маршрут, оставив там только одно направление. Остановки из вкладки «Stops», пожалуй, можно удалить подчистую, пересоздав затем этот список из вкладки «Meta» и проверив, как для нового маршрута.

После чего те же действия произвести над копией маршрута. Иногда будет проще сначала почистить маршрут, а затем уже делать копию и разворачивать: смотрите по обстоятельствам. Так или иначе, поправили маршрут — молодец.

Проблема со stop_position

Автоопределение остановок работает ненадёжно, когда остановка является точкой в линии дороги. Потому что нельзя однозначно определить, для какого направления нарисована остановка. Однако для автобусных (и троллейбусных, понятно) остановок традиционно принято ставить точки highway=bus_stop в стороне от дороги, и сам плагин, в общем-то, предназначен именно для таких видов общественного транспорта.

Почему бы не сделать всё это в самом JOSM?

Нипочему. Со времени выхода плагина окно редактирования отношения в JOSM сильно улучшилось, и все дырки в маршруте видно и там. Равно как и есть функция сортировки. Использовать плагин (сильно нестабильный и глючный, конечно) проще в том, что там всё по полочкам и перед глазами. И легко разворачивать маршруты. Тем не менее, если не бояться интерфейса JOSM, лишний плагин можно не ставить. Или ставить его только ради кнопок Reflect и Suggest Stops. Другими словами, создавать маршруты с нуля удобнее в плагине, а править существующие можно и в самом JOSM.

Также смотрите