Keep national coverage selection available
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-18 02:17:29 +02:00
parent 3f7b90f009
commit 611ad0cd57
4 changed files with 16 additions and 3 deletions
+3
View File
@@ -66,6 +66,9 @@
properties exposed by the live NGI GeoPackage. properties exposed by the live NGI GeoPackage.
- Hardened shared AOI geometry normalization to persist valid 2D polygons when - Hardened shared AOI geometry normalization to persist valid 2D polygons when
an authoritative source supplies harmless zero-valued Z coordinates. an authoritative source supplies harmless zero-valued Z coordinates.
- Kept map rectangle and full-area selection available for coverage inspection
when a selected national theme has not yet been materialized, without
querying an unrelated active dataset.
## Sprint 240 Operational forest, agriculture, nature and soil themes (2026-07-17) ## Sprint 240 Operational forest, agriculture, nature and soil themes (2026-07-17)
@@ -210,3 +210,5 @@ def test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbo
assert "externalApi.resolveCoverage" in coverage_hook assert "externalApi.resolveCoverage" in coverage_hook
assert "coverage.outside_supported_scope" in map_workspace assert "coverage.outside_supported_scope" in map_workspace
assert "coverageStatusLabel" in map_workspace assert "coverageStatusLabel" in map_workspace
assert "coverageSelectionAvailable" in map_workspace
assert "activeThemeAvailable && !regionalPartitionedThemeActive" in map_workspace
+5
View File
@@ -35,6 +35,11 @@
a separate live-only PostGIS constraint: AdminVector AOI boundaries carry a a separate live-only PostGIS constraint: AdminVector AOI boundaries carry a
zero-valued Z coordinate while `areas.geometry` is intentionally 2D. zero-valued Z coordinate while `areas.geometry` is intentionally 2D.
Shared AOI normalization now removes Z before validation and persistence. Shared AOI normalization now removes Z before validation and persistence.
- Live API persistence subsequently completed with one national workspace,
eight scope areas and six ready authoritative datasets. A second operator
run reused the same project and dataset identifiers. Browser acceptance then
exposed and closed a map guard that had prevented coverage-only selection
when the chosen theme was honestly unavailable.
- Froze the RC geography as all Belgian land plus the separately labelled - Froze the RC geography as all Belgian land plus the separately labelled
territorial sea, EEZ and continental shelf. territorial sea, EEZ and continental shelf.
+6 -3
View File
@@ -974,6 +974,7 @@ export function MapWorkspace({
const onDemandThemeActive = analysisMode === 'current' && Boolean(activeOnDemandMapProduct) const onDemandThemeActive = analysisMode === 'current' && Boolean(activeOnDemandMapProduct)
const regionalOnDemandThemeActive = regionalScopeSelected && onDemandThemeActive const regionalOnDemandThemeActive = regionalScopeSelected && onDemandThemeActive
const activeThemeAvailable = Boolean(activeThemeDataset) || onDemandThemeActive const activeThemeAvailable = Boolean(activeThemeDataset) || onDemandThemeActive
const coverageSelectionAvailable = analysisMode === 'current' && Boolean(selectedProjectId && selectedMapArea)
useEffect(() => { useEffect(() => {
if ( if (
@@ -1525,7 +1526,7 @@ export function MapWorkspace({
const analyzeSelection = async (bbox: VectorSelectionBBox, areaId?: string) => { const analyzeSelection = async (bbox: VectorSelectionBBox, areaId?: string) => {
setSelectionBbox(bbox) setSelectionBbox(bbox)
const tasks: Array<Promise<unknown>> = [loadAllThemeResults(bbox, areaId)] const tasks: Array<Promise<unknown>> = [loadAllThemeResults(bbox, areaId)]
if (!regionalPartitionedThemeActive && !onDemandThemeActive) { if (activeThemeAvailable && !regionalPartitionedThemeActive && !onDemandThemeActive) {
tasks.push(onRunMapSelectionExtract(bbox, areaId)) tasks.push(onRunMapSelectionExtract(bbox, areaId))
} }
if (analysisMode === 'evolution' && earlierDatasetId && laterDatasetId) { if (analysisMode === 'evolution' && earlierDatasetId && laterDatasetId) {
@@ -1914,6 +1915,8 @@ export function MapWorkspace({
<p> <p>
{bboxSelectionMode {bboxSelectionMode
? 'Sleep nu een rechthoek op de kaart.' ? 'Sleep nu een rechthoek op de kaart.'
: !activeThemeAvailable
? 'Teken een rechthoek om de databeschikbaarheid voor dit gebied te controleren.'
: regionalRasterThemeActive : regionalRasterThemeActive
? 'Teken een rechthoek; de juiste gemeentelijke rasters worden automatisch gecombineerd.' ? 'Teken een rechthoek; de juiste gemeentelijke rasters worden automatisch gecombineerd.'
: onDemandThemeActive : onDemandThemeActive
@@ -1927,7 +1930,7 @@ export function MapWorkspace({
<div className="geo-map-actions"> <div className="geo-map-actions">
<button <button
className={bboxSelectionMode ? 'primary-action geo-draw-active' : 'primary-action'} className={bboxSelectionMode ? 'primary-action geo-draw-active' : 'primary-action'}
disabled={!activeThemeAvailable || (analysisMode === 'evolution' && activeTemporalSeries.length < 2) || mapSelectionLoading || themeResultsLoading} disabled={(!activeThemeAvailable && !coverageSelectionAvailable) || (analysisMode === 'evolution' && activeTemporalSeries.length < 2) || mapSelectionLoading || themeResultsLoading}
type="button" type="button"
onClick={startBboxSelection} onClick={startBboxSelection}
> >
@@ -1935,7 +1938,7 @@ export function MapWorkspace({
</button> </button>
<button <button
className="secondary-action" className="secondary-action"
disabled={!activeThemeAvailable || regionalRasterThemeActive || regionalOnDemandThemeActive || (analysisMode === 'evolution' && activeTemporalSeries.length < 2) || !selectedAreaBbox || mapSelectionLoading || themeResultsLoading} disabled={(!activeThemeAvailable && !coverageSelectionAvailable) || regionalRasterThemeActive || regionalOnDemandThemeActive || (analysisMode === 'evolution' && activeTemporalSeries.length < 2) || !selectedAreaBbox || mapSelectionLoading || themeResultsLoading}
type="button" type="button"
title={ title={
regionalRasterThemeActive || regionalOnDemandThemeActive regionalRasterThemeActive || regionalOnDemandThemeActive