You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Status: draft · 2026-08-14 · MoSCoW: Must (v1) / Should (v1.x) / Could (later) / — out of scope.
Items marked → D-xx trace to a decision in 08-decisions.md (all five decided 2026-08-14).
Source-type scope per D-03: v1 = WMS/WMTS/GFI + vector tiles/GeoJSON/PMTiles; WFS & OGC API Features deferred to v1.x.
1. Functional requirements
F1 — Map core
ID
Requirement
Prio
F1.1
Basemap from a MapLibre style URL (vector tiles), e.g. basemap.at bmapv
M
F1.2
Raster basemaps: XYZ template, WMTS, WMS
M
F1.3
Multiple configured basemaps with a basemap switcher (exclusive selection, thumbnails)
M
F1.4
Globe view toggle (MapLibre globe projection)
M
F1.5
Initial view: center/zoom or bounds; bearing/pitch optional
M
F1.6
Constraints: min/max zoom, max bounds
M
F1.7
Multiple independent map instances per page
M
F1.8
3D terrain (DEM source + exaggeration)
S
F1.9
View state in URL hash (opt-in, must not clash with host page routing)
S
F2 — Layer tree / TOC (the heart of the client)
ID
Requirement
Prio
F2.1
Overlay tree with nestable groups, defined by config order (top of list = top of map)
M
F2.2
Per layer: visibility toggle, opacity slider, zoom-to-extent
M
F2.3
Group behaviors: toggle-all, collapsed state, optional radio (exclusive) groups
M
F2.4
Per-layer info menu: abstract, attribution, metadata/dataset link, legend link → D-05
M
F2.5
Layer status feedback in TOC: loading indicator, error badge, "not visible at this zoom" hint
M
F2.6
User re-ordering of overlays (drag & drop, touch-capable)
S
F2.7
Filter/search box inside the TOC (for configs with many layers)
S
F2.8
Persist user TOC changes into the shareable state (see F11)
S
F3 — Add & manage layers at runtime
ID
Requirement
Prio
F3.1
"Add layer" dialog: paste a service URL (WMS/WMTS), client parses capabilities, user picks layers
M → D-03
F3.2
Add GeoJSON by URL; drag & drop a local GeoJSON/KML/GPX file
S
F3.3
Remove/rename user-added layers; clearly distinguished from configured layers
M
F3.4
Catalog search (CSW / OGC API Records) as source for adding layers
C → D-05
F3.5
User-added layers survive in the share/permalink state (not in the page config)
S
F4 — Legend
ID
Requirement
Prio
F4.1
Legend panel aggregating all visible overlay legends, collapsible
M
F4.2
WMS: automatic GetLegendGraphic; overridable via config (image URL or structured entries)
M
F4.3
Vector layers: legend generated from style (symbol/line/fill swatches) where feasible
S
F4.4
Legend included in print/export output
M
F5 — Feature info & overlays (popups)
ID
Requirement
Prio
F5.1
Click → feature info for queryable layers: vector features (client-side) and WMS GetFeatureInfo
M
F5.2
Configurable popup content: property table (with include/exclude & labels) or template with {{property}} placeholders; sanitized HTML; media (images, links)
M
F5.3
Multi-hit handling: several features/layers at one click → grouped/tabbed popup
M
F5.4
Hover tooltip option per layer (short template)
S
F5.5
Popup modes: anchored popup, docked panel on mobile (bottom sheet)
Published, versioned JSON Schema; editor autocomplete via $schema; runtime validation with human-readable errors rendered in place of the map (fail loud, fail helpful)
M
C4
Every key optional except the minimal core; documented defaults
M
C5
Config version field with forward-compatible parsing (unknown keys → console warning, not failure)
M
C6
Shared/partial configs: "extends": "<url>" to inherit an org-wide base config (basemaps, theming)
S
C7
Runtime API mirrors config: everything settable via JS after init; config export of current state
S
C8
Auth hooks for protected services: request-transform callback / static headers per source (no secrets in config!)