Как Waze определяет инструкции на перекрестках


Все ниже сказанное относится к поворотам направо в странах с правосторонним движением, для поворотов налево все строго симметрично. Инструкция “продолжайте движение” не отображается клиентом, но показывается с помощью Livemap Navigation Browser Addon

Определения

  1. s-in — участок дороги перед перекрестком (с точки зрения проезжающего)
  2. s-out — участок дороги после перекрестка (с точки зрения проезжающего)
  3. s1,s2,…sN — все участки дорог примыкающие к перекрестку
  4. “естественное продолжение” — участок дороги после перекрестка, для которого при подъезде со стороны s-in естественно считать, что направление движения не меняется.

Для того, что бы определить, является ли s-out “естественным продолжением” s-in, проверяются следующие условия:

  • если s-out имеет такой же тип дороги и название как и s-in он выбирается “естественным продолжением”
  • в ином случае рассматриваются s1, s2,.., sN (за исключением s-in и s-out). Один из них выбирается более естественным, чем s-out, при выполнении следующих условий:
    • этот участок дороги лучше соотносится с s-in, чем s-out (имеет то же название, что s-in, а s-out — нет,  имеет тот же тип дороги, что s-in, а s-out — нет, при этом имя дороги имеет приоритет над типом)
    • угол между этим участком и s-in меньше, чем угол между s-in и s-out

Алгоритм

Алгоритм выбора инструкций проходит последовательно по списку условий, и как только условие выполняется, происходит выбор инструкции и алгоритм прекращает свое действие.

  1. Если у перекрестка только 2 участка:  инструкция — “продолжайте движение”
    При определенных условиях Т-перекресток может быть рассмотрен, как перекресток только с двумя участками (см. ниже)
  2. Если угол между естественным продолжением и s-out больше 45 градусов (и меньше 180) инструкция — “поверните направо”
    В предположении, что на хайвеях углы между участками меньше 45 градусов
  3. Если s-out считается естественным продолжением s-in, то инструкция — “продолжайте движение”
  4. Если s-in хайвей, а s-out — нет, то инструкция — “съезд справа”
  5. Если s-in рампа, а s-out ни хайвей, ни рампа, то инструкция — “съезд справа”
  6. Во всех остальных случаях инструкция — “держитесь правее”

Т-перекрести и дороги с односторонним движением

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

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

Как этим пользоваться

Вот конкретный перекресток трех улиц (с севера подходит улица Воровского, на северо-запад уходит улица Тургенева и на юго-восток  — улица Хмельницкого):

Воровского-Тургенева — главная, Хмельницкого — второстепенная. Когда я ехал через этот перекресток в первый раз, моим штурманом был человек, который ни слова не сказал, что и как дальше, но по знакам и разметке было вполне естественно сделать поворот с Тургенева на Воровского, как-будто этого перекрестка не было вообще. Года через три, там же, уже успев все позабыть, я ехал с навигатором и он предложил мне повернуть направо. Я был несколько растерян, так как справа дорог вроде не было, но пару секунд хватило понять, какой маневр навигатор посчитал поворотом направо. И когда у меня у меня появились права на этот участок дороги, я так и нарисовал:

В таком виде, при движении с Воровского на Тургенева будет сформирована подсказка “поверните направо”, так как однозначного “естественного продолжения” нет — углы между Воровского и Хмельницкого и между Воровского и Тургенева практически одинаковы.

А когда таки проехал с Вейзом по этому маршруту, опять на пару секунд задумался:  “где же здесь справа?”.  И в результате перерисовал:

Теперь подсказка — “продолжайте движение” (т.е. отсутствие таковой в клиенте), так как есть “естественное продолжение” — в данном случае, Воровского и Тургенева имеют одинаковый тип дороги, отличный от Хмельницкого и угол на перекрестке между Воровского и Тургенева практически отсутствует.

Понятно, что это пример как управлять подсказками, а не как правильно рисовать. Как правильно рисовать — понятие достаточно субъективное и в каждом конкретном случае требует своего подхода.