Пора наносить направления по полосам движения

В связи с появлением у ПРОГОРОД’а, который стал в этом вопросе лидером среди СНГ’овских программ, возможности учитывать направления поворотов по полосам движения, предлагается обсудить два (пока два, тема свободна для обсуждения) способа внесения соответствующей информации в OpenStreetMap.
Первый вариант здесь - http://wiki.openstreetmap.org/wiki/Relations/Proposed/turn_lanes
Второй здесь - http://forum.pro-gorod.ru/viewtopic.php?f=190&t=712&start=40#p42849 (может потребоваться регистрация).
Предлагайте и третий и четвертый…
Если говорить о моем предложении, то, почитав предложение немца, я бы присвоил своему отношению имя как у него, - lanesturn, как более полно отражающее суть отношения, отказавшись от использования в этом случае тега restriction, который относится к обячным запретам, не связанным с многорядностью.
В принципе, теги и роли могут быть любые, желательно короткие, но понятные. Меня больше интересует ваше мнение о самой логике построения отношения, которое должно быть не сложным, интуитивно понятным и вместе с тем содержать необходимую информацию.

Реализация этой возможности позволит навигатору выдавать голосовые подсказки типа: “Через 700 метров поверните налево, держитесь третьей полосы” или “Через 700 метров поверните направо из первой или второй полосы”, “Держитесь крайней правой/средней/левой полосы” - короче, что угодно, ибо вся информация о направлениях движения по полосам известна программе.
Кроме того, программа в этом случае может нарисовать информационный знак “Направление движения по полосам” со стрелками на голубом фоне или как-то по другому визуализировать информацию.

У josm на эту тему есть прикольный плагин turnlanes:
http://www.youtube.com/watch?v=CwZgug_U-QY

I like the video :sunglasses:
Наконец-то что-то стоящее появилось для полос!

Насколько я понял из слов автора, плагин пока не официальный, но работает нормально.
Прорисовал несколько перекрестков в Гомеле, нашел несколько ситуёвин, когда только визуальными средствами плагина все-таки обрисовать ситуацию не получается, требуется ручная правка или некоторая хитрость в прорисовке самого перекрестка. Для не сложного четырехстороннего перекрестка, например, плагин сгенерировал 17 отношений, второй из упомянутых способов требует в этом случае лишь 4-х.
Какие программы, поддерживающие любительские карты, кроме ПРОГОРОД’а, сегодня способны реализовать эту возможность? Именно программы, потому как за конвертерами дело, насколько я понимаю, не станет.

По поводу учета движения по полосам дорог написал здесь: http://forum.openstreetmap.org/viewtopic.php?pid=190971#p190971

К turnlanes одна из серьезных претензий: он сложен.

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

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

Для двунаправленной дороги каждый конец описывается отдельно.

Полосы будем считать слева направо, т.е. от осевой линии дороги (которая разделяет разные направления движения), если она есть. Для каждой полосы указываем знак, как можно поворачивать. Дополнительные полосы учитываются! - ведь знаки на них тоже есть.

В OSM это все можно закодировать с помощью одного дополнительного тега для линии, например, так:

laneinfo:end=ls;s;s;r;

Т.е. 4 полосы: прямо или налево; прямо; прямо; направо. Использованы буквы, чтобы проще запомнить:

прямо - s - Straight
налево - l - Left
направо - r - Right
разворот - u- U-turn
левее - e -slightly lEft
правее - i- slightly rIght

Некоторые знаки получаются комбинированием букв, например, ls - прямо или налево. Эту таблиц можно расширить и до обозначений, применяемых в других странах (крутой поворот направо и т.д.). Левый поворот уже подразумевает разворот и его специально указывать не нужно. Например, писать “lsu” нужно лишь в случае, если в этом месте для данной полосы в реальности висит именно такой знак с тремя расходящимися стрелками - прямо, налево и на разворот.

Число полос понятно из записи, :begin или :end - это уточнение для двухсторонний дороги, для односторонней тег - просто laneinfo.

Если далее идет уменьшение числа полос, то дорогу стоит в этом месте разорвать и указать сужение с помощью e, например, сужение с трех полос до двух:
laneinfo:end=s;s;e

Некоторый минус такого подхода в том, что направление цифровки дороги теоретически можно поменять, тогда надо не забывать и laneinfo:begin->laneinfo:end и наоборот.

(Если не нравится :begin и :end, для laneinfo можно ввести отношение с тегами, ссылающимися на геометрию явно:
relation=laneifno
members:
way=2345642361
node=89012345
tags:
laneifno=ls;s;s;r;
) Однако отношение все же сложнее одного тега. :slight_smile:

В чем принципиальное различие такого подхода по сравнению с turnlanes, помимо сложности формата? Дело в том, что, имея только общий граф дорог, автоматически не всегда (особенно если перекресток сложный и граф для него составлен “плохо”) можно однозначно сопоставить знак и дорогу, на которую надо повернуть. Например, если поворот идет под 45гр - это “направо” или “правее”? В случае мы применения laneinfo бы поставили знак, который реально использован на месте, а в случае turnlanes вычислили бы, но, возможно, он был бы оказался другим. Другой вариант: граф на перекрестке нарисован так, что поворот с первой полосы налево идет через небольшой участок прямо. В случае turnlanes этот участок ушел бы в via, и to можно было бы уже указать участок после поворота. Тогда, действительно, загорится только стрелка влево на первой полосе. В случае же laneinfo можно и “не догадаться”, что при подъезде к перекрестку нужно зажечь только стрелку на первой полосе влево. Т.е. для каких-то случаев лучше может быть laneinfo, для каких-то turnlanes. Для laneinfo стрелки всегда правильные, но иногда, мы можем их “не понять”, для turnlanes движение соответствует стреклам, но они могут не соотвествовать реальным знакам. Вывод: граф движения на сложных перекрестках нужно составлять попроще, и так, чтобы избежать подобных разночтений.

Впрочем, не стоит пугаться, все эти тонкости проявятся только на крайне незначительном числе случаев.

В связи с последним примером следует считать, что laneifno дает только вспомогательную информацию, используемую для рисовки стрелочек и отображения на какую полосу надо перестраиваться при подъезде к перекрестку, но никак не описывает граф маршрутизации, то есть маршрутизацию надо по-прежнему указывать рестрикшенами запретов поворотов, поскольку в них явно указаны way, куда ехать нельзя.

Кстати, использовать обычные рестрикшены запретов поворотов имеет смысл также и в случае turnlanes, чтобы маршрутизация была правильная для программ, не использующих turnlanes.

В конвертере поддержу любой вариант (а может быть и несколько - такой, turnlanes, что-то еще), однако займусь этим примерно через три недели, не ранее. За это время хорошо бы придти к консенсусу. Хотелось бы, конечно, один формат.

Вполне приемлемый вариант. Счет полос слева направо естественен и его целесобразно сохранить для обоих концов линии и laneinfo:begin и laneinfo:end (впрочем, водители считают первой полосу, примыкающую к тротуару).
Поелику turnlanes не является стандартом де-факто, а носит статус предложения, считаю имеющим полное право на жизнь и вариант laneinfo, подкупающий своей простотой в реализации.
Думаю, до введения стандарта (по крайней мере российского) желательно поддержать оба наречия, т.к ситуация неопределенности и применения различных наречий может продлиться достаточно долго.
Может оказаться полезной и информация об изменении числа полос и уточняющие сведения типа “поверните туда-то” или “примите туда-тее” т.к. анализ только геометрии не всегда генерирует корректную подсказку.

Что касается светофоров со стрелками, то в данном случае для дополнительных (и основных) полос, из которых поворот осуществляется только по стрелке светофора можно добавлять некий символ. Например, для гипотетической дороги с одной полосой и светофором с двумя дополнительными стрелками (налево и направо) можно бы было написать:
lineinfo:end=-ls-r
или как-то так. В примере я обозначил наличие стрелок для направлений l и r знаком “минус”.
И насчет разделителя. Может ошибаюсь, но кажется в большинстве перечислений в OSM чаще используется запятая, а не точка с запятой, хотя это не принципиально.

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

Во-вторых, вы тут изобретаете велосипеды. Вот это длинное предложение в предпоследнем сообщении почти повторяет украинский пропозал. Только не надо его «принимать» и широко использовать: он чрезвычайно сыр.

Наконец, изобретение специальной схемы для Беларуси — странный ход. Такие вещи желательно обсуждать в более широком кругу — если не англоязычном, то, хотя бы, на русском форуме.

Можно на протяжении длительного времени обсуждать что то - и в результате не будет ничего… И это не изобретательство специально для Беларуси - а возможность заносить прямо сейчас информацию, на основании которой можно выводить информационные сообщения, пока именно информационные сообщения. Однако такое решение в будущем может быть сконвертировано в какое то другое решение, которое возможно будет принято сообществом. На счет “украинского пропозала” - аргументировали бы - почему он “чрезвычайно сыр”. Любой водитель, который катается по картам на базе OSM был бы рад хотя бы какой то информации такого рода. И вот когда появился наконец программный продукт, который готов реализовать эту функцию - а сообщество OSM не готово… Поэтому хотелось бы услышать что именно плохо в предлагаемых схемах, и в сжатые сроки согласовать устраивающий всех вариант кодирования этой информации.

А для чего ж вам удочку закинули? :slight_smile: Спасибо, что вынесли в отдельную ветку - http://forum.openstreetmap.org/viewtopic.php?id=13850 и за полезные размышления на штосме - http://shtosm.ru/2011/09/20/2/
Кстати, белорусские схемы не так уж и плохи, например, с адресацией.
Долго ругали и до сих пор пишут, что странная, однако постепенно после некоторой доработки становится де-факто в exСССР и поддерживается все большим количеством конфигов.

Минчанам: Наносить полосы, знаки, развязки, этажность зданий в Минске теперь можно гуляя по городу не вставая из-за компьютера. Смотреть здесь

Я изучил все предыдущие пропозалы и сделал составную схему тегирования полос поворота и разгона. Приглашаю просмотреть пропозал и проверить, всё ли там есть и правильно ли. Нуждам прогорода, как я понимаю, этот пропозал отвечает: там есть алгоритм построения картинок «движение по полосам».