# 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`.