OSMPIE - OSM Perfect Intersection’s Editor
Введение
На больших увеличениях, глазу гораздо приятнее смотреть на нечто, что больше похоже на дорогу, чем просто на оранжевые и желтые полоски. На карте мы часто видим рядом такие объекты как дерево, парковка велосипедов, пониженный бордюр на переходе,люк, скамейка. И при этом такой сложный объект, как дорога или перекресток - это просто одна-две цветных линии. Давайте это как-то исправим уже?
OSMPIE состоит из двух главных компонентов:
- Это рендер движок дорог, который превращает объекты дорог OSM (атрибутированные way,nodes,relations) в новое множество геообъектов топологически и геометрически связанных между собой и исходными OSM объектами.
- Это специализированный редактор/вьювер для быстрого и удобного картирования дорог и перекрестков в OSM.
Начало:
Имея многолетний опыт построения и работы с моделями дорожных сетей мы понимали, что одна из главнейших задача реализовать функцию развертки графа и генерации новых связей которые бы отражали непротиворечивую топологию новой сети относительно исходной и карте и “на земле”.
В начале топология - затем геометрия.
Первой задачей было построение графа дорожной сети, где для каждой полосы движения будет своя осевая. И во вторую очередь необходимо было решить проблему связности на пересечениях. И только тогда можно приступать к геометрическим преобразованиям и построениям.
Мотивация
Картирование дорог и в особенности сложных перекрестков непростая задача. И требует от картографа очень развитого воображения, существующие инструменты конечно очень помогают в визуализации. Но наша цель - идеальный перекресток, (точнее его модель(отражение)).
Что такое “перекресток” ?
- Перекресток с точки зрения его функциональной модели должен обладать и связывать между собой
следующий набор объектов:
- Стоп линия или точка входа в перекресток (stopline - синия точка - знак 5.15)
- Подход - группа стоп линий с одонго направления (approach)
- Точка выхода (exitpoint - красная точка)
- Путь от входа к выходу (route - фиолетовая линия)
- Конфликтные точки (conflict point - черная точка), как результат пересечения множества маршрутов
- Перекресток обладает двойной природой - площадной и графовой, геометрией и топологией.
- Перекресток это множество пересечений - кластер пересечений
- Каждое пересечение можно характеризовать двумя радиусами, которые являются мостом между графовой и площадной природой перекрестка:
- Радиус пересечения - площадь зоны конфликта
- Радиус кластеризации пересечения - площадь влияния пересечения на другие
- Перекресток это место где мерами ОДД не предусмотрено остановка транспортных средств, только движение по полосам/направлениям.
Объекты OSM | Осевые линии полос и соединений |
---|---|
![]() |
![]() |
(node,way,relation) | (points,edges, connections) |
Площадь перекрестка | Точки и маршруты |
---|---|
![]() |
![]() |
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
- Объекты дорожной разметки в виде полигонов, линий и точек связанные с тем или иным ребром графа.
Заключение
Да сам рендер не идеален и тоже может выдавать некоторые ошибки, однако его задача в точности отразить то что ему указали через схемы тэгирования объектов OSM. Ну и немного приукрасить - скруглив уголки и сгенерировав разметку.
В первой публичной версии osmpie дорожная разметка не управляема и генерируется по максимуму и может не отражать некоторых местных особенностей нанасения. Например парковочных мест или пешеходных переходов. И ее рендер осуществляется, чтобы дать понять о существовании того или иного объекта, полосы и ее размерах. Однако мы надеемся это быстро исправить в самую первую очередь.
討論
由 matheusgomesms 於 2025年06月18日 10時51分 發表的評論
Very cool!
由 solenoid jam 於 2025年06月18日 11時43分 發表的評論
Выглядит интересно. На хабре 2гис рассказывал, что у них тоже геометрия генерируется по графу. Отличие в том, что у них геометрия хранится в базе, и её можно руками шевелить, для того что бы в сложных случаях её можно было поправить. В случае же изменения графа, геометрия локально перегенерируется. В osm, не знаю уж, к сожалению или к счастью, таких технологий нет.
由 tordans 於 2025年06月19日 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
由 Dustin C 於 2025年06月19日 08時31分 發表的評論
This is absolutely incredible! Is there a link to the tool or is the code open?
由 TrickyFoxy 於 2025年06月21日 00時22分 發表的評論
А потрогать уже как-то можно? :)
由 Mikhail Kuzin 於 2025年06月21日 16時40分 發表的評論
Пока нет, релиз планируется осенью. Редактор довольно сложная штука и маршруты ОТ же еще добавляют функционала не целевого. Пока только почитать, обсудить, помочь добрым словом.
由 4004 於 2025年06月22日 20時22分 發表的評論
красивое
由 -karlos- 於 2025年06月25日 10時09分 發表的評論
Great! Is it Javascript or what language? Could you show an mor complex example but a stright crossing?
由 Mikhail Kuzin 於 2025年06月25日 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.
由 WilliamHarrison 於 2025年06月26日 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
由 Dustin C 於 2025年06月26日 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!
由 WilliamHarrison 於 2025年06月26日 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.
由 Mikhail Kuzin 於 2025年06月26日 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
由 Mikhail Kuzin 於 2025年08月27日 06時51分 發表的評論
Good day to all!
Thank you for your feedback, and I want to please you a little. We are working on the official launch of OSMPIE
The application itself is now available online, as well as some documentation, descriptions and cool examples.
https://osmpie.org/
I’m also actively trying to introduce corrections to the OSM roads.
There you can see links to changesets to compare before and after and see which tags were used where.
There are still a lot of bugs in the editor and engine, but it is already quite usable.
That is why we suggest you try it now and of course we are waiting for your comments and issues on GitHub.
If you don’t have a github, then you can send me a private message or telegram(@mikhail_kuzin), or whatever is convenient.
I look forward to your questions and suggestions. Thank you.
由 WilliamHarrison 於 2025年08月27日 08時01分 發表的評論
Hello, ways merging at roundabout exists don’t seem to render correctly, I put the last node at the center of the road width and yet it doesn’t fill in.
由 Mikhail Kuzin 於 2025年08月27日 08時36分 發表的評論
Hi WilliamHarrison, can you share the link here or the bakeId ?
But I think that guess what you’re talking about. Probably need to split the ways and add
placement: transition
to short parts, wich linked to nodeosm.wiki/Tag:placement%3Dtransition
Roundabouts are of course a serious challenge for rendering, since they are mapped as anyone wants. In any case, it will be more productive to discuss a specific example
Thanks!
由 Mikhail Kuzin 於 2025年08月27日 08時40分 發表的評論
Example:
https://osmpie.org/app/editor?bakeId=d2abe506-3c01-402e-85e8-d0bb69b39237&pos=7.62938&pos=46.756614&zoom=20.00
由 WilliamHarrison 於 2025年08月27日 08時50分 發表的評論
Yes, that seems correct visually. but for OSM mapping, that’s usually unpreferable, I map the last node connecting them on the middle of the lane. why doesn’t it transition from one lane to the other? am I missing something? https://osmpie.org/app/editor?bakeId=e768e275-08ae-433a-8c3d-1d2383188754&pos=7.629425&pos=46.756243&zoom=20.00&tile=Osm
由 Mikhail Kuzin 於 2025年08月27日 09時11分 發表的評論
It’s hard for me to say, I’m new to OSM and don’t really understand what’s right and what’s not. We used the experience of this proposal
osm.wiki/Proposal:Placement
and to be subtle, here’s an example, and in general it seemed reasonable to me, and that’s why we’ve implemented it this way at the moment.
osm.wiki/w/images/4/47/Lane_Placement_2.png
I partly understand that this is unnecessary fuss with splits and short ways, and of course I’d like to have a smart renderer that doesn’t care whether there’s a transition or not. I think we’ll get to that.
由 WilliamHarrison 於 2025年08月27日 09時13分 發表的評論
I see, good job on the release! another intersection that has issues; https://osmpie.org/app/editor?bakeId=d61baa08-3b66-4461-8f8b-3970deb019c2&pos=7.615944&pos=46.77036&zoom=19.78 4 lanes go in and 4 go out.
由 Mikhail Kuzin 於 2025年08月27日 09時25分 發表的評論
https://osmpie.org/app/editor?bakeId=dde9a875-c8f5-4624-8801-d011f2fe08ee&pos=7.61563&pos=46.770444&zoom=20.55&tile=Esri+World
seems it the same
placement:transition
?I suggest going to GitHub so as not to fill these comments with links
https://github.com/kuzinmv/osmpie-doc/issues/2