Enduro Trails — Prototype
FastAPI + MapLibre GL JS карта грунтовых дорог ЦФО + Чувашия.
Векторные тайлы (MVT) из SQLite/Spatialite, без внешних тайл-серверов.
Быстрый старт
Требования
- Docker + Docker Compose
- ~1.5 GB свободного места для БД
Запуск (если БД уже есть)
cd tasks/enduro-trails
docker compose up enduro-trails
Карта откроется на http://localhost:5558
Первичная загрузка данных (с нуля)
# Скачать 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
# Против живого сервера
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-сервера |
Деплой (обновление файлов без пересборки)
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