Все ниже сказанное относится к поворотам направо в странах с правосторонним движением, для поворотов налево все строго симметрично. Инструкция “продолжайте движение” не отображается клиентом, но показывается с помощью Livemap Navigation Browser Addon
Определения
- s-in — участок дороги перед перекрестком (с точки зрения проезжающего)
- s-out — участок дороги после перекрестка (с точки зрения проезжающего)
- s1,s2,…sN — все участки дорог примыкающие к перекрестку
- “естественное продолжение” — участок дороги после перекрестка, для которого при подъезде со стороны 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
Алгоритм
Алгоритм выбора инструкций проходит последовательно по списку условий, и как только условие выполняется, происходит выбор инструкции и алгоритм прекращает свое действие.
- Если у перекрестка только 2 участка: инструкция — “продолжайте движение”
При определенных условиях Т-перекресток может быть рассмотрен, как перекресток только с двумя участками (см. ниже) - Если угол между естественным продолжением и s-out больше 45 градусов (и меньше 180) инструкция — “поверните направо”
В предположении, что на хайвеях углы между участками меньше 45 градусов - Если s-out считается естественным продолжением s-in, то инструкция — “продолжайте движение”
- Если s-in хайвей, а s-out — нет, то инструкция — “съезд справа”
- Если s-in рампа, а s-out ни хайвей, ни рампа, то инструкция — “съезд справа”
- Во всех остальных случаях инструкция — “держитесь правее”
Т-перекрести и дороги с односторонним движением
В некоторых случаях перекресток создан более чем двумя участками дорог, но маршрутный сервер рассматривает только два из них при конкретном пересечении перекрестка и поэтому инструкция будет “продолжайте движение”.
В следующем примере перекресток залочен (все подходящие к нему участки дороги имеют статус “locked”) и при движении с севера единственно возможный поворот направо будет считаться “естественным продолжением”, а значит, инструкция будет “продолжайте движение”.
Как этим пользоваться
Вот конкретный перекресток трех улиц (с севера подходит улица Воровского, на северо-запад уходит улица Тургенева и на юго-восток — улица Хмельницкого):
Воровского-Тургенева — главная, Хмельницкого — второстепенная. Когда я ехал через этот перекресток в первый раз, моим штурманом был человек, который ни слова не сказал, что и как дальше, но по знакам и разметке было вполне естественно сделать поворот с Тургенева на Воровского, как-будто этого перекрестка не было вообще. Года через три, там же, уже успев все позабыть, я ехал с навигатором и он предложил мне повернуть направо. Я был несколько растерян, так как справа дорог вроде не было, но пару секунд хватило понять, какой маневр навигатор посчитал поворотом направо. И когда у меня у меня появились права на этот участок дороги, я так и нарисовал:
В таком виде, при движении с Воровского на Тургенева будет сформирована подсказка “поверните направо”, так как однозначного “естественного продолжения” нет — углы между Воровского и Хмельницкого и между Воровского и Тургенева практически одинаковы.
А когда таки проехал с Вейзом по этому маршруту, опять на пару секунд задумался: “где же здесь справа?”. И в результате перерисовал:
Теперь подсказка — “продолжайте движение” (т.е. отсутствие таковой в клиенте), так как есть “естественное продолжение” — в данном случае, Воровского и Тургенева имеют одинаковый тип дороги, отличный от Хмельницкого и угол на перекрестке между Воровского и Тургенева практически отсутствует.
Понятно, что это пример как управлять подсказками, а не как правильно рисовать. Как правильно рисовать — понятие достаточно субъективное и в каждом конкретном случае требует своего подхода.