85 lines
5.5 KiB
Markdown
85 lines
5.5 KiB
Markdown
---
|
||
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 браузера
|