zverik
блин.
Для особо невнимательных повторяю: в кольце НЕМНОЖКО остановок. Для юзеров бОльшей части маршрута он обычный и ни фига не кольцевой. С одного конца у него ярко выраженная конечная. Получается, что мы делаем из костыльной системы костыльное исключение из-за малозначительного кусочка.
Я внимательный, и твой пример укладывается в уже разобранные. Давай я объясню по пунктам.
Отношение маршрута строится для роутинга. Используется свойство отношения, что все его члены упорядочены. Например, остановки:
- первая остановка; к ней автобус, выезжая из отстойника, подъезжает пустым и проворный пассажир может занять сидячее место даже в час пик;
- вторая остановка, до неё автобус собрал пассажиров с первой;
…
N-1. предпоследняя остановка. На ней в автобусе, кроме кондуктора, не выходят только те пассажиры, кому нужно на конечную;
N. конечная остановка: пассажиры выходят, кто не собирается, тех выгоняет кондуктор.
После конечной автобус идёт в парк или в отстойник, без пассажиров. Любой потенциальный пассажир, сев на остановке [1…N-1], может быть уверен, что доедет до конечной. Иногда человек, сев на N, может доехать до 1 и т.д., но это не обычная ситуация, и с вероятностью от 30% его прогонят, потому что автобус идёт в парк или в отстойник.
Отрезки маршрута собираются в отношение от первой к конечной остановке по порядку следования, роли forward и backward определяют направление движения относительно направления отрезка.
Чаще всего первых и конечных остановок на маршруте две: в начале и в конце. Но бывают т.н. кольцевые маршруты, которые оборачиваются в середине, или вообще делают полноценное кольцо. Вот так:
Здесь N=17. Бездумное применение схемы Oxomoa может кого-то заставить разбить маршрут на два отношения с конечной где-то между 7 и 11 остановками, но это явная ошибка, потому что пассажир может, например, сесть на 6-й остановке и доехать до 16-й. И никто ему слова не скажет, потому что таков маршрут. И роутинг должен об этом знать, разумеется, чтобы оптимизировать затраты времени.
Поэтому приведённый маршрут делается одним отношением с 17 остановками и всеми отрезками по пути следования, сначала в одну сторону, затем в другую. Это не костыль, это логическое отражение реального маршрута.
Разбивается маршрут только если он на деле — два маршрута, и пассажир не может, сев на одной половине, сделать полукруг и выйти на той же остановке с другой стороны улицы.
И нарекая эту систему костыльной, хоть укажи, в чём костыли. В системе «forward:stop»-«backward:stop» они видны сразу (эти самые префиксы).
Не бывает “на деле” двух маршрутов. Есть один маршрут, и не нужно его делить. Если есть потребность подчеркнуть, что в некоторой точке маршрута никого в автобусе не должно остаться - это не повод в этой точке его разорвать. Далее, маршрут с одним концом и маршрут по-настоящему кольцевой в любом случае тоже надо научиться различать. Кроме того, кольцевой маршрут может идти как в одну сторону, так и в обе.
В любом случае, у тебя получится два маршрута и один маршрут в ситуациях, которые в окрестности подавляющего большинства точек ничем не отличаются. Это бессмысленно и для роутинга, и для естественного восприятия маршрута.
Я ничего не понял. Нарисуй.
Еще хотелось бы узнать мнение коллег о том, кто как обозначает остановки. Кто рисует их на дороге, а кто рисует их сбоку и почему…
По традиции highway=bus_stop рисуется в месте физической остановки, т.е. в стороне от дороги. Нередко встречаю эту точку в составе тротуара highway=footway, да иногда и сам так рисую: для роутинга полезно. Положение на дороге тоже допустимо, но в процентном отношении, как кто-то считал, на дороге ставят дай бог 10% точек. Учитывая дополнительные теги (shelter, lit), считаю, что нужно ставить в месте, где остановка находится физически (павильон или знак автобусной остановки). Да и плагинам по автоматическому поиску остановок для маршрута проще.
Автобус 145 http://bus.ruz.net/routes/145 ходит только по кольцу и только в одну сторону. Конечной у него нет, но с м. Беляево автобус может уехать в парк.
Троллейбус Б раньше ходил в обе стороны но каждое направление по кольцу, сейчас внутренний переименовали в Бк http://trolley.ruz.net/routes/1000 http://trolley.ruz.net/routes/1100 . На обоих нет конечной станции, кроме тех случаев, когда троллейбус идёт в парк.
Троллейбус 34 http://trolley.ruz.net/routes/1034 имеет обычные конечные, однако у него диспетчерский пункт и конечная выхода с маршрута находится на ул. Кравченко. Когда троллейбус приезжает туда и встаёт в общую очередь, большинство пассажиров нередко переходят в первый из стоящих в очереди троллейбусов.
Описанные в базе OSM маршруты предназначены не только для обозначения топологической связности проезда по ним. Не надо рендерить под навигатор, существуют и другие применения. Например, чтобы писать списки остановок типа тех, что написаны на ruz.net, нужны совсем другие требования к предоставляемым данным.
Кроме того, при обозначении топологии маршрута мы также уткнёмся в неоднозначность при обозначении полностью кольцевых маршрутов и маршрутов с одним роутинговым концом. Их просто нельзя различить.
Кроме того, рассматривая два разных отношения одного маршрута, мы, полагаясь на ref, будем постоянно натыкаться на маршруты с одинаковыми номерами. Помимо маршрутов в Москве, есть куча похожих маршрутов в других городах, в Мособласти и тд и тп. Например, в Москве есть маршрут 41, а у Мострансавто в области таких маршрутов аж 24, причём два из них одинаковы, но один из этой пары является коммерческим маршрутом того же самого перевозчика.
Сейчас в ОСМ России порядка 861 маршрутов. Из них только 71 пригоден для роутинга без какой-то либо предварительной подготовки.
Примеры можно посмотреть тут, в том числе и на карте: http://stud555.sbin.ru/busobl.php
Процент не большой. Плз. поподробнее о пригодности. Для роутинга будут использоваться только одностронние маршруты? Я за один номер - одно отношние. А можно включить в табличку и маршруты не прошедшие проверку и различать их по цвету?
Это довольно гнилая идея. В Томске, например, есть два маршрута #5, которые действуют в разных концах города и никак не пересекаются.
Интересно. И оператор один? Наверное, чтобы никто не догадался…
Я за один номер - одно отношние.
Чего только люди не придумают, лишь бы не придерживаться политики “один маршрут - одно отношение”. :3
Интересно. И оператор один? Наверное, чтобы никто не догадался…
AFAIK, там понятие оператора ничего не значит. Мэрия утверждает список маршрутов, а возят частные перевозчики. У каждого второго автобуса свой “оператор”. Дубликат, скорее всего, получился из-за того, что один из маршрутов сезонный дачный, а второй —городской. Просто кто-то обсчитался, но у нас-то truth on the ground.
Чего только люди не придумают, лишь бы не придерживаться политики “один маршрут - одно отношение”. :3
Вопрос, что считать маршрутом. ИМХО: маршрут — путь, который можно проделать в автобусе не вылезая из него.
ИМХО, большинство считает маршрутом: туда-обратно, поэтому и процент такой маленький. Насколько я увидел, только в Псковской и Кировской области направления разделены. Но можно и переделать. Валидатор должен помочь развитию этой схемы. Еще с тегами правильными определиться.
Вопрос, что считать маршрутом. ИМХО: маршрут — путь, который можно проделать в автобусе не вылезая из него.
А вот во всех маршрутках и автобусах, в которых я ездил, висит бумажка “Утвержденный машрут” и его (а не “их”) схема.
Через валидатор проходят маршруты в которых от первой точки первого вея нет разрывов до последней точки последнего вея.
Направление вея (или forward/backward) не учитывается. Веи без роли (т.е. туда и сюда) не дублируются.
Прежде всего, для читателей, хочу отметить, что мы обсуждаем граничные случаи применения схемы Oxomoa. Чтобы не получалось, как в анекдоте (а то уже опасно близко к тому).
Не бывает “на деле” двух маршрутов. Есть один маршрут, и не нужно его делить. Если есть потребность подчеркнуть, что в некоторой точке маршрута никого в автобусе не должно остаться - это не повод в этой точке его разорвать.
Здесь имеется в виду, что человек не может не выйти на остановке, что делает её конечной, что заметит программа роутинга и не будет требовать от пассажира проехать за конечную. Это и есть повод разорвать маршрут, потому что он там кончается. Роутинг для кондукторов и водителей можно продлить с помощью отрезков в сторону парка, или стоянки, или разворотного кольца.
Далее, маршрут с одним концом и маршрут по-настоящему кольцевой в любом случае тоже надо научиться различать. Кроме того, кольцевой маршрут может идти как в одну сторону, так и в обе.
Кольцевой маршрут в любом случае должен иметь точку начала (совпадающую с точкой конца), потому что список отрезков и остановок упорядочен и в нём есть первый и последний пункты. Разумеется, отрезки маршрута могут формировать собой кольцо, а список остановок содержать все остановки кольца без исключений. По-настоящему кольцевой маршрут можно как-нибудь отмечать в тегах, например, cycle=yes. Двай кольцевых маршрута по одним улицам в разные стороны ничем не отличаются от двух линейных маршрутов по одним улицам в разные стороны (разве что у первых начало и конец в одной точке, а у вторых — в разных), и рисуются двумя отношениями.
В любом случае, у тебя получится два маршрута и один маршрут в ситуациях, которые в окрестности подавляющего большинства точек ничем не отличаются. Это бессмысленно и для роутинга, и для естественного восприятия маршрута.
Разумеется, если бы они не отличались, не было бы необходимости в такой схеме. Но все остановки у разных направлений маршрута разные. По разные стороны перекрёстков, порой с разными названиями и свойствами. Иногда даже количество остановок разное (пример есть недалеко от моего дома). Это легко заметить по «ленивыми» forward/backward-отношениям: все вместе остановки образуют мешанину, поэтому без явного указания роли forward:stop или backward:stop отношение маршрута не имеет смысла. В схеме Oxomoa маршруты линейны, и там достаточно роли stop, да и даже совсем без ролей грамотный парсер сможет допустить, что точки — это остановки, в отличие от веев. Схема с «backward/forward» такой вольности себе позволить не может.
Автобус 145 http://bus.ruz.net/routes/145 ходит только по кольцу и только в одну сторону. Конечной у него нет, но с м. Беляево автобус может уехать в парк.
Это очевидно, рисуем как написано в маршрутнике, все остановки и весь маршрут в одно отношение по порядку следования. Конечную считаем у м. Беляево, но добавить пресловутый тег, что в целом маршрут кольцевой. Почему там ставим конечную? Потому что нет уверенности в том, что пассажир сможет проехать эту остановку.
Троллейбус Б раньше ходил в обе стороны но каждое направление по кольцу, сейчас внутренний переименовали в Бк http://trolley.ruz.net/routes/1000 http://trolley.ruz.net/routes/1100 . На обоих нет конечной станции, кроме тех случаев, когда троллейбус идёт в парк.
Два отношения, даже с разными ref. Добавить тег кольцевого маршрута, физически конечную поставить там, откуда троллейбусы уходят в парк.
Троллейбус 34 http://trolley.ruz.net/routes/1034 имеет обычные конечные, однако у него диспетчерский пункт и конечная выхода с маршрута находится на ул. Кравченко. Когда троллейбус приезжает туда и встаёт в общую очередь, большинство пассажиров нередко переходят в первый из стоящих в очереди троллейбусов.
Полукольцевой маршрут с конечной на улице Кравченко, понятно. Я не очень понял этот маршрут, но какой бы они ни была, нарисовать её будет просто, упорядочив остановки и поняв, что где происходит.
Описанные в базе OSM маршруты предназначены не только для обозначения топологической связности проезда по ним. Не надо рендерить под навигатор, существуют и другие применения. Например, чтобы писать списки остановок типа тех, что написаны на ruz.net, нужны совсем другие требования к предоставляемым данным.
Ты точно против схемы Oxomoa и за беспорядочную схему с двумя направлениями на отношение и остановками «forward:stop» и «backward:stop»? Потому что ты это написал не про Oxomoa. Последняя именно предназначена для роутинга, и пресловутые списки остановок получаются из неё элементарно. Я бы посоветовал перечитать страницу в вики ещё раз.
Кроме того, при обозначении топологии маршрута мы также уткнёмся в неоднозначность при обозначении полностью кольцевых маршрутов и маршрутов с одним роутинговым концом. Их просто нельзя различить.
Если ввести тег, означающий, что маршрут полностью кольцевой (как cycle=yes, предложенный выше), то их можно будет различить. И это не относится к вопросу «сколько отношений на маршрут», потому что кольцевые маршруты любой степени полноты в любой схеме отмечаются одним отношением, вопрос только в упорядоченности и избыточности (последней нет у схемы Oxomoa, но есть у популярной здесь).
Кроме того, рассматривая два разных отношения одного маршрута, мы, полагаясь на ref, будем постоянно натыкаться на маршруты с одинаковыми номерами. Помимо маршрутов в Москве, есть куча похожих маршрутов в других городах, в Мособласти и тд и тп. Например, в Москве есть маршрут 41, а у Мострансавто в области таких маршрутов аж 24, причём два из них одинаковы, но один из этой пары является коммерческим маршрутом того же самого перевозчика.
Конечно. Даже рассматривая два отношения двух маршрутов, как ты замечаешь, мы будем натыкаться на маршруты с одинаковыми номерами. Для этого предназначены теги to и from, значения которых написаны на маршрутных досках и по которым можно различить любую пару маршрутов, едут ли они по одним дорогам или по разным.
А вот во всех маршрутках и автобусах, в которых я ездил, висит бумажка “Утвержденный машрут” и его (а не “их”) схема.
Не знаю про другие города, но в Петербурге и Пскове утверждаются отдельно прямое и обратное направления. Схема в автобусе, разумеется, висит общая, потому что она не для роутинга, а просто так. Принцип одного отношения на оба направления маршрута запутывает роутинг, и подобные отношения годятся только на то, чтобы их рисовать на карте.
Процент не большой. Плз. поподробнее о пригодности. Для роутинга будут использоваться только одностронние маршруты? Я за один номер - одно отношние. А можно включить в табличку и маршруты не прошедшие проверку и различать их по цвету?
Вот тут все маршруты. http://stud555.sbin.ru/buserror.php Обращайте внимание на поле “Роутинг”. Если “1” - прошел проверку, если “0” - то нет.
Могу в принципе и покрасить строчки, если надо.
Надо просто разделять понятия “Маршрут” и “Трасса маршрута”. У кольцевых маршрутов обычно одна трасса. У стандартных - две (туда/обратно).
Поэтому логичнее использовать схему из нескольких relation: один для маршрута (с тегами ref/name/transport) и по одному relation на каждую трассу, который входит с соответствующей ролью в relation маршрута.