Устройство OSM (железные дороги)

Можно в OSM отмечать точки stop_position на остальных путях, либо автоматически находить их из пересечения перпендикуляра к пути в точки станции с остальными путями, это несложно.

В OSM, боюсь, таких данных нет. Касательно приведённого примера, кстати, у меня возникла идея что эти пути используются в разных направлениях. У нас есть возможность проставлять используемое направление для путей, но, опять таки, проставлено это далеко не везде, и без совместимого с OSM источника информации проставлено в ближайшее время не будет.

Я имел в виду погрешность на одном перегоне. Скажем, если нужная точка где-то на середине перегона, накопим всю погрешность за половину перегона.

Хотя это тоже не проблема - можно как минимум нормировать расстояние по известной длине перегона, либо считать честную длину дуги, которую можно построить по 3 рёбрам.

Вроде навскидку больше сложностей в голову не приходит. Главное - определение нужного пути.

На самом деле в некоторых местах сама ж/д нарисована с большей погрешностью, даже не учитывая угловатости. Но если будут данные по длинам, возможно такие случаи будет проще найти и исправить.

Иногда её вообще не на путях ставят.

Ну это точно надо исправлять, и это делается достаточно тривиально.

Это не ошибка, не надо её исправлять.
На путях можно ставить public_transport=stop_position.

топикстартеру, еще почитайте про linear referencing, многие гис умеют это из коробки и это именно для ваших задач

Точно, только s/можно/нужно/.

Offtopic:
AMDmi3, это перл?

Такой синтаксис регулярок применяется чуть менее чем везде. Как минимум perl, sed.

Все дороги имеют главный путь, и в моей системе все “инциденты” расположены по отношению по главному пути
К примеру существует Инцидент - произошел на перегоне на 10 км , вот этот 10 км будет относительно главного пути - главный путь включает в себя множество станций и перегонов

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

Еще вопрос, относящийся к движку карты
Например я масштабирую карту до самого детального уровня, мне строятся все объекты (nodes, ways), всем отрезкам я проставляю длину и задаю километры, когда я меняю масштаб все эти данные что я посчитал теряются , верно? т.е сам движок OSM пересчитывает и выдает новые объекты, теряя старые, т.е при каждой смене масштаба карты, мне придется все заного рассчитывать?
И есть ли возможность оффлайн использования данной карты, т.к доступа в интернет у пользователей точно не будет…=(

Всё зависит от того, есть ли у вас эти данные, и можете ли вы их предоставить на условиях, совместимых с лицензией и Contributor Terms OSM. Если да, то их можно добавить напрямую в OSM. Если нет, вам придётся у себя делать постобработку OSM данных чтобы сопоставить их со своими. Учитывая то, что OSM постоянно изменяется, это может потребовать постоянной ручной работы.

Объективных данных у меня, увы, нет, потому что не с чем сравнивать. В целом - OSM рисуют разные люди с разными представлениями о достаточной точности; в разных местах доступны космические снимки разного разрешения и не везде доступны GPS треки, необходимые для точной привязки снимков. Тем не менее, по моим прикидкам погрешность редко где составляет более +/- 20 метров от траектории полотна (“угловатые повороты”) и не более 20-40 метров глобального смещения. Думается, для ваших задач это приемлимо ( глобальное смещение, например, вообще не влияет на рассчёт расстояний). Иногда, конечно, попадаются косяки типа таких:

http://www.openstreetmap.ru/#lat=62.293084&lon=34.51552&zoom=16&layer=BY
http://www.openstreetmap.ru/#lat=62.37125&lon=34.47533&zoom=16&layer=BY
http://www.openstreetmap.ru/#lat=62.409327&lon=34.43814&zoom=16&layer=BY

но это единичные и быстро исправляемые случаи. Также несложно сделать валидатор, контролирующий плавность изгибов линии ж/д чтобы исправить все такие косяки, и уменьшить локальные погрешности вцелом.

О каком именно вы движке и что вы имеете в виду под проставлением длин и километров?

Есть. Все данные (или часть, например - только Россию) в любой момент можно скачать целиком и поднять локальный рендер, либо скачать/отрисовать растр на нужном уровне детализации (но не очень высоких, иначе объём будет очень большим).

Имею ввиду данные по карте:

к примеру на нижнем уровне у меня формируются отрезки, я рассчитаю данные для них - например проставлю каждому отрезку длину и мат. функц-ию формирующую данный отрезок, запишу в данные way(отрезков, соединяющих точки) дополнительные параметры: протяженность, функцию. Т.е один раз запущу скрипт, он просчитает по всем путям данные параметры, но если я сменю масштаб, там же будут уже другие объекты? Или я что-то не понимаю?
Т.е мне необходимо загрузить данные по жд путям с каждого масштаба, пересчитать их и отображать на любых масштабах различные массивы обработанных данных?

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

Данные одни, в базе OSM понятия масштаба нет. То, что вы видите на openstreetmap.org - это растровые изображения, отрисованные по этим данным. Да, там для каждого масштаба задано какие объекты как рисовать, но это всего лишь один из многих вариантов отображения данных.

PS. Я накатал за вечер простенький роутер по железным дорогам, так что если есть список длин перегонов, уже можно прикинуть погрешности и соорудить валидатор.

У РЖД может быть один главный аргумент против использования OSM как картосновы - она не сертифицирована и с точки зрения российского законодательства не является картой в формальном смысле. Вот если представить это как сервис геокодирования (то есть нахождения географических координат по названию места) и предоставить возможность подключения любой карты (через WMS/TMS) как растровой подложки - тогда никаких вопросов: OSM остается как preview, а как “настоящая карта по ГОСТ” может быть использовано что угодно, быстро и легко сконвертированное в TMS и подключенное.
К вопросу о linear referencing: http://postgis.refractions.net/documentation/manual-2.0/reference.html#Linear_Referencing

Сегодня пришлю длины перегонов!

Нижний Новгород Моск. 0,00
Дзержинск 34,00
Ильино 35,00
Вязники 58,00
Ковров-1 60,00
Владимир 64,00
Москва Курская 191,00
Тверь 169,00
Бологое-Московское 164,00
Окуловка 70,00
Малая Вишера 87,00
Санкт-Петербург 162,00

в км
Так пойдет?
меньшие отрезки сегодня достать не смогу, доступ до данных только завтра будет, ты скажи тебе любые перегоны подойдут или какие то определенные?

Нет, роутер работает по станциям, так что нужны пара названий станций и расстояние. Что за информация в приведённом списке я не понял.

Расстояние в километрах от Нижнего Новгорода.

А понял. На самом деле, расстояние от предедущей станции в списке. Ну, ситуация такая:

Горький-Московский -> Дзержинск
  Failed: End station not found
Дзержинск -> Ильино
  Failed: Start station not found
Ильино -> Вязники
  Route found, 57.7638 km, expected 58 km, offset is 0.408948%
Вязники -> Ковров 1
  Route found, 59.8379 km, expected 60 km, offset is 0.270844%
Ковров 1 -> Владимир
  Route found, 64.0863 km, expected 64 km, offset is 0.134918%
Владимир -> Москва-Курская
  Route found, 190.245 km, expected 191 km, offset is 0.396924%
Москва-Курская -> Тверь
  Failed: no route found
Тверь -> Бологое-Московское
  Route found, 556.498 km, expected 164 km, offset is 239.328%
Бологое-Московское -> Окуловка
  Route found, 72.0452 km, expected 70 km, offset is 2.92176%
Окуловка -> Малая Вишера
  Failed: End station not found
Малая Вишера -> Московский Вокзал
  Failed: Start station not found

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

Ещё проблема - сопоставление названий станций.

“Нижний Новгород Моск.” vs. “Горький-Московский”
“Ковров-1” vs. “Ковров 1”
“Москва Курская” vs. “Москва-Курская”
“Санкт-Петербург” vs. “Московский Вокзал”

может решаться как через alt_name в базе (применимо не всегда), так и через внешнюю таблицу соответствия.

Для сопоставления названий валидатор ЕСР предоставляет таблицу соответствия обьектов ОСМ к ЕСР и Экспресс
http://osm.sbin.ru/esr/