# Enduro Trails — Prototype

FastAPI + MapLibre GL JS карта грунтовых дорог ЦФО + Чувашия.  
Векторные тайлы (MVT) из SQLite/Spatialite, без внешних тайл-серверов.

## Быстрый старт

### Требования

- Docker + Docker Compose
- ~1.5 GB свободного места для БД

### Запуск (если БД уже есть)

```bash
cd tasks/enduro-trails
docker compose up enduro-trails
```

Карта откроется на `http://localhost:5558`

### Первичная загрузка данных (с нуля)

```bash
# Скачать PBF и распарсить в SQLite (~30-60 мин)
docker compose --profile init up data-init

# Затем запустить сервер
docker compose up enduro-trails
```

## Структура

```
prototype/
  app.py          — FastAPI сервер, endpoint /api/tiles/{z}/{x}/{y}.mvt
  Dockerfile      — образ для сервера
  requirements.txt
  static/
    index.html    — HTML-разметка
    app.js        — вся логика карты (MapLibre GL)
    app.css       — стили
    style.json    — стиль карты (слои, цвета)

scripts/
  parse.py              — парсинг OSM PBF → SQLite
  requirements-parse.txt — зависимости только для парсинга
  smoke_check.py        — проверка схемы БД и API
```

## API

| Endpoint | Описание |
|----------|----------|
| `GET /` | Веб-карта |
| `GET /api/tiles/{z}/{x}/{y}.mvt` | Векторный тайл (protobuf) |
| `GET /api/health` | Статус сервера и БД |
| `GET /api/route` | Роутинг А→Б через OSRM. Параметры: `from_lon`, `from_lat`, `to_lon`, `to_lat` |
| `GET /api/cache/clear` | Принудительный сброс тайл-кэша |

Валидация: z должен быть 0–22, x/y в пределах `2^z`. Иначе 400.

## Слои карты

| ID слоя | Описание |
|---------|----------|
| `trails-track` | Грунтовки (highway=track) |
| `trails-asphalt` | Асфальт (highway=track, surface=asphalt) |
| `trails-path-bridleway` | Тропы и bridleway |
| `poi-circles` | POI точки |
| `poi-labels` | Подписи POI |
| `osm-base` | OSM подложка |

## Smoke check

```bash
# Против живого сервера
API_BASE=http://82.22.50.71:5558 python scripts/smoke_check.py

# Локально (нужен доступ к БД)
DATA_PATH=/data/centralfederal.sqlite API_BASE=http://localhost:5558 python scripts/smoke_check.py
```

## OSRM роутинг

Роутинг работает через внешний OSRM-контейнер. По умолчанию `OSRM_URL=http://172.22.0.1:5559` — это Docker host gateway. Профиль: `../osrm/enduro.lua`.

## Переменные окружения

| Переменная | По умолчанию | Описание |
|------------|-------------|----------|
| `DATA_PATH` | `../data/centralfederal.sqlite` | Путь к SQLite БД |
| `PORT` | `5558` | Порт сервера |
| `OSRM_URL` | `http://172.22.0.1:5559` | URL OSRM-сервера |

## Деплой (обновление файлов без пересборки)

```bash
PASS='motoZ@yaz2010'
docker cp prototype/app.py enduro-trails:/app/app.py
docker cp prototype/static/index.html enduro-trails:/app/static/index.html
docker cp prototype/static/app.js enduro-trails:/app/static/app.js
docker cp prototype/static/app.css enduro-trails:/app/static/app.css
docker restart enduro-trails
```
