Files
enduro-trails/docs/work-items/ET-006/01-brd.md

5.5 KiB
Raw Blame History

type, work_item_id, title, version, status, created_at, updated_at, authors
type work_item_id title version status created_at updated_at authors
brd ET-006 BRD: Загрузка и визуализация GPX-треков 2 approved 2026-05-22 2026-05-22
agent:analyst

BRD — ET-006: Загрузка и визуализация GPX-треков

1. Цель

Дать пользователю возможность загрузить GPX-файл с треком и увидеть его на карте: линию маршрута, waypoints, профиль высот и статистику. Это позволяет визуально оценить чужой или ранее записанный трек перед поездкой.

2. Контекст

  • Приложение уже умеет строить маршруты через OSRM и экспортировать их в GPX (кнопка «Скачать GPX» в sheet-route).
  • Обратная операция — импорт GPX — отсутствует.
  • Фаза PH-3 (Smart Route) в roadmap включает работу с GPX.
  • Фронтенд: MapLibre GL JS + vanilla JS, без фреймворков.
  • Backend-изменения не требуются — парсинг GPX происходит на клиенте.

3. Scope

In scope

# Функция
F-01 Кнопка загрузки GPX в тулбаре карты
F-02 Парсинг GPX 1.1 на клиенте (XML → GeoJSON)
F-03 Поддержка нескольких треков в одном файле
F-04 Отрисовка линии трека на карте (каждый трек — свой цвет)
F-05 Отображение waypoints из GPX как маркеров с именами
F-06 Fit bounds — карта центрируется на загруженном треке
F-07 Загрузка нескольких файлов (треки накапливаются)
F-08 Удаление отдельного трека
F-09 Панель управления треками (список, цвет, удаление)
F-10 Профиль высот выбранного трека
F-11 Статистика трека: длина, набор высоты, сброс высоты, мин/макс высота
F-12 Лимит размера файла: 50 МБ
F-13 Сохранение GPX-слоёв при переключении стиля карты (тёмная тема / рельеф)

Out of scope

  • Сохранение треков на сервер / в БД
  • Редактирование трека (обрезка, склейка)
  • Конвертация из других форматов (KML, FIT, TCX)
  • Упрощение (simplify) точек трека
  • Экспорт загруженного трека обратно в GPX
  • Роутинг по загруженному треку (snap to road)

4. Метрики успеха

Метрика Критерий
Загрузка файла Файл до 50 МБ загружается и парсится без ошибок за ≤ 3 сек (на среднем устройстве)
Визуализация Трек отображается на карте как цветная линия
Waypoints Маркеры с именами видны на карте
Fit bounds Карта автоматически подстраивает zoom/center под трек
Множественные треки 5+ треков отображаются одновременно, различимы по цвету
Удаление Удалённый трек исчезает с карты и из панели
Профиль высот Отображается корректный график высот для выбранного трека
Статистика Длина, набор/сброс высоты отображаются корректно
Сохранение при смене стиля GPX-треки остаются на карте после переключения тёмной темы / слоёв рельефа
Не ломает существующий функционал Роутинг, рельеф, POI, линейка работают как прежде

5. Риски

Риск Вероятность Влияние Митигация
Большой GPX (50 МБ, 500K+ точек) тормозит рендеринг Средняя Среднее Использовать GeoJSON source + line layer (MapLibre оптимизирует); при необходимости — Web Worker для парсинга
GPX без данных высот → профиль пустой Средняя Низкое Показать сообщение «Данные высот отсутствуют»
Невалидный GPX → ошибка парсинга Низкая Низкое Показать пользователю понятное сообщение об ошибке
Конфликт цветов треков с цветами маршрута OSRM Низкая Низкое Использовать отдельную палитру, отличную от цветов роутинга

6. Зависимости

  • Нет внешних зависимостей
  • Только фронтенд (vanilla JS + MapLibre GL JS)
  • Парсинг XML: нативный DOMParser браузера