Appearance
Use Case #11: Умный Разворот Маршрута (Smart Reverse)
1. Жизненная ситуация (Боль пользователя)
Представь: Пользователь построил красивый маршрут на 50 километров по городу и лесам. От Дома (Точка А) до Озера (Точка Б). Он смотрит на график высот и понимает: "Ого! Если ехать к озеру по этой дороге, там будет жуткий подъем в гору. А давай-ка я построю маршрут от Озера к Дому! Чтобы в эту гору не подниматься, а спускаться с нее с ветерком". Пользователь ищет на твоем сайте кнопку «🔄 Развернуть маршрут».
2. Как делают плохие сайты (Смертельная ловушка)
Ленивый программист-новичок думает: "Пфф, развернуть маршрут? Это же проще простого! Маршрут — это длинный список из 10 000 точек. Я просто переверну этот список задом наперед в коде". При таком подходе (array.reverse()) синяя линия маршрута на карте вообще не меняет своего положения. Она физически остается лежать там же, миллиметр в миллиметр.
Почему это КАТАСТРОФА в реальной жизни? Потому что в реальности дороги — это не просто линии, там есть ПДД:
- Одностороннее движение: Когда юзер ехал "Туда", улица была односторонней и он ехал по правилам. Тупо перевернув линию задом наперед, ленивый сайт заставит юзера поехать "Обратно" по этой же улице... прямо в лоб встречным машинам под знак "Кирпич"!
- Кольцевые развязки (Клумбы): Туда ты огибал кольцо правильно (направо). Если просто перевернуть файл, обратно ты поедешь по кольцу налево, навстречу потоку машин.
- Разделенные шоссе: Перевернутый маршрут поведет тебя по левой (встречной) полосе магистрали, с другой стороны от бетонного отбойника.
Если юзер скачает такой «перевернутый» GPX-файл и слепо поверит ему в лесу или городе — он попадет в аварию. А виноват будет твой файл.
3. Как это ДОЛЖНО работать (Инструкция для программиста)
Кнопка «Развернуть» не должна просто переворачивать готовый текст в файле. Она должна заново перестроить путь!
Пошаговый план для кода:
- Сайт берет из памяти только те Ключевые Флажки (Waypoints), куда юзер сам осознанно кликал мышкой. Например, их было всего три:
[1. Дом] ➡️ [2. Лес] ➡️ [3. Озеро]. - Программа меняет порядок этих Флажков на обратный:
[1. Озеро] ➡️ [2. Лес] ➡️ [3. Дом]. - Теперь сайт УДАЛЯЕТ старую синюю линию (готовая линия — это мертвый результат).
- Сайт отправляет этот новый список Флажков нашему умному серверу роутинга со словами: "А ну-ка, проложи мне АБСОЛЮТНО НОВЫЙ маршрут через эти три места!".
- Сервер (который знает знаки ПДД) строит новую легальную дорогу.
- Новая правильная синяя линия рисуется на экране.
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°).