Пересечения и перекрестки
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
Продолжая развивать тему тэгирования точек, в настоящее время существуют и применяются тэги https://wiki.openstreetmap.org/wiki/Tag:junction=yes,
https://wiki.openstreetmap.org/wiki/Tag:junction=uncontrolled
При работе над рендером мы провели классификацию пересечений, которые вероятно стоит различать и предлагаем расширить этот список, но саначала…
Основные признаки пересечений
Участники- точка принадлежит 2м и более wayРазмер- неотъемлемым, хотя и невсегда явным атрибутом пересечения будет являться некая фигура, площадь, многоугольник - нечто что будет соотносится(описывать,вписывать) с реальными линейными размерами места, где будет(не обязательно) происходить конфликт участников движения. В OSMPIE мы предложили использовать окружность и соответсвенно радиус, как аттрибут смjunction:radiusСвязность- появляются такие понятия(точки) входа и выхода в пересечение и необходимости указания(атрибуции) их связи друг сдругом. Смconnect:lanes,https://wiki.openstreetmap.org/wiki/Tag:relation[type=connectivity],turn:lanesКонфликтные точки- необязательный, часто присутствующий признак - конфликтности одних связей с другими и место(координаты) этого конфликта.
Существует еще один признак пересечений, но от уже относится не к пересечению самому по себе, а к их множествам. Пересечения склонны группироваться в сложные объекты - “перекрестки” - то есть образовывать явные и конечные множества - кластера.
Самым оптимальным вариантом атрибутирования, который бы мог управлять процессом и соответственно результатом кластеризации
тоже является радиус окружности - см. тэг junction:cluster:radius
Классификация пересечений:
junction = controlled- контролируемое пересечение со светофоромjunction = uncontrolled- не контролируемое пересечение/перекресток так как это используется сейчасjunction = inout- в пересечении учавствуетhttps://wiki.openstreetmap.org/wiki/Tag:way[highway=service]- въезд/выезд со дворовjunction = joint- в пересечении учавствует ровно 2way, общая точка это конец одного и начало другого
Все эти значения вычислямые по другим ключам и тэгам учавствующих в соединений объектах,
то есть, по большому счету не требуют явной установки, однако редко, но бывают моменты,
когда стоит задать явно, например когда в регулируемом пересечении учавствуют выходы из парковок и дворов
https://wiki.openstreetmap.org/wiki/Tag:way[highway=service].
junction = controlled- node принадлежит 2 и более way, и у нее есть тэги светофоров(highway == traffic_signals || crossing == traffic_signals) == truejunction = uncontrolled- node принадлежит 2 и более way и нет тэгов о светофорах(highway == traffic_signals || crossing == traffic_signals) == falsejunction = inoutnode принадлежит 2 и более way и хотя бы один из нихhttps://wiki.openstreetmap.org/wiki/Tag:way[highway=service]junction = joint- в пересечении учавствует ровно 2 way, помеченные как дорога (неfootway,tram,cycleway)
Зачем нужна такая классификация junction для node
- Как и любые явные тэги для более удобной выборки, фильтрации и поиска. Гораздо проще фильтровать объекты по атрибуту, чем рекурсивно выискивать связи и списки тэгов.
- Для помеченной как
junctionявно(по желанию пользователя) точки рендер начинает правильно итерпретировать и другиеjunction:*=тэги, напримерjunction:radiusилиjunction:cluster:radius - тип
https://wiki.openstreetmap.org/wiki/Tag:junction=inoutнужен, чтобы явно отметить точки пересечения сhigway[service], так как эти точки часто могут быть без тэгов, или service ways могут фильтроваться при рендере, а наличе информации о пересечении с сервисной дорогой важно для разметки парковок и других вещей, которые остаются на основной дороге, даже если сервисной дороги нет в рассмотрении. - тип
https://wiki.openstreetmap.org/wiki/Tag: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, при этом желательно минимального размера, чтобы отделить такие типы точек, которые заметно влияют на визуализацию связных с ними элементов.
Например:
https://wiki.openstreetmap.org/wiki/Tag:junction=inout- очень много в Спб сервисов выходит прям на основные дороги и понятно, что parking:{side} = lane нужно прервать в “районе” таких точек, а в районе = controlled вероятно будет вообще другое отображение парковок. + Если будет разметка divider то ее надо прерывать в районе таких точек.https://wiki.openstreetmap.org/wiki/Tag: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