Add governed VMM flood hazard scenarios
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-15 22:14:12 +02:00
parent 6238b252a9
commit 501f824257
38 changed files with 2059 additions and 18 deletions
+45
View File
@@ -277,6 +277,51 @@ Safety contract:
- product periods such as `1979_1990` remain explicitly multi-year and are not
presented as exact annual observations.
### GET `/api/v1/projects/{project_id}/datasets/flood-hazard/products`
Returns the fixed twelve-product VMM flood-depth registry in the canonical
envelope. Products combine `pluviaal`/`fluviaal`, current climate/climate
projection 2050 and T10/T100/T1000. Each product keeps the official WCS
coverage id, probability class, source unit centimetres, normalized unit
metres, publication metadata, attribution and limitation.
### POST `/api/v1/projects/{project_id}/datasets/flood-hazard/acquire`
Acquires one bounded official VMM OGRK WCS 1.1 coverage behind the synchronous
Job abstraction. Arbitrary coverage identifiers and service URLs are rejected.
```json
{
"bbox": {"min_x": 5.0, "min_y": 51.1, "max_x": 5.2, "max_y": 51.3, "crs": "EPSG:4326"},
"area_id": "optional-project-area-uuid",
"product_key": "pluviaal_current_t100",
"resolution_m": 5.0,
"force_refresh": false
}
```
The service tiles municipality-size requests, validates EPSG:31370 and one
Float32 depth band, converts positive source centimetres to metres, clips to
the exact persisted Area and stores an ordinary raster Dataset and
DatasetVersion. Zero/null source cells become transparent nodata. The scenario
is not a temporal observation and receives no fabricated `observed_at` value.
### POST `/api/v1/projects/{project_id}/datasets/{dataset_id}/raster/flood-hazard/select`
Returns mapped positive-depth area in hectares, share of the selection, mean,
P90 and maximum modeled local depth and `modelled_max_depth_area_integral_m3`.
Every result identifies mechanism, climate context, probability class and
return period. The integral sums local modeled maximum depth times cell area;
it is explicitly not concurrent flood storage, permanent waterbody content,
current water level or bathymetry. These unsupported metrics remain listed in
the response.
### GET `/api/v1/projects/{project_id}/datasets/{dataset_id}/raster/flood-hazard/image`
Returns a constrained transparent PNG for a persisted governed VMM flood-depth
Dataset. It never accepts an arbitrary path or coverage id and is used by the
existing MapLibre image-overlay path.
### GET `/api/v1/projects/{project_id}/datasets`
List datasets.
+48
View File
@@ -8737,3 +8737,51 @@ Known limitations:
Next:
- Audit P5 official bathymetry and water-depth sources before enabling any
water depth or volume metric. Keep DHMV as height/relief input only.
## Sprint 208 - Governed VMM flood-hazard scenarios (2026-07-15)
Implemented:
- Audited official Vlaamse water-depth/bathymetry sources. Public coastal and
North Sea bathymetry does not cover Mol; Waterinfo is station-based and GRB
water geometry is two-dimensional. Permanent waterbody volume therefore
remains unavailable.
- Added a fixed VMM OGRK registry for twelve water-depth scenarios: fluvial and
pluvial, current climate and climate projection 2050, each at T10/T100/T1000.
- Added bounded WCS 1.1 retrieval, 10 km tiling, multipart GeoTIFF extraction,
georeferenced mosaicking, exact persisted-Area clipping and conversion from
positive source centimetres to normalized metres.
- Persisted scenario, probability, units, bounds, request URLs and response,
coverage and normalized checksums through the existing Job, Dataset and
DatasetVersion architecture. No migration or direct raster DB write exists.
- Added exact raster selection metrics for mapped inundated area/share,
mean/P90/maximum modeled depth and a maximum-depth area integral. The API,
UI and Ollama context all prohibit interpreting that integral as actual,
permanent or concurrent water volume.
- Added an `Overstroming` map theme, explicit scenario selector, transparent
MapLibre overlay, source-inventory presentation and full-Mol operator.
- Added Docker/Unraid configuration, packaging and focused backend/frontend/AI
contracts without a new dependency.
Validation evidence before live deployment:
- Official WCS capabilities and DescribeCoverage confirmed EPSG:31370, 2 m
GridOffsets, Float32 values, null value 0 and `image/tiff` multipart output.
- A live bounded VMM request returned valid georeferenced data; official
catalog metadata confirms depth is expressed in centimetres between modeled
water surface and terrain.
- Synthetic GIS fixtures confirmed 200 positive 5 m cells at 1 m depth produce
0.5 ha mapped area and exactly 5,000 m3 maximum-depth area integral.
- Focused flood-hazard and Ollama tests passed; frontend typecheck and build
passed. Full readiness and Tower provisioning follow in this same pass.
Known limitations:
- The scenario raster represents modeled local maximum depth at 1:100,000
application scale, not a measurement of a current flood event.
- No public municipality-wide inland bathymetry was identified. Waterbody
bottom elevation, uncertainty and permanent content remain open.
- Scenario alternatives are not observations in time and are intentionally not
exposed as a historical temporal series.
Next:
- Complete live twelve-scenario Mol provisioning and browser validation. After
that, treat permanent inland bathymetry as an external-data prerequisite,
not as a value derivable from DHMV or the flood-hazard maps.
+13
View File
@@ -269,6 +269,19 @@ public provider endpoint's `not_configured` status.
- User accounts.
- Full model registry tables.
## Governed flood-hazard rasters
VMM flood-depth scenarios require no new table. Each acquired coverage is an
ordinary `datasets` raster plus immutable `dataset_versions` provenance and a
normal synchronous acquisition Job. The GeoTIFF remains filesystem/object
storage; PostgreSQL keeps source identity, WCS checksums, EPSG:31370 bounds,
source/normalized units, exact Area scope and scenario parameters.
Scenario alternatives do not receive a fabricated `observed_at` value and are
not grouped as a temporal series. Selection metrics are calculated on demand
from the persisted raster. Bathymetry and permanent waterbody volume remain
absent from persistence until a separately governed source/model exists.
## Temporal dataset foundation
Historical observations remain normal `datasets` and `vector_features`; there
+26
View File
@@ -340,6 +340,32 @@ DSM includes buildings and vegetation. Neither is exposed as water depth,
water volume or a directly measured building-height product. A drainage model
would require a separately governed hydrological processing pass.
## VMM overstromingsgevaarkaarten
- Naam: Overstromingsgevaarkaart Waterdiepte
- Uitgever: Vlaamse Milieumaatschappij
- Type: raster/modelscenario
- Toegang: publieke OGRK WCS 1.1 `https://geoservice.waterinfo.be/OGRK/wcs`
- Coverages: fluviaal/pluviaal, huidig klimaat/klimaatprojectie 2050,
T10/T100/T1000
- Native raster: 2 m Float32, EPSG:31370, waterdiepte in centimeter
- Publicatie: 2019/2021 afhankelijk van product; scenario-identiteit is
leidend en wordt niet als observatiedatum opgeslagen
- Cache: canonical raster Dataset plus request/response/output checksums
- Operator: `scripts/provision_mol_flood_hazards.py`
- Prioriteit: P5 scenariofundament uitgevoerd voor Mol
VMM beschrijft deze lagen als maximale lokale waterdiepte tussen wateroppervlak
en maaiveld voor een gekozen kans- en klimaatscenario. GeoIntel converteert
positieve waarden naar meter en kan een diepte-oppervlakte-integraal berekenen.
Omdat lokale maxima niet noodzakelijk op hetzelfde tijdstip optreden, is dat
geen gelijktijdig overstromingsvolume. De bron bevat evenmin bodemprofielen van
meren, kanalen of waterlopen en kan dus geen permanente waterinhoud leveren.
De officiële audit vond geen publieke, gebiedsdekkende inland-bathymetrie voor
Mol. Kust- en Noordzeeproducten vallen buiten de ruimtelijke scope. Waterinfo
stations blijven puntmetingen en GRB-watergeometrie blijft tweedimensionaal.
## Gebouwenregister
The governed operator `scripts/provision_buildings_addresses_register.py`
+39
View File
@@ -185,6 +185,45 @@ Raster / afgeleid van LiDAR.
P4 operationeel voor Mol; regionale uitrol volgt dezelfde operatorgrenzen.
## VMM overstromingsgevaarkaarten waterdiepte
### Rol
Scenarioanalyse voor gemodelleerde overstroming door intense neerslag
(`pluviaal`) en vanuit waterlopen (`fluviaal`). Dit is een afzonderlijk thema
en geen verdieping van de gewone GRB-waterlaag.
### Governed products
- VMM OGRK WCS 1.1, twaalf vaste coverages
- huidig klimaat en klimaatprojectie 2050
- grote, middelgrote en kleine kans: T10, T100 en T1000
- native raster 2 m, EPSG:31370, bronwaarden in centimeter
- GeoIntel normaliseert positieve dieptes naar meter en bronnullen naar
transparant `-9999` nodata
- standaard analysekopie 5 m, exact geclipt op de persisted Area
### Toegestane metingen
- gemodelleerd overstroomd oppervlak in hectare
- aandeel van de selectie met positieve gemodelleerde diepte
- gemiddelde, P90 en maximale lokale gemodelleerde maximumdiepte in meter
- diepte-oppervlakte-integraal in m3, uitsluitend onder die exacte naam en met
de vaste waarschuwing dat lokale maxima niet noodzakelijk gelijktijdig zijn
De laag meet geen huidige waterstand en bevat geen bodemhoogte. Bathymetrie,
permanente inhoud van waterlichamen en gelijktijdig overstromingsvolume blijven
onbeschikbaar. Scenario's zijn alternatieve modelcondities, geen historische
meetmomenten en daarom geen GeoIntel-temporale reeks.
### Type
Raster / gemodelleerd overstromingsgevaar.
### Prioriteit
P5 overstromingsscenario's operationeel voor Mol; bathymetrie blijft open.
## LAS/LAZ LiDAR
### Rol
+4 -1
View File
@@ -67,7 +67,10 @@ pass live Mol validation before regional expansion.
### P5 - Water depth / bathymetry
- [ ] Identify an authoritative source with compatible spatial coverage, vertical datum, date and uncertainty; otherwise keep volume unavailable.
- [x] Audit authoritative sources: no public municipality-wide inland bathymetry for Mol was identified; keep permanent waterbody volume unavailable.
- [x] Integrate the separate public VMM fluvial/pluvial flood-hazard depth scenarios without presenting them as bathymetry or current water state.
- [x] Persist scenario identity, source centimetres, normalized metres, WCS checksums, exact Area clipping and positive-depth coverage.
- [x] Expose mapped inundation area, depth statistics and a clearly named maximum-depth area integral with a prohibition on calling it concurrent volume.
- [ ] Define waterbody linkage, surface elevation, bottom elevation and uncertainty propagation before adding any volume metric.
- [ ] Validate coverage gaps and prohibit extrapolation outside measured/profiled waterbodies.
- [ ] Add independent GIS review and golden-volume fixtures before exposing the result to users or Ollama.