Пересечения и перекрестки
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
- в пересечении учавствует ровно 2way
, общая точка это конец одного и начало другого
Все эти значения вычислямые по другим ключам и тэгам учавствующих в соединений объектах,
то есть, по большому счету не требуют явной установки, однако редко, но бывают моменты,
когда стоит задать явно, например когда в регулируемом пересечении учавствуют выходы из парковок и дворов
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
на основе количества участников пересечения и их полосности, что
не отменяет того что значение может быть задано явно пользователем.
Формула сейчас выведена приблизительно и “на глаз”, дает в среднем неплохой результат, снижающий ручную работу, но в сложных случаях, конечно, все придется брать в свои руки.
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