---
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 браузера
