Skip to content

Use Case #11: Умный Разворот Маршрута (Smart Reverse)

1. Жизненная ситуация (Боль пользователя)

Представь: Пользователь построил красивый маршрут на 50 километров по городу и лесам. От Дома (Точка А) до Озера (Точка Б). Он смотрит на график высот и понимает: "Ого! Если ехать к озеру по этой дороге, там будет жуткий подъем в гору. А давай-ка я построю маршрут от Озера к Дому! Чтобы в эту гору не подниматься, а спускаться с нее с ветерком". Пользователь ищет на твоем сайте кнопку «🔄 Развернуть маршрут».


2. Как делают плохие сайты (Смертельная ловушка)

Ленивый программист-новичок думает: "Пфф, развернуть маршрут? Это же проще простого! Маршрут — это длинный список из 10 000 точек. Я просто переверну этот список задом наперед в коде". При таком подходе (array.reverse()) синяя линия маршрута на карте вообще не меняет своего положения. Она физически остается лежать там же, миллиметр в миллиметр.

Почему это КАТАСТРОФА в реальной жизни? Потому что в реальности дороги — это не просто линии, там есть ПДД:

  • Одностороннее движение: Когда юзер ехал "Туда", улица была односторонней и он ехал по правилам. Тупо перевернув линию задом наперед, ленивый сайт заставит юзера поехать "Обратно" по этой же улице... прямо в лоб встречным машинам под знак "Кирпич"!
  • Кольцевые развязки (Клумбы): Туда ты огибал кольцо правильно (направо). Если просто перевернуть файл, обратно ты поедешь по кольцу налево, навстречу потоку машин.
  • Разделенные шоссе: Перевернутый маршрут поведет тебя по левой (встречной) полосе магистрали, с другой стороны от бетонного отбойника.

Если юзер скачает такой «перевернутый» GPX-файл и слепо поверит ему в лесу или городе — он попадет в аварию. А виноват будет твой файл.


3. Как это ДОЛЖНО работать (Инструкция для программиста)

Кнопка «Развернуть» не должна просто переворачивать готовый текст в файле. Она должна заново перестроить путь!

Пошаговый план для кода:

  1. Сайт берет из памяти только те Ключевые Флажки (Waypoints), куда юзер сам осознанно кликал мышкой. Например, их было всего три: [1. Дом] ➡️ [2. Лес] ➡️ [3. Озеро].
  2. Программа меняет порядок этих Флажков на обратный: [1. Озеро] ➡️ [2. Лес] ➡️ [3. Дом].
  3. Теперь сайт УДАЛЯЕТ старую синюю линию (готовая линия — это мертвый результат).
  4. Сайт отправляет этот новый список Флажков нашему умному серверу роутинга со словами: "А ну-ка, проложи мне АБСОЛЮТНО НОВЫЙ маршрут через эти три места!".
  5. Сервер (который знает знаки ПДД) строит новую легальную дорогу.
  6. Новая правильная синяя линия рисуется на экране.

4. В чем магия для юзера (Что он увидит на экране)

Когда юзер нажмет кнопку 🔄, линия на карте должна чуть-чуть "пошевелиться". Там, где была односторонняя улица, новая линия соскочит с нее и пройдет по соседней параллельной улице (где ехать разрешено). На кольце линия перепрыгнет на правильную сторону дороги.

Юзер увидит это и поймет: "Вау, этот сайт умный, он думает о правилах движения, ему можно доверять на 100%".


Эпики и Задачи

Epic 1: Архитектура Smart Reverse

  • Task 1.1: Добавить кнопку реверса в панель управления маршрутом.
  • Task 1.2: В экшене reverseRoute стора извлекать массив пользовательских маркеров (waypoints), делать его реверс, и вызывать функцию calculateRoute(reversedWaypoints).
  • Task 1.3: Очищать старый массив routeGeometry и elevationProfile только после успешного получения ответа от сервера (для плавного UI без морганий).
  • Task 1.4 (Интеграция с Use Case #7): Гарантировать, что при реверсе маршрута все вычисленные "Лево/Право" азимуты для POI-сайдквестов пересчитываются заново (так как точка обзора изменилась на 180°).