46 lines
2.8 KiB
Markdown
46 lines
2.8 KiB
Markdown
# Архитектура Enduro Trails
|
||
|
||
## Обзор
|
||
Веб-приложение для планирования эндуро-маршрутов с визуализацией рельефа.
|
||
|
||
## Компоненты
|
||
- **Frontend** — MapLibre GL JS, vanilla JS (ES modules)
|
||
- **Backend API** — FastAPI (Python 3.12), uvicorn
|
||
- **Tile Server** — статические raster tiles (PNG), раздаются через FastAPI/nginx
|
||
- **Routing Engine** — OSRM с кастомным эндуро-профилем
|
||
- **Database** — SQLite + Spatialite (точки интереса, маршруты)
|
||
|
||
## Слои карты
|
||
- Base map: **Схема** (OpenStreetMap raster) либо **Спутник** (Esri World Imagery raster) — переключается в UI (ET-007 / ADR-004)
|
||
- Hillshade (рельеф с тенями)
|
||
- TRI (Terrain Ruggedness Index — сложность рельефа)
|
||
- Hypsometric (высотная раскраска)
|
||
- Trails (маршруты из OSM)
|
||
|
||
## Внешние тайл-провайдеры
|
||
|
||
Клиент (браузер) обращается напрямую к двум внешним raster-tile сервисам.
|
||
Сервер mva154 эти тайлы не проксирует и не кэширует.
|
||
|
||
| Провайдер | Назначение | URL | Активация | API-ключ |
|
||
|-----------|-----------|-----|-----------|----------|
|
||
| OpenStreetMap | Базовый слой «Схема» | `https://tile.openstreetmap.org/{z}/{x}/{y}.png` | всегда (default подложка) | нет |
|
||
| Esri World Imagery | Базовый слой «Спутник» | `https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}` | лениво — только при включении «Спутник» пользователем (ET-007) | нет |
|
||
|
||
Атрибуция обоих провайдеров выводится MapLibre автоматически при
|
||
активном source.
|
||
|
||
## Деплой
|
||
Один Docker Compose на mva154. Nginx проксирует /enduro/ на контейнер.
|
||
|
||
## Клиентские модули (src/web/)
|
||
|
||
| Модуль | Описание | Work Item |
|
||
|--------|----------|-----------|
|
||
| `app.js` | Главный модуль: MapLibre, роутинг, UI, тёмная тема | PH-1..PH-6 |
|
||
| `units.js` | Централизованный форматтер расстояний (км/мили), localStorage, событие `unitchange` | ET-005 |
|
||
| `gpx.js` | GPX 1.1 парсер (DOMParser), рендеринг треков/waypoints, canvas-профиль высот, `rebuildMapOverlays()` | ET-006 |
|
||
| `style.json` | MapLibre стиль (светлая тема) | PH-1/PH-5 |
|
||
| `style-dark.json` | MapLibre стиль (тёмная тема) | PH-5 |
|
||
|