4.9 KiB
type, work_item_id, version, status, created_at, authors
| type | work_item_id | version | status | created_at | authors | |
|---|---|---|---|---|---|---|
| data-requirements | ET-006 | 1 | approved | 2026-05-22 |
|
Data Requirements — ET-006
1. Сводка: персистентных данных нет
ET-006 не вводит серверного хранения. Все данные GPX-треков живут только в памяти браузера на время сессии (BRD §3 «Out of scope», TRZ NF-04).
| Аспект | Решение |
|---|---|
| Схема БД (SQLite/Spatialite) | без изменений |
Миграции (migrations/) |
нет |
| Серверное хранение треков | нет |
localStorage / sessionStorage |
не используется (объём данных велик) |
| Время жизни данных | сессия; при перезагрузке страницы — потеря |
2. Входные данные
- Формат: GPX 1.1, namespace
http://www.topografix.com/GPX/1/1(с fallback на парсинг без namespace — TRZ REQ-F-02, тест U-08). - Источник: локальный файл, выбранный пользователем
(
<input type="file" accept=".gpx" multiple>). - Ограничение размера: ≤ 50 МБ на файл (TRZ REQ-F-03).
- Извлекаемые сущности:
<trk>/<trkseg>/<trkpt>,<wpt>,<rte>(трактуется как трек).
3. Внутренняя модель (in-memory)
Каноническая модель — window.gpxTracks (массив загруженных файлов),
определена в TRZ §4. Владеет ею gpx.js (ADR-002):
window.gpxTracks = [
{
id: 'gpx-<timestamp>', // уникальный ID
filename: 'morning_ride', // имя файла без расширения
color: '#e6194b', // цвет из палитры (8 цветов, цикл)
tracks: [
{
name: 'Morning Ride',
points: [[lon, lat, ele, time], ...],
stats: { distanceKm, elevGain, elevLoss, eleMin, eleMax }
}
],
waypoints: [ { lon, lat, name, ele } ],
sourceId: 'gpx-source-<timestamp>',
layerId: 'gpx-layer-<timestamp>',
waypointLayerId: 'gpx-wpt-<timestamp>'
}
];
Замечания для разработки:
ele/timeопциональны. При отсутствии<ele>—ele = null, поля статистики высот =null(TRZ REQ-F-11, тесты U-05, U-14).window.gpxTracks— единственный источник правды; объекты карты (source / layer / маркеры) производны от него и пересоздаются приmap.setStyle()черезrebuildGpxOverlays()(REQ-F-13, ADR-002).- Дополнительно потребуется состояние «активный трек» (для статистики и
профиля высот) — хранится в
gpx.js, должно переживать смену стиля.
4. Объём данных в памяти
Предельный файл 50 МБ ≈ 500K+ точек. Ориентировочный транзиентный профиль:
| Стадия | Память (порядок) |
|---|---|
| Строка файла | ~50 МБ |
DOM после parseFromString |
~150–300 МБ (освобождается после конвертации) |
Модель points + GeoJSON source |
десятки МБ на файл |
TRZ REQ-F-07 не ограничивает число одновременных треков. Накопление
нескольких предельных файлов может исчерпать память вкладки на слабом
устройстве — см. риск R-3 в 10-tech-risks.md.
5. Приватность
GPX-файлы могут содержать персональные данные (координаты поездок,
метки времени <time>). В ET-006 эти данные:
- не передаются на сервер (парсинг и хранение клиентские);
- не сохраняются между сессиями (нет БД, нет
localStorage).
Следствие: серверных обязательств по хранению/удержанию/удалению персональных данных ET-006 не порождает. Это сознательное проектное свойство, а не упущение.
6. Выходные данные
ET-006 не экспортирует и не записывает данные (экспорт обратно в GPX — out of scope, BRD §3). Профиль высот и статистика — производные расчёты, существуют только в UI.