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

85 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
type: brd
work_item_id: ET-006
title: "BRD: Загрузка и визуализация GPX-треков"
version: 2
status: approved
created_at: 2026-05-22
updated_at: 2026-05-22
authors:
- "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 браузера