OpenStreetMap logo OpenStreetMap

Пересечения и перекрестки

Posted by Mikhail Kuzin on 16 June 2025 in Russian (Русский). Last updated on 17 June 2025.

Пересечения и перекрестки

Описание пересечений в OSM как и многое достаточно хаотично и лоскутно. См Key:junction Чтобы готовить перекрестки более совершенными надо систематизировать существующие тэги и …. добавить еще немного хаоса)))

node: 
    junction = controlled|uncontrolled|inout|joint 

Продолжая развивать тему тэгирования точек, в настоящее время существуют и применяются тэги junction=yes, junction=uncontrolled При работе над рендером мы провели классификацию пересечений, которые вероятно стоит различать и предлагаем расширить этот список, но саначала…

Основные признаки пересечений

  • Участники - точка принадлежит 2м и более way
  • Размер - неотъемлемым, хотя и невсегда явным атрибутом пересечения будет являться некая фигура, площадь, многоугольник - нечто что будет соотносится(описывать,вписывать) с реальными линейными размерами места, где будет(не обязательно) происходить конфликт участников движения. В OSMPIE мы предложили использовать окружность и соответсвенно радиус, как аттрибут см junction:radius
  • Связность - появляются такие понятия(точки) входа и выхода в пересечение и необходимости указания(атрибуции) их связи друг сдругом. См connect:lanes, relation[type=connectivity], turn:lanes
  • Конфликтные точки - необязательный, часто присутствующий признак - конфликтности одних связей с другими и место(координаты) этого конфликта.

Существует еще один признак пересечений, но от уже относится не к пересечению самому по себе, а к их множествам. Пересечения склонны группироваться в сложные объекты - “перекрестки” - то есть образовывать явные и конечные множества - кластера.

Самым оптимальным вариантом атрибутирования, который бы мог управлять процессом и соответственно результатом кластеризации тоже является радиус окружности - см. тэг junction:cluster:radius

Классификация пересечений:

  • junction = controlled - контролируемое пересечение со светофором
  • junction = uncontrolled - не контролируемое пересечение/перекресток так как это используется сейчас
  • junction = inout - в пересечении учавствует way[highway=service] - въезд/выезд со дворов
  • junction = joint - в пересечении учавствует ровно 2 way, общая точка это конец одного и начало другого

Все эти значения вычислямые по другим ключам и тэгам учавствующих в соединений объектах, то есть, по большому счету не требуют явной установки, однако редко, но бывают моменты, когда стоит задать явно, например когда в регулируемом пересечении учавствуют выходы из парковок и дворов way[highway=service].

  • junction = controlled - node принадлежит 2 и более way, и у нее есть тэги светофоров (highway == traffic_signals || crossing == traffic_signals) == true
  • junction = uncontrolled - node принадлежит 2 и более way и нет тэгов о светофорах (highway == traffic_signals || crossing == traffic_signals) == false
  • junction = inout node принадлежит 2 и более way и хотя бы один из них way[highway=service]
  • junction = joint - в пересечении учавствует ровно 2 way, помеченные как дорога (не footway,tram,cycleway)

Зачем нужна такая классификация junction для node

  • Как и любые явные тэги для более удобной выборки, фильтрации и поиска. Гораздо проще фильтровать объекты по атрибуту, чем рекурсивно выискивать связи и списки тэгов.
  • Для помеченной как junction явно(по желанию пользователя) точки рендер начинает правильно итерпретировать и другие junction:*= тэги, например junction:radius или junction:cluster:radius
  • тип junction=inout нужен, чтобы явно отметить точки пересечения с higway[service], так как эти точки часто могут быть без тэгов, или service ways могут фильтроваться при рендере, а наличе информации о пересечении с сервисной дорогой важно для разметки парковок и других вещей, которые остаются на основной дороге, даже если сервисной дороги нет в рассмотрении.
  • тип junction=joint может показаться очень необычным или непонятным пересечением - почему два стыкующихся пути нужно классифицировать как пересечение. Если не происходит изменения количества полос - то в этом нет необходимости, но если в 2х вэях разное число полос то в этом узле, так-же как и в других случаях появляются маневры - перестроения, которые имеют протяженность (cluster:radius) и связность(connect:lanes) и поэтому это тоже пересечение, хоть и специфический частный случай

[Добавить картинок примеров]

Дополнительные обработки

Для каждой ноды, где есть тэг junction заданый явно или вычисленный движком osmpie производится так же estimate значения junction:radius на основе количества участников пересечения и их полосности, что не отменяет того что значение может быть задано явно пользователем.

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

Email icon Bluesky Icon Facebook Icon LinkedIn Icon Mastodon Icon Telegram Icon X Icon

Discussion

Comment from solenoid jam on 17 June 2025 at 05:03

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

Comment from Mikhail Kuzin on 17 June 2025 at 05:35

Здравствуйте!!!

О Спасибо за комментарий! Это пока(вообще) не предложение схемы.. Я просто подумал что раз дневник, то пиши что хочешь.

Это первая часть из множества мыслей собранных более менее в кучку.

Я и не надеюсь, пока, что это станет реальным предложением для картирования. Потому что все вычисляемое - понятное дело. И для картирования не имеет смысла в текущей ситуации.

Comment from Mikhail Kuzin on 17 June 2025 at 06:08

А если попробовать ответить на вопрос “зачем?” по существу.

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

Например:

  • junction=inout - очень много в Спб сервисов выходит прям на основные дороги и понятно, что parking:{side} = lane нужно прервать в “районе” таких точек, а в районе = controlled вероятно будет вообще другое отображение парковок. + Если будет разметка divider то ее надо прерывать в районе таких точек.
  • junction=controlled - ну чисто логически - uncontrolled же есть + опять же если мы как-то захотим отразить стоп-линии или приоритет, то на регулируемых там светофор и понятия уступи дорогу нет, для каждого подхода к пересечению нужна стоп-линия. А вот на нерегулируемых только для уступи дорогу. Те после вычисления приоритетности, которое надо проводить, а для controlled необязательно.

Comment from solenoid jam on 17 June 2025 at 17:59

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

Comment from Mikhail Kuzin on 18 June 2025 at 04:49

Тогда вот вторая, но на самом деле первая часть, которая многое расставит на свои места, возможно.

OSMPIE - OSM Perfect Intersection’s Editor

Comment from zamotkin on 18 July 2025 at 08:22

Привет! Безумно интересно и совпадает с нашими планами на ближайшее время.

Не смог найти контакт, может быть спишемся, я расскажу чем мы занимаемся и возможно мы найдем какие-то возможности сотрудничества и совместной работы? tg @zamotkin, занимаюсь Geo в Wildberries

Log in to leave a comment