Подготовка базы для ж/д роутинга

“Пучок” - это несколько несоединённых физически путей. Даже если они идут параллельно, на одном из них может физически не быть остановки на соседней станции, а они могут и вообще расходиться в противоположные стороны. И односторонние пути очень даже присутствуют.

Ну вот самый отстойный вариант:

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

К чему этот глупый спор? Не будет роутинга, точка.

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

Не зависит, ибо речь идёт о исправлении ошибок в данных, а не о костыляции.

К слову, хочу обратить внимание что в relation:route включаются именно станиции, а не stop_position. Так, убирать из маршрутов станции, добавляя stop_position - это ошибка. Чтобы с этим не было путаницы - ещё один из аргументов для разделения станций и stop_position.

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

Смысл моего начинания - найти ошибки, а не получить абы как работающий роутинг.

Доделал валидатор: http://amdmi3.ru/files/rail_routing/

Для каждой пары станций вычисляется путь в обе стороны, и перегон считается корректным, если:

  • обе станции нашлись в базе (а это, напомню, точки на путях, либо с тэгами railway=station|halt + name=, либо public_transport=stop_position + train=yes + name=).
  • между ними нашелся путь в обе стороны
  • разница в длине пути в разные стороны не превышает 500м (запас на ж/д развязки типа такой: http://osm.org/go/04qFAfET– , случаи когда платформы разных направлений смещены друг относительно друга, платформы разной длины и т.д.)
  • путь не превышает 150km (вылавливает явно неправильные обходные маршруты и маршруты до станций с таким же названием но в другой части страны)

Кроме пар соседних станций, в проверке участвуют пары их конечные станции линий из ЕСР - они выделены жирным и ограничений на расстояние между ними не накладывается.

Известные косяки:

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

Замечание по исправлению: не поломайте маршруты, отцепляя станции от путей. Я не нашёл как в JOSM отцепить точку от линии, не создавая новой точки. Если например, сделать UnGlue ways на станцию которая есть в relation=route, будет создана новая точка, на неё перенесены тэги со старой (а с последней удалены), в отношении останутся обе точки, причём старая точка с ролью stop, а новая - с пустой role, и в конце списка членов (т.е. вдобавок можно потерять порядок станций). Пока не придумал ничего лучше чем вырезать из линии небольшой кусок, содержащий станцию, удалить его, а линию склеить обратно. Так станция останется и отношение не будет покорёжено.

Отличные новости!
Реквестирую ЖосмоСсылки :slight_smile:

Как часто валидатор будет запускаться?

Правильно ли я понял - две stop_position - два name? Отношение остановка общественного транспорта для поиска имени не проверяется ?

Как всегда, раз в сутки.

Да.

Нет.

Сделал. Также сделал возможность посмотреть построенные маршруты.

Вот пример негодного маршрута, видимо из-за лишних oneway или отсутствующих перемычек:
http://amdmi3.ru/files/rail_routing/route_6200.html

Вот разорванные пути:
http://amdmi3.ru/files/rail_routing/route_2736.html
http://amdmi3.ru/files/rail_routing/route_10970.html

Вот что происходит в отсутствие stop_position на всех путях:
http://amdmi3.ru/files/rail_routing/route_5263.html

http://www.openstreetmap.org/browse/node/975728293
Это огородная которая не находится вот тут http://amdmi3.ru/files/rail_routing/RU-SVE.html вроде halt как устаревший явным образом не помечен хотя и советуют public_transport использовать. Меняем?

И может halt тоже обрабатывать в таком случа но помечать их ворнингом?

halt обрабатываются также как и station, эта Огородная просто не привязана к пути.

Понял, не внимательно посмотрел.

Еще было бы неплохо подложку мапника сделать немного по-прозрачней, а то маршрут теряется из виду.
Такой еще вопрос. С утра я поправил точку http://www.openstreetmap.org/browse/node/1864767264 вижу, что обновление роутера прошло сейчас вечером, но то ли я плохо поправил, то ли правки не дошли :frowning:

Ну вот, уже пошло рисование “под валидатор”:
есть здание станции с тегами railway=station, на путях стоят public_transport=stop_position, так нет, ставят ещё точку на путях с тегом railway=station, к тому же не в месте платформы… :frowning:

Сделал маршрут шире и ярче.

Дамп не обновлялся (дополнительно к обычному обновлению утром), так что да, пока не дошли.