Backend:
- Миграция gps_tracks_001_init.sql: таблицы tracks + pipeline_runs
- Пакет src/api/gps_tracks/: models, db (WAL+upsert с dedup), dedup
(bbox+length+date bucket-hash), mvt (LRU-кэш 1024 тайла), endpoint
(GET /api/gps-tracks, GET /api/gps-tracks/tiles/{z}/{x}/{y}.mvt,
GET /api/gps-tracks/health, POST /api/gps-tracks/cache/clear), config
- Парсеры: osm (split_bbox, haversine, defusedxml XXE-защита),
enduro_russia + ttrails — заглушки (ADR-010/011 proposed, блокированы)
- Licensing guard: pipeline проверяет status ADR-файла до запуска источника
- scripts/gps_collect.py: CLI с --region/--source/--dry-run/--gc
Frontend:
- src/web/gps_tracks.js: двухрежимный слой (MVT z≤11, GeoJSON z≥12),
debounced fetch + AbortController, фильтры активности/источника,
цветовая палитра by-source/by-activity, halo на спутнике, popup трека,
restorePublicTracksState(), localStorage persistence
- index.html: чекбокс «Публичные треки» в terrain-popup, #sheet-gps-filters
- app.css: .terrain-link-btn, .gps-filter-grid, .track-popup
- app.js: вызов restorePublicTracksState() в rebuildMapOverlays(),
applyGpsHaloVisibility() в applyBaseLayer()
Конфиги:
- config/gps_sources.yaml: osm (enabled), enduro_russia/ttrails (disabled)
- config/gps_regions.yaml: ЦФО+Чувашия (enabled), Кавказ (disabled)
Docker:
- gps-collector service с profiles: [batch]
Тесты: 48 новых тестов (unit + integration), 125/125 pass
Refs: ET-008
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
35 lines
1.3 KiB
YAML
35 lines
1.3 KiB
YAML
sources:
|
||
- id: osm
|
||
name: "OSM Public GPS Traces"
|
||
enabled: true
|
||
license_adr: "docs/work-items/ET-008/06-adr/ADR-009-osm-licensing.md"
|
||
base_url: "https://api.openstreetmap.org/api/0.6"
|
||
rate_limit_sec: 1
|
||
user_agent: "enduro-trails/1.0 (+https://openclaw.mva154.duckdns.org/enduro/)"
|
||
attribution: "© OpenStreetMap contributors (ODbL)"
|
||
parser_module: "src.api.gps_tracks.sources.osm"
|
||
save_user_field: true
|
||
external_url_template: "https://www.openstreetmap.org/user/{user}/traces/{external_id_numeric}"
|
||
|
||
- id: enduro_russia
|
||
name: "EnduroRussia.ru"
|
||
enabled: false
|
||
license_adr: "docs/work-items/ET-008/06-adr/ADR-010-enduro-russia-licensing.md"
|
||
base_url: "https://enduro-russia.ru"
|
||
rate_limit_sec: 5
|
||
user_agent: "enduro-trails/1.0 (+https://openclaw.mva154.duckdns.org/enduro/)"
|
||
attribution: "EnduroRussia.ru"
|
||
parser_module: "src.api.gps_tracks.sources.enduro_russia"
|
||
save_user_field: false
|
||
|
||
- id: ttrails
|
||
name: "Тропинки.ру"
|
||
enabled: false
|
||
license_adr: "docs/work-items/ET-008/06-adr/ADR-011-ttrails-licensing.md"
|
||
base_url: "https://ttrails.ru"
|
||
rate_limit_sec: 5
|
||
user_agent: "enduro-trails/1.0 (+https://openclaw.mva154.duckdns.org/enduro/)"
|
||
attribution: "ttrails.ru"
|
||
parser_module: "src.api.gps_tracks.sources.ttrails"
|
||
save_user_field: false
|