added covarage

This commit is contained in:
2026-06-24 07:50:00 +03:00
parent 89ca1ee945
commit bc9b70764d
41 changed files with 1306 additions and 79 deletions
+11 -10
View File
@@ -7,9 +7,9 @@
## Состояние Реализации
- Работает: healthcheck, OpenAPI, DEM elevation/profile, OSM buildings query, landcover/canopy path sampling, terrain LOS/Fresnel/diffraction с учётом DEM и buildings, manual link budget, antenna sector/beam helpers.
- Частично работает: coverage/viewshed создают job-stub, но тяжёлый расчёт ещё не реализован.
- Пока не реализовано: vegetation attenuation по реальным данным, ITM/P.1812/P.452/P.676, реальные async results для coverage/viewshed.
- Работает: healthcheck, OpenAPI, DEM elevation/profile, OSM buildings query, landcover/canopy path sampling, terrain LOS/Fresnel/diffraction с учётом DEM и buildings, link budget (`manual`, `itm`, `p452`) с P.676 atmospheric loss и P.833 vegetation, antenna omni/sector/file, async coverage/viewshed jobs через Redis + Celery.
- Частично работает: coverage raster export (`format=geotiff|png`), canopy bootstrap script (landcover загружается, canopy — вручную).
- Пока не реализовано: полный P.1812 с ITU digital maps (используется terrain-based ITM + clutter), WhiteboxTools viewshed (используется `gdal_viewshed`).
## Общие Правила
@@ -366,13 +366,14 @@ OSM buildings, считает Fresnel/LOS и добавляет Bullington-style
Диагностические поля `geometric_los`, `worst_obstruction` и счётчики obstruction
помогают понять, почему качество Френеля ухудшилось.
Модели `p452` и `itm` пока возвращают `501 Not Implemented`.
Модели `p452` и `itm` используют ITU-R P.452 (pycraf) и Longley-Rice ITM (itmlogic) поверх DEM profile.
Поле `atmospheric_db` считается по ITU-R P.676 (itur). Флаг `include_canopy` учитывает canopy raster в surface profile.
## Antenna
### `POST /api/v1/antenna/pattern`
Нормализует antenna pattern. Сейчас поддержаны `omni` и простая `sector`-модель.
Нормализует antenna pattern. Поддержаны `omni`, `sector` и `file` (CSV: `azimuth_deg,elevation_deg,gain_dbi`).
```bash
curl -s -X POST http://localhost:5603/api/v1/antenna/pattern \
@@ -387,7 +388,7 @@ curl -s -X POST http://localhost:5603/api/v1/antenna/pattern \
}' | jq '.samples[:5]'
```
`pattern="file"` пока не реализован.
`pattern="file"` читает CSV с колонками `azimuth_deg,elevation_deg,gain_dbi` (относительный gain).
### `POST /api/v1/antenna/beam`
@@ -451,7 +452,7 @@ curl -s -X POST http://localhost:5603/api/v1/landcover/path \
- `segments`: участки с одинаковым landcover class.
- `segments[].class`: класс покрова.
- `segments[].forest_type`: пока `unknown` для `tree_cover`/`mangroves`, `null` для остальных классов.
- `segments[].forest_type`: маппится из WorldCover class для P.833 vegetation loss.
- `segments[].canopy_height_m`: средняя высота кроны на сегменте, если canopy raster доступен.
- `vegetation_depth_m`: суммарная длина участков `tree_cover`/`mangroves` по трассе.
@@ -461,7 +462,7 @@ curl -s -X POST http://localhost:5603/api/v1/landcover/path \
### `POST /api/v1/viewshed`
Создаёт job-stub. Реальный WhiteboxTools/GDAL viewshed ещё не подключён.
Ставит async job в Celery. Viewshed считается через `gdal_viewshed` по DEM, результат — GeoJSON или GeoTIFF в `JOBS_OUTPUT_PATH`.
```bash
curl -s -X POST http://localhost:5603/api/v1/viewshed \
@@ -488,7 +489,7 @@ curl -s -X POST http://localhost:5603/api/v1/viewshed \
### `POST /api/v1/coverage`
Создаёт job-stub. Реальный radial coverage расчёт ещё не подключён.
Ставит async job в Celery. Radial coverage с моделями `fspl`, `itm`, `p1812` и antenna gain (omni/sector/file). Результат — GeoJSON contour polygons.
```bash
curl -s -X POST http://localhost:5603/api/v1/coverage \
@@ -521,7 +522,7 @@ curl -s -X POST http://localhost:5603/api/v1/coverage \
### `GET /api/v1/jobs/{job_id}`
Возвращает статус job, если job был создан текущим процессом API. Сейчас job storage in-memory, поэтому после рестарта API ранее созданные job исчезают.
Возвращает статус job из Redis. Jobs переживают рестарт API, TTL задаётся `JOB_TTL_SECONDS` (по умолчанию 7 дней).
```bash
curl -s http://localhost:5603/api/v1/jobs/<job_id> | jq