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

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

Доделал валидатор: 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:

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

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

А зачем там этот тэг? Может там достаточно buliding=train_station?

Судя по wiki комбинации railway=station+building=yes и building=train_station должны быть идентичны, второй вариант кажется предпочтительным, так как сразу показывает предназначение здания, без необходимости анализа дополнительных тегов. Однако складывается впечатление, что многие программы в обязательном порядке ждут объект с тегом railway=station/halt :frowning:

С чего вы взяли? Здание это здание, станция это станция, они никак не связаны.
Точку railway=station ставить в здание можно, но ставить тэг railway=station на здание не стоит, потому что таким образом площадь станции ограничивается площадью здания, что неверно.

Возможно неправильно интерпретировал:
RU:Railway stations

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

А глюк с тем, что надпись Start station not found + End station not found пишутся в любом случае, даже если одна из станций в след строке находиться поправишь ?

Эта фраза была неправильно переведена в русской версии, исправил. Там должно быть не “желательно”, а “можно”, а по мне - так крайне нежелательно.

Если станция помещается в одном здании. Вся станция. Это относится к например, такой станции монорельса: http://www.openstreetmap.ru/#zoom=18&lat=55.821796&lon=37.627063&marker=1 но не к ж/д станциям.

Где здесь глюк? Если одна из станций не найдена, маршрута нет.

Исправил “испорченные” мной станции…

Глюк в том, что в таблице начальная (или конечная) станция маршрута найдена строкой выше (или ниже), хотя маршрут при этом действительно не найден.
Пример: станция Тосно в Ленинградской области, маршрут Тосно 2-Тосно найден, однако на маршруте Тосно-Ушаки, выдаётся диагностика: End station not found/Start station not found, хотя ст. Тосно присутствует…