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