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

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

## AC-01: Загрузка файла через кнопку

```gherkin
Feature: Загрузка GPX-файла

  Scenario: Успешная загрузка одного файла
    Given пользователь находится на карте
    When пользователь нажимает кнопку «Загрузить GPX» в правой панели
    And выбирает валидный GPX-файл размером < 50 МБ
    Then файл парсится без ошибок
    And трек отображается на карте цветной линией
    And карта выполняет fit bounds по треку
    And в панели GPX-треков появляется запись с именем файла

  Scenario: Файл превышает лимит
    Given пользователь находится на карте
    When пользователь выбирает GPX-файл размером > 50 МБ
    Then показывается toast «Файл слишком большой (макс. 50 МБ)»
    And трек не загружается

  Scenario: Невалидный файл
    Given пользователь находится на карте
    When пользователь выбирает файл с невалидным XML
    Then показывается toast «Не удалось прочитать GPX-файл»
    And трек не загружается

  Scenario: Пустой GPX (без треков и waypoints)
    Given пользователь находится на карте
    When пользователь выбирает GPX-файл без <trk> и без <wpt>
    Then показывается toast «GPX-файл не содержит данных»
```

## AC-02: Визуализация трека

```gherkin
Feature: Отрисовка трека на карте

  Scenario: Один трек в файле
    Given загружен GPX-файл с одним треком
    Then на карте отображается линия трека
    And линия имеет цвет из палитры
    And толщина линии 4px

  Scenario: Несколько треков в одном файле
    Given загружен GPX-файл с 3 треками
    Then на карте отображаются 3 линии
    And все линии одного цвета (цвет файла)
    And в панели — одна запись (имя файла) с 3 треками внутри

  Scenario: Несколько файлов
    Given загружены 3 GPX-файла
    Then на карте отображаются треки из всех файлов
    And каждый файл имеет свой цвет из палитры
    And в панели — 3 записи
```

## AC-03: Waypoints

```gherkin
Feature: Отображение waypoints

  Scenario: Waypoints с именами
    Given загружен GPX-файл с waypoints, у которых есть <name>
    Then на карте отображаются маркеры в позициях waypoints
    And рядом с каждым маркером отображается имя

  Scenario: Waypoints без имён
    Given загружен GPX-файл с waypoints без <name>
    Then на карте отображаются маркеры без подписей

  Scenario: Файл без waypoints
    Given загружен GPX-файл без <wpt>
    Then маркеры waypoints не отображаются
    And трек отображается нормально
```

## AC-04: Fit bounds

```gherkin
Feature: Автоцентрирование карты

  Scenario: Карта центрируется на загруженном треке
    Given карта показывает произвольную область
    When пользователь загружает GPX-файл
    Then карта выполняет fit bounds по всем точкам файла
    And padding составляет 50px со всех сторон

  Scenario: Загрузка второго файла
    Given на карте уже есть загруженный трек
    When пользователь загружает второй GPX-файл
    Then карта выполняет fit bounds только по второму файлу
```

## AC-05: Удаление трека

```gherkin
Feature: Удаление загруженного трека

  Scenario: Удаление трека из панели
    Given загружены 2 GPX-файла
    When пользователь нажимает кнопку удаления (✕) у первого трека
    Then первый трек исчезает с карты (линия + waypoints)
    And первый трек исчезает из панели
    And второй трек остаётся на карте

  Scenario: Удаление активного трека
    Given загружены 2 GPX-файла, второй — активный (показана статистика)
    When пользователь удаляет второй трек
    Then профиль высот и статистика скрываются
    And первый трек остаётся на карте
    And первый трек не становится автоматически активным

  Scenario: Удаление последнего трека
    Given загружен 1 GPX-файл
    When пользователь удаляет его
    Then карта пуста (нет GPX-слоёв)
    And панель GPX показывает пустое состояние
```

## AC-06: Панель управления (sheet-gpx)

```gherkin
Feature: Панель GPX-треков

  Scenario: Открытие панели при загрузке
    Given панель GPX закрыта
    When пользователь загружает первый GPX-файл
    Then панель GPX открывается автоматически

  Scenario: Переключение через toolbar
    Given панель GPX закрыта
    When пользователь нажимает кнопку «GPX» в нижнем тулбаре
    Then панель GPX открывается

  Scenario: Выбор активного трека
    Given загружены 3 GPX-файла
    When пользователь тапает на второй трек в списке
    Then второй трек выделяется визуально
    And показывается его статистика и профиль высот
```

## AC-07: Профиль высот

```gherkin
Feature: Профиль высот

  Scenario: Трек с данными высот
    Given выбран активный трек с данными <ele>
    Then в панели отображается график профиля высот
    And ось X — расстояние (км)
    And ось Y — высота (м)
    And линия графика — цвет трека

  Scenario: Трек без данных высот
    Given выбран активный трек без данных <ele>
    Then вместо графика отображается текст «Данные высот отсутствуют»

  Scenario: Интерактивность профиля
    Given отображается профиль высот
    When пользователь наводит курсор (или тапает) на точку графика
    Then показывается tooltip с высотой и расстоянием
    And на карте подсвечивается соответствующая точка трека
```

## AC-08: Статистика трека

```gherkin
Feature: Статистика трека

  Scenario: Полная статистика (с высотами)
    Given выбран активный трек с данными <ele>
    Then отображаются: длина (км), набор высоты (м), сброс высоты (м), мин. высота (м), макс. высота (м)

  Scenario: Частичная статистика (без высот)
    Given выбран активный трек без данных <ele>
    Then отображается только длина (км)
    And остальные поля показывают «—»
```

## AC-09: Интерактивность на карте

```gherkin
Feature: Клик по треку на карте

  Scenario: Выбор трека кликом
    Given на карте отображаются 3 трека из разных файлов
    When пользователь кликает на линию второго трека
    Then второй трек становится активным в панели
    And показывается его статистика и профиль высот
```

## AC-10: Совместимость с другими режимами

```gherkin
Feature: Параллельная работа с роутингом

  Scenario: GPX + активный маршрут
    Given пользователь построил маршрут через OSRM
    And загрузил GPX-файл
    Then оба отображаются на карте одновременно
    And маршрут OSRM визуально выше GPX-трека
    And оба интерактивны

  Scenario: GPX + режим разведки
    Given пользователь в режиме разведки
    When загружает GPX-файл
    Then трек отображается на карте
    And режим разведки продолжает работать
```

## AC-12: Сохранение при переключении стиля карты

```gherkin
Feature: Сохранение GPX-треков при смене стиля карты

  Scenario: Переключение тёмной темы
    Given загружен GPX-трек и отображается на карте
    When пользователь переключает тёмную тему
    Then трек остаётся на карте после смены стиля
    And waypoints остаются на карте
    And активный трек, его статистика и профиль высот сохраняются

  Scenario: Переключение слоёв рельефа
    Given загружены 2 GPX-трека
    When пользователь включает или выключает слой рельефа (hillshade / TRI)
    Then оба трека остаются на карте с прежними цветами
    And z-order GPX-слоёв сохраняется (ниже маршрута OSRM)
```

## AC-11: Индикатор загрузки

```gherkin
Feature: Индикатор при парсинге

  Scenario: Большой файл
    Given пользователь выбирает GPX-файл > 10 МБ
    Then показывается индикатор загрузки (spinner)
    And после завершения парсинга индикатор скрывается
    And трек отображается на карте
```
