OpenStreetMap (OSM) — глобальный проект, образованный вокруг геоинформационной базы данных, наполняемой всеми желающими — как энтузиастами, так и заинтересованными компаниями. Любой может внести свой вклад, однако открытость имеет и оборотную сторону, которая приводит к тому, что в базу часто попадают некорректные правки. Поэтому в экосистеме OSM написано множество валидаторов, которые позволяют поддерживать качество данных на приемлемом уровне.
С 2016 года в open source существует препроцессор метро, который валидирует маршруты скоростного городского транспорта в OSM на предмет полноты и логических/топологических ошибок и преобразует их в форматы, пригодные для сервисов роутинга и рендеринга, в том числе в GTFS. Кроме данных OSM он принимает на вход список сетей общественного транспорта (ОТ), содержащий контрольную информацию о числе линий, станций и прочего в некоторой транспортной сети. Препроцессор успешно себя зарекомендовал в подготовке данных об ОТ для таких приложений, как Maps.me и Organic Maps.
В этой статье я хотел бы поделиться подходом к детектированию одного из видов ошибок, которые довольно часто случаются в данных OSM и автоматический отлов которых представляет собой некоторый вызов — это случайное выпадение станции из маршрута. Все исходные коды валидатора и описываемого алгоритма находятся в открытом доступе. Но сначала определимся с понятиями, используемыми для представления данных об ОТ в OpenStreetMap.