RU:Общественный транспорт по схеме Oxomoa
Эта страница устарела с принятием пропозала. Читайте новую. |
Как только в русскоязычном осм заходит разговор об общественном транспорте, начинается хаос. В итоге, схемы транспорта в разных городах построены по разным схемам, и инструменты для одного региона могут быть неприменимы к другим. Хочется, однако, единого стандарта, и, поскольку только 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 |
Остановка, которая используется только при движении в одном направлении (относительно отрезка, а не точки назначения). Используется, когда маршрут по линии проходит сразу в двух направлениях. Ввиду неоднозначности этой роли использовать её нежелательно. Впрочем, соблюдение правила «одно направление — одно отношение» устраняет проблему. |
«А теперь мы попытаемся со всем этим взлететь...»
Если у вас к этому моменту не лопнула голова, вы недостаточно внимательно прочитали схему. Если лопнула, то две трети получившегося месива занимают отношения. Их, кажется, слишком много. Совершенно непрактичная схема. И как только по ней рисуют?
Простой маршрут
Возьмём обычный маршрут и представим его в виде линии:
У маршрута есть первая остановка, конечная остановка и улицы, по которым он едет. На местности остановки обозначены точками highway=bus_stop (да, это автобусный маршрут). Если не обозначены — обозначьте. «Но как же теги public_transport=platform?» — спросите вы. Честно говоря, ими пока мало кто пользуется. Например, они не отображаются на рендерах. Но если предложение (см. следующий раздел) пройдёт, можно будет без проблем ставить platform — ну или stop_position, если вы предпочитаете ставить точки на линии дороги.
Итак, остановки отмечены, дороги есть. Это уже две трети дела, и всё ещё ни одного отношения! Создаём первое с тегами type=route, route=bus, ref=14, from=Тверская, to=Ямская. Теперь добавляем в него по порядку все линии дорог по маршруту, от первой до последней. Те, что повёрнуты по пути следования, с ролью forward, встречные — с ролью backward. Проверьте, чтобы не было дырок: современные редакторы умеют показывать связность.
После линий добавьте остановки: каждую точку по порядку, от первой до последней. Каждую с ролью stop. Убедитесь дважды, что в отношение они попали по порядку. После этого одно направление маршрута считаем готовым.
Хотя на картинке линия одна, на самом деле их две. Вот так:
Как видите, у них разный набор остановок и в одном месте, где улицы односторонние, они идут по-разному. Мы только что сделали отношение для одной линии, теперь будем делать для другой. Теги у нового отношения будут те же, только from и to меняются местами. И точно так же добавляем сначала линии, затем остановки, но уже для обратного направления. Заметьте, что остановки даже с одинаковыми названиями для разных направлений разные: они расположены с разных сторон дороги.
Пошаговую и очень подробную инструкцию с картинками написал Stud555, новичкам будет крайне полезно посмотреть на процесс.
Супермаршрут
У нас получилось два отношения на один маршрут. Если, например, по выходным автобус делает лишний крюк на кладбище (старушек подбросить), то это уже будет четыре отношения. Как это всё упорядочить? Просто: сделайте ещё одно отношение type=route с прочими тегами (кроме from и to) и добавьте туда два или четыре отношения на каждое направление с одним номером.
На это «суперотношение» теперь можно ссылаться, его можно скармливать какому-нибудь обработчику. При этом без него отношения направлений не теряют смысла, потому что номер и тип маршрута продублированы в них. Необходимость дублирования неясна, но пока что некоторые инструменты не понимают вложенных маршрутов.
Кольцевой маршрут
А если автобус едет-едет, затем объезжает квартал по периметру и, не останавливаясь, едет обратно до конечной, которая совпадает с начальной? Или просто объезжает район по кольцу и возвращается в исходную точку? Зачем же резать маршрут на два, это нелогично!
Да, это нелогично. Чтобы определить, когда маршрут нужно резать, а когда нет, нужно понять, что такое «направление». Не будем изобретать словесный велосипед, а процитируем форум:
- Отношение маршрута строится для роутинга. Используется свойство отношения, что все его члены упорядочены. Например, остановки:
- 1. первая остановка; к ней автобус, выезжая из отстойника, подъезжает пустым и проворный пассажир может занять сидячее место даже в час пик;
- 2. вторая остановка, до неё автобус собрал пассажиров с первой;
- ......
- N-1. предпоследняя остановка. На ней в автобусе, кроме кондуктора, не выходят только те пассажиры, кому нужно на конечную;
- N. конечная остановка: пассажиры выходят, кто не собирается, тех выгоняет кондуктор.
- После конечной автобус идёт в парк или в отстойник, без пассажиров. Любой потенциальный пассажир, сев на остановке [1..N-1], может быть уверен, что доедет до конечной. Иногда человек, сев на N, может доехать до 1 и т.д., но это не обычная ситуация, и с вероятностью от 30% его прогонят, потому что автобус идёт в парк или в отстойник.
- Отрезки маршрута собираются в отношение от первой к конечной остановке по порядку следования, роли forward и backward определяют направление движения относительно направления отрезка.
- Чаще всего первых и конечных остановок на маршруте две: в начале и в конце. Но бывают т.н. кольцевые маршруты, которые оборачиваются в середине, или вообще делают полноценное кольцо. Вот так:
- Здесь N=17. Бездумное применение схемы Oxomoa может кого-то заставить разбить маршрут на два отношения с конечной где-то между 7 и 11 остановками, но это явная ошибка, потому что пассажир может, например, сесть на 6-й остановке и доехать до 16-й. И никто ему слова не скажет, потому что таков маршрут. И роутинг должен об этом знать, разумеется, чтобы оптимизировать затраты времени.
- Поэтому приведённый маршрут делается одним отношением с 17 остановками и всеми отрезками по пути следования, сначала в одну сторону, затем в другую. Это не костыль, это логическое отражение реального маршрута.
- Разбивается маршрут только если он на деле — два маршрута, и пассажир не может, сев на одной половине, сделать полукруг и выйти на той же остановке с другой стороны улицы.
Мозголомное «один маршрут» — «два маршрута» легче осмысливается, если использовать термин «направление».
Что если маршрут совсем кольцевой, как кольцевая линия московского метро? В схеме Oxomoa ответа нет, но это можно обозначить тегом cycle=yes на отношении маршрута. Точка разрыва (между первой и конечной остановками) выбирается там, где автобус съезжает с маршрута в парк (он же должен, рано или поздно).
Пересадка
Как видно, у обоих вышеразобранных маршрутов есть общая остановка. На самом деле, это четыре разные остановки (по одной в каждом направлении каждого маршрута), по странному решению администрации названные одинаково. Ну не важно. Суть в том, что на этой остановке можно пересесть с одного маршрута на другой. Как это обозначить в схеме?
Элементарно: создаёте отношение с тегами type=public_transport, public_transport=stop_area_group и добавляете туда все четыре точки остановок. Ну и можно добавить в отношение группы название соответствующим тегом. Если бы остановки назывались по-разному, названия бы либо не было, либо мы его придумали.
Пример
Маршрутов общественного транспорта в России нарисовано пока немного, а правильно нарисованных — и того меньше. Вот, например, работа Max Vasilev: 1276878 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 сделал маршрут по описанным правилам: 407276 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.
Также смотрите
- RU:Public Transport
- User:Stud про создание автобусного маршрута в JOSM (пример создания кольцевого маршрута)
- Маршруты общественного транспорта на форуме
- Рендеринг маршрутов общественного транспорта на форуме
- Карта со слоем маршрутов на latlon.org (плохо относится к принципу отношения на направление)
- ÖPNV-Karte для России (только европейская часть)
- Инструменты для маршрутов ОТ