From 6238b252a953455f82a5485566aa5a817cebd446 Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 15 Jul 2026 19:09:51 +0200 Subject: [PATCH] Record live Mol terrain validation --- CHANGELOG.md | 8 ++++- backend/README.md | 7 ++++ backend/tests/test_sprint205_dhmv_terrain.py | 1 + docs/CODEX_EXECUTION_LOG.md | 36 +++++++++++++++----- frontend/src/components/map/MapWorkspace.tsx | 2 +- scripts/README.md | 7 ++-- 6 files changed, 48 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45012190..1d66e6eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,8 @@ ## Sprint 207 Governed DHMV II terrain foundation (2026-07-15) - Added a fixed official Digitaal Vlaanderen DHMV II DTM/DSM WCS registry, - bounded multipart GeoTIFF acquisition and exact persisted-Area clipping. + rate-limited 10 km multipart GeoTIFF acquisition, georeferenced mosaicking + and exact persisted-Area clipping. - Validates and retains native 1 m product identity, 5 m analysis resolution, EPSG:31370, Float32 nodata, TAW, acquisition period and source/output checksums through ordinary Dataset, DatasetVersion and Job persistence. @@ -22,6 +23,11 @@ presenting DHMV terrain/surface height as water depth or volume. - Added runtime/Unraid configuration and focused acquisition, GIS formula, persistence, API, frontend and packaging tests without a migration. +- Live Mol DTM/DSM provisioning now persists 4,581,867 valid 5 m cells per + product with complete Area coverage and immutable cache reuse. Browser + validation confirmed the MapLibre relief overlay and full-Area metrics. +- Scoped the orthophoto building-recognition prompt to the building theme so + terrain results remain focused on elevation, relief and slope. ## Sprint 206 Governed Buildings and Addresses Register snapshot (2026-07-15) diff --git a/backend/README.md b/backend/README.md index 4b68db8c..2d7fdc5c 100644 --- a/backend/README.md +++ b/backend/README.md @@ -1193,6 +1193,13 @@ The default 5 m analysis copy keeps complete-Mol processing bounded while retaining native 1 m resolution, EPSG:31370, TAW, `-9999` nodata and the 2013-2015 acquisition period in provenance. +Municipality-sized requests are split into sequential WCS tiles of at most +10 km per side. The client sends the explicit media accept header required by +the production service, waits between requests, retries transient provider +statuses once and mosaics only tiles that validate against EPSG:31370, one +band and the requested resolution. Every tile URL and aggregate transfer +checksum remains in provenance. + Run the complete Mol operator after the regional workspace and Mol Area exist: ```bash diff --git a/backend/tests/test_sprint205_dhmv_terrain.py b/backend/tests/test_sprint205_dhmv_terrain.py index 4b411dbf..6986c35b 100644 --- a/backend/tests/test_sprint205_dhmv_terrain.py +++ b/backend/tests/test_sprint205_dhmv_terrain.py @@ -422,6 +422,7 @@ def test_frontend_and_runtime_expose_dhmv_workflow() -> None: assert "digitaal_vlaanderen_dhmv" in app_source assert "Hoogte & reliƫf" in map_source assert "terrainImageUrl" in map_source + assert "analysisMode === 'current' && activeTheme.id === 'buildings' && mapSelectionBbox" in map_source assert "selectTerrain" in hook_source assert "/raster/terrain/select" in service_source for path in ( diff --git a/docs/CODEX_EXECUTION_LOG.md b/docs/CODEX_EXECUTION_LOG.md index 29f280f9..5b9ab233 100644 --- a/docs/CODEX_EXECUTION_LOG.md +++ b/docs/CODEX_EXECUTION_LOG.md @@ -8690,9 +8690,10 @@ Next: Implemented: - Added a fixed `dtm_1m`/`dsm_1m` product registry for the official Digitaal Vlaanderen production WCS and rejected arbitrary coverage identifiers. -- Added bounded WCS scaling, multipart GeoTIFF extraction, exact persisted-Area - clipping and validation of EPSG:31370, one Float32 band, resolution, nodata - and valid cells before canonical DatasetService persistence. +- Added bounded, rate-limited 10 km WCS tiling, multipart GeoTIFF extraction, + georeferenced mosaicking, exact persisted-Area clipping and validation of + EPSG:31370, one Float32 band, resolution, nodata and valid cells before + canonical DatasetService persistence. - Retained response, coverage and normalized-output SHA256 evidence plus native 1 m resolution, default 5 m analysis resolution, TAW and period 2013-2015. - Added exact masked terrain selection with governed height, relief and slope @@ -8702,9 +8703,28 @@ Implemented: readable period/source labels and raster-aware rectangle/full-Area queries. - Added `scripts/provision_mol_dhmv.py`, Docker/Unraid settings and documentation. -Initial validation: -- Focused acquisition, raster, GIS metric, API, frontend and packaging tests - pass with deterministic synthetic GeoTIFF fixtures. +Validation evidence: +- Full local readiness passed compilation, 669 backend tests, one Alembic head + (`202607150001`), frontend TypeScript typecheck/build and shell syntax gates. +- The production WCS required an explicit `Accept: */*` header and rejected + rapid municipality tile requests. The governed client now waits two seconds + between requests and retries a transient provider status once. Four real + requests produced one `2928 x 3794`, EPSG:31370, 5 m Mol bounding raster + before exact municipality masking. +- Tower deployment passed all-in-one health, PostGIS 3.6 migration/schema + smoke, frontend proxy and icon verification. +- Live DTM Dataset `eccb9174-edb9-4867-928c-9acc5d686fa5` is ready with + checksum `9c5f06f5ce2070128aca06e3cbcec00ec8f698bf592c1745245280cd0488ad9b`. + Live DSM Dataset `34d1be8e-3a80-4ea3-98e5-238739000524` is ready with + checksum `54e36a2aada03f52eb24a7b6af505871d33ed52a5c2af04500793dbfca72f7af`. + Both contain 4,581,867 valid 5 m cells and report complete Mol coverage. +- Full-Mol DTM metrics are mean 31.8985 m TAW, minimum 20.8598 m TAW, + maximum 48.4594 m TAW, relief 27.5996 m and mean slope 1.2377 degrees. + Re-running the operator reused both immutable datasets. +- Browser validation selected Mol, activated DTM by default, rendered the + colour-relief overlay, returned all terrain metrics, retained the explicit + water-depth/volume limitation, showed no horizontal overflow and emitted no + browser console warnings/errors. - No migration, direct raster database write, LiDAR point-cloud processing or water-volume inference was introduced. @@ -8715,5 +8735,5 @@ Known limitations: explicit smaller acquisition. DSM-DTM building height remains future work. Next: -- Complete the full readiness and live Mol operator/browser validation, then - audit P5 bathymetry sources before enabling any water depth or volume metric. +- Audit P5 official bathymetry and water-depth sources before enabling any + water depth or volume metric. Keep DHMV as height/relief input only. diff --git a/frontend/src/components/map/MapWorkspace.tsx b/frontend/src/components/map/MapWorkspace.tsx index 32868433..d9c7ed03 100644 --- a/frontend/src/components/map/MapWorkspace.tsx +++ b/frontend/src/components/map/MapWorkspace.tsx @@ -1325,7 +1325,7 @@ export function MapWorkspace({ - {analysisMode === 'current' && mapSelectionBbox ? ( + {analysisMode === 'current' && activeTheme.id === 'buildings' && mapSelectionBbox ? (
Beeldanalyse diff --git a/scripts/README.md b/scripts/README.md index 3bc4ac63..3abcb71c 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1524,9 +1524,10 @@ docker exec geointel python /app/scripts/provision_mol_dhmv.py The operator resolves project and Area through the API, derives the bounded EPSG:4326 request rectangle and calls the canonical DHMV endpoints. The backend -requests the fixed official WCS coverages, extracts multipart GeoTIFF, clips to -the exact Area, validates EPSG:31370/resolution/nodata/valid cells and stores -through DatasetService. It then runs a full-Area terrain metric smoke. +requests the fixed official WCS coverages in rate-limited tiles of at most +10 km per side, extracts multipart GeoTIFF, creates one georeferenced mosaic, +clips to the exact Area, validates EPSG:31370/resolution/nodata/valid cells and +stores through DatasetService. It then runs a full-Area terrain metric smoke. Useful safe overrides: