OpenStreetMap logo OpenStreetMap

OSMPIE - OSM Perfect Intersection’s Editor

Введение

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

OSMPIE состоит из двух главных компонентов:

  1. Это рендер движок дорог, который превращает объекты дорог OSM (атрибутированные way,nodes,relations) в новое множество геообъектов топологически и геометрически связанных между собой и исходными OSM объектами.
  2. Это специализированный редактор/вьювер для быстрого и удобного картирования дорог и перекрестков в OSM.

image info

Начало:

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

В начале топология - затем геометрия.

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

image info

Мотивация

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

image info

Что такое “перекресток” ?

  1. Перекресток с точки зрения его функциональной модели должен обладать и связывать между собой следующий набор объектов:
    • Стоп линия или точка входа в перекресток (stopline - синия точка - знак 5.15)
    • Подход - группа стоп линий с одонго направления (approach)
    • Точка выхода (exitpoint - красная точка)
    • Путь от входа к выходу (route - фиолетовая линия)
    • Конфликтные точки (conflict point - черная точка), как результат пересечения множества маршрутов
  2. Перекресток обладает двойной природой - площадной и графовой, геометрией и топологией.
  3. Перекресток это множество пересечений - кластер пересечений
  4. Каждое пересечение можно характеризовать двумя радиусами, которые являются мостом между графовой и площадной природой перекрестка:
    • Радиус пересечения - площадь зоны конфликта
    • Радиус кластеризации пересечения - площадь влияния пересечения на другие
  5. Перекресток это место где мерами ОДД не предусмотрено остановка транспортных средств, только движение по полосам/направлениям.
Объекты OSM Осевые линии полос и соединений
image info image info
(node,way,relation) (points,edges, connections)
Площадь перекрестка Точки и маршруты
image info image info
area:highway=* + junction=yes ? множество маневров в виде линий-маршрутов и их пересечения

ОК, что нужно делать? Открывайте любой редактор и вносите тэги ОСМ для дорог, но будьте аккуратны с relation.

Официальные тэги и proposal в OSM на 90-95% процентов достаточны, чтобы обеспечить возможности для картирования и рендера дорог. В ходе работы над OSMPIE мы выявили и определили минимальный набор самых простых тэгов и несколько расширений к существующим, которые позволят довести цифру до 100%.

Какие тэги нужно добавлять?

Официальные

highway
crossing
lanes:*
turn:lanes
width
width:lanes
psv:lanes
placement
parking:{side}:*
cycleway:{side}
bus_bay
tram

... и другие

Новые

connect:lanes
junction:shape
junction:radius
junction:cluster:radius
crossing:corner

Рендер osmpie может выполнять функции визуального валидатора - если вам не нравится изображение справа, и перекресток не выглядит идеально, или оно не сильно похоже на то, что вы видите на спутниковом снимке - значит скорее всего нужно добавить еще тэгов или исправить старые.

Что я получу, какой профит?

  • Ввод и разметка тэгов дорог и перекрестков происходит значительно легче-точнее-удобнее, когд у вас есть WYSIWYG
  • Вы можете загрузить *.osc сделанный в любом другом редакторе
  • А так же сохранить предполагаемые вами изменения и открыть в JOSM или другом редакторе для дальнейших правок.
  • Поделиться ссылкой с другими людьми для обсуждения правок ДО… того как все сломать, для особо сложных или запутанных случаев
  • Визуально видеть все изменения на карте
  • Поделиться или сохранить все объекты, которые генерирует osmpie в GeoJson или даже сразу открыть их в geojson.io и скачать как shape, csv, kml …
  • Возможность сделать мир OSM чуточку(а может и значительно) лучше, меньшими усилиями.

Какие данные на входе?

  • Запрос к overpass API, который возвращает большинство объектов highway=*, так или иначе связанных с дорогами. Все эти объекты отражаются в левой части редактора и доступны для изменения(тэги, геометрия).

Какие данные на выходе?

  • Граф полос дорог, парковок трамвайных путей и велодорог - точки и дуги. Граф топологически соответствующий направлениям движения исходных OSM way и геометрически соответствующий осевым полос.
  • Особенно отделены функциональные точки перекрестка - стоп линии(точки входа), точки выхода и конфлктные точки - для каждого вида участников взаимоотношений на каждом пересечении.
  • Кластеризацию точек и дуг графа в такие объекты как перекресток и подход
  • Площадные объекты: (мульти)полигон перекрестка, полигон дороги - см area:highway
  • Объекты дорожной разметки в виде полигонов, линий и точек связанные с тем или иным ребром графа.

image info

Заключение

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

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

Location: Пески, округ Смольнинское, Санкт-Петербург, Северо-Западный федеральный округ, 191036, Россия
Email icon Bluesky Icon Facebook Icon LinkedIn Icon Mastodon Icon Telegram Icon X Icon

Discussion

Comment from matheusgomesms on 18 June 2025 at 10:51

Very cool!

Comment from solenoid jam on 18 June 2025 at 11:43

Выглядит интересно. На хабре 2гис рассказывал, что у них тоже геометрия генерируется по графу. Отличие в том, что у них геометрия хранится в базе, и её можно руками шевелить, для того что бы в сложных случаях её можно было поправить. В случае же изменения графа, геометрия локально перегенерируется. В osm, не знаю уж, к сожалению или к счастью, таких технологий нет.

Comment from tordans on 19 June 2025 at 07:43

Thanks for sharing. FYI I just added your post to our collection of approaches for this problem space https://github.com/a-b-street/osm2streets/discussions/195#discussioncomment-13517207

Comment from Dustin C on 19 June 2025 at 08:31

This is absolutely incredible! Is there a link to the tool or is the code open?

Comment from TrickyFoxy on 21 June 2025 at 00:22

А потрогать уже как-то можно? :)

Comment from Mikhail Kuzin on 21 June 2025 at 16:40

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

Comment from 4004 on 22 June 2025 at 20:22

красивое

Comment from -karlos- on 25 June 2025 at 10:09

Great! Is it Javascript or what language? Could you show an mor complex example but a stright crossing?

Comment from Mikhail Kuzin on 25 June 2025 at 15:06

Javascript is also there. I didn’t quite understand about the pedestrian crossing, but in any case here is the link

A little patience, you will soon be able to test everything yourself.

Comment from WilliamHarrison on 26 June 2025 at 00:35

Hello! I work on data creation for use in traffic simulations, if you want to test it on some well mapped complex intersections, please check my recent changesets. looks very good! generally, as a substitute for the placement tag you can add an option to “anchor” it in one side, so in “through|through|right” so the “right” turn lane would be an addition to the first two lanes on the most right. I map; traffic signals (directional, placed at stop locations) lane count change:lanes turn:lanes turn restrictions psv/bus:lanes psv/bus:turn:lanes

Comment from Dustin C on 26 June 2025 at 08:30

@WilliamHarrison, really curious if any of your work or details about it is public. I used to work on traffic simulation fed from OSM data, and it was endlessly fascinating and frustrating. I’d love to learn about what you do to infer traffic signal timings, for example!

Comment from WilliamHarrison on 26 June 2025 at 08:43

@Dustin C, Sorry, but I have no idea as i dont handle that side of things. Most likely, provided by the client would be my guess.

Comment from Mikhail Kuzin on 26 June 2025 at 11:19

@WilliamHarrison Thank you, we will definitely check in the areas where you recommend. I will let you know about the results as soon as they are available

Log in to leave a comment