26 lines
1.9 KiB
Markdown
26 lines
1.9 KiB
Markdown
# 2026-09-20 — Тайловый сервер на C#
|
||
|
||
Собрано с нуля: ASP.NET Core 8, Clean Architecture.
|
||
|
||
## Что сделано
|
||
|
||
- Воркер `MapSyncHostedService`: cron раз в сутки (`0 3 * * *` UTC) + прогон при старте.
|
||
- Для каждого extract из `TileServer:Extracts` (и `data/extracts.json`): скачивание `.osm.pbf` с Geofabrik (If-None-Match / 304), сборка OpenMapTiles MBTiles через `planetiler-openmaptiles` (Java 21+).
|
||
- По умолчанию один источник: `central-fed-district`. Можно добавлять сколько угодно регионов — воркер проходит все по очереди.
|
||
- `GET /api/v1/tiles/{source}/{z}/{x}/{y}.pbf` — MapLibre XYZ, TMS Y-flip, gzip как в MBTiles.
|
||
- `GET /api/v1/styles/{name}?source=...` — стили по имени; `PUT` и файлы `data/styles/*.json`.
|
||
- Демо: `GET /` MapLibre GL, выбор источника/стиля, статус воркера.
|
||
- Сборка тайлов не на чистом C#: генерация схемы OpenMapTiles — Planetiler. C# оркестрирует download/build/serve.
|
||
|
||
## Как проверялось
|
||
|
||
- `dotnet build` / 9 unit-тестов — ок.
|
||
- Локальный прогон API: демо 200, стили osm-bright/dark/positron, TileJSON, 204 на отсутствующий тайл, PUT второго extract, 404 на неизвестный стиль.
|
||
- Браузерных MCP в сессии не было — проверка через HTTP.
|
||
|
||
## Важно для следующего запуска
|
||
|
||
- Без Java 21 воркер скачает PBF, но не соберёт тайлы.
|
||
- Первая сборка ЦФО — часы и много диска/RAM (`TileServer:JvmMaxHeap`).
|
||
- `TileServer:Sync:RunOnStartup` по умолчанию `true`.
|