Рендеринг дорожных знаков?

Кстати, по уму надо бы совсем разделить вид запрета и вид значка - нынешняя система слишком часто вводит в заблуждение.
Я бы предложил следующие поправки в существующий Relation:restriction:

  1. уменьшить число видов запрета до двух: restriction=no_way или restriction=only_way (это полностью совместимо с существующей системой, в которой все, что начинается с no_ - запрет, с only_ - предписание, зато сразу отвязывает суть запрета от его графического представления).
  2. разрешить несколько членов отношения to в одном отношении (например, разрешены движение только направо и разворот)
  3. допускать только один via и только в виде точки (т.е. запрет всегда описывается с точки зрения подъезжающего к перекрестку)
  4. добавить описание дорожного знака restriction_sign=(выбирается из списка “старых” запретов, например, no_left_turn), но уже необязательное, знак можно будет отрисовывать по необходимости.

ценная вещь была бы, multi-to :slight_smile: а multi-from заодно не пригодится? :slight_smile:

в этом и минус – как программа сообразит, какой знак генерировать? Логическая инверсия запрета в разрешение хотя бы представляется возможной программно, а при упрощении – что, углы мерять? :slight_smile: “Прямо”, “лево” и “право” – совсем не очевидные вещи на многих развязках с точки зрения алгоритма.

как “подпорка” пункта 1) добавляет двойственность и возможность плодить ошибки – сам рестрикшен один, знак другой – ну ка, исправь? кто верно нарисован?
Желательно всегда приводить данные в само-защищающийся вариант – когда невозможно внутреннее противоречие этих самых данных.

По-моему dimuzz чрезмерно усложняет. Значение тега restriction= должно сооответствовать стоящему знаку, это самый очевидный вариант. Три знака запрета no_* и шесть предписаний only_* полностью покроют нужды и роутинга, и отображения.
А вот насчёт “3) допускать только один via и только в виде точки (т.е. запрет всегда описывается с точки зрения подъезжающего к перекрестку)” - полностью согласен, а то некоторые такого наворотят! Все куски путей и точки в пределах перекрёстка засовывают в “via”. Это требование прекрасно согласуется с тем фактом, что знаки 4.1.* действуют только на пересечении проезжих частей - то есть на точке в osm.

dimuzz как раз упрощает! И с чего это направление должно соответствовать знаку? Есть ещё разметка…

По хорошему - в карте должно быть только указание какие знаки стоят. Один знак - одно значение тега. А правила роутинга уже вычисляться из них.
То, что знаки 3.18.1 и 4.1.5 у нас задаются одним и тем же тегом - это неправильно.
По логике у 3.18.1 должно быть restriction=no_right_turn, а у 4.1.5 - что-то типа restriction=only_left_turn_or_straight_on

Наоборот, на карте должны быть указаны только разрешённые и запрещённые направления, неважно какие знаки стоят.

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

Знаков может и не быть. При подъезде может не оказаться знака, а справа быть “кирпич”. При этом какого знака нет, поворот направо запрещён или движение прямо и налево – не восстановить. Кроме того, конфигурация перекрёстка может быть сложной, и навигационной программе будет невозможно выяснить как применить простой знак к сложному перекрёстку. Разрешение и запрещение движения по путям через точку однозначно определяют роутинг.

Согласно ГОСТ-у должны быть. Если их нет - значит спёрли/забыли поставить и выбор что указать - на усмотрение картографа.

Дык указание точки применимости это не отменяет и роутинг точно так же однозначно определяется.

Просто поставить restriction по знаку буде там однозначное соответствие - сможет и человек и не знающий досконально ПДД.
Даже тут в ветке уже удивились про наличии связи ограничений разворота и левого поворота. А в ситуации с табличками всё ещё хуже.

Аналогично и со знаками 3.2-3.8 - почему в вики сказано ставить =no, а не =destination? По нашим ПДД как бы правильнее второе, но для первого у нас и знака такого отдельного нет (разве что кирпич с табличкой, но я таких никогда не видел).

Например, перекрёсток с пятью примыкающими дорогами. Мы едем прямо и упираемся в развилку, кроме неё есть ещё пересечение другой дорогой под 90 градусов к нам. Стоит знак “Поворот налево запрещён”. К какой дороге это относится, если одна дорога налево под 90 градусов, другая налево под 135 градусов?

К какой укажите. На местности куда лучше ориентироваться, чем с чужих слов. Может этот знак вообще относится к тому заезду на заправку слева, на которую вы не обратили внимание. :wink:

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

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

Это в нашем ПДД оно так действует.
А ты уверен, что в Зимбабве оно так же? :slight_smile:

Ну мы же трактуем перекресток в РФ, не так ли? :3

По правде говоря, необходимость использования линии в качестве via я попросту не понял :slight_smile:
Рассуждения в англоязычной вики не убедили меня в том, что запреты при пересечении дороги с разделителем (где в роли via должен выступать разрыв разделительной полосы) не сводится к “точечным” via.
Версия пока одна - хотели, как проще, а получилось то, что получилось…

Вы не поняли исходную идею. Идея была попытаться нормализовать исходные данные, приблизить их к реальному. Указание того куда применяется знак не отменяется, оно остаётся таким же, как и сейчас. Без них не обойтись, хотя бы потому что линии в карте обычно не 100% соответствуют реальным дорогам. Просто в текущей схеме вы рассматриваете всю совокупность знаков и на основании её ставите ограничения. И в 90% мест она практически такой же и останется - существенная разница будет только на сложных перекрёстках, где есть несколько знаков с табличками, потому как придётся размножать ограничения для каждой комбинации действия табличек. В таких случаях лучше ставить отдельное ограничение для каждого знака. Так почему бы не распространить этот принцип на все случаи? А чисто для роутинга даже весь текущий набор не нужен - достаточно лишь запрета проезда с ребра на ребро (как сделано в том же CityGuide).

dimuzz, как тогда предложите обозначить запрет разворота на дороге из двух oneway-линий?
Они соединены перемычкой - например, можно повернуть налево. А вот развернуться нельзя (знак запрещает).
Ну логично же, что via здесь - линия перемычки. Просто потому что from и to - это откуда и куда нельзя ехать.

Вообще-то в этом случае ограничение будет на поворот налево с перемычки…

Hind, вы удивитесь, но это действительно неправильно с точки зрения OSM, хотя пол-Европы так размечено. Скачайте файл по ссылке на XAPI с предыдущей страницы - отмеченные таким образом рестрикшены попадают в разряд мусора и выводятся, хотя не попадают в запрошенный bounding box.
Вариант Alexandr Zeinalov не подходит, т.к. поворот налево с пересекаемой дороги может быть разрешён.
Тупиковый случай.