Skip to content

ADR-0001: GIS-Runtime OpenLayers + MVT

  • Status: accepted
  • Datum: 2026-08-26
  • Phase: P2 / Map-Migration
  • Lastenheft: INF-01, INF-02, DASH-01 (kein GIS-Write im Dashboard)

Kontext

Zwei Clients (Tauri-Editor, Next.js-Dashboard) brauchen dieselbe Karte über PostGIS SRID 25832. Heute lädt das Dashboard alle fiber_routes eines Projekts als WGS84-GeoJSON in MapLibre — das skaliert nicht und zementiert Trassen als einziges Geo-Objekt.

Entscheidung

OpenLayers 10.10 (ol) plus proj4 2.20 in Editor und Dashboard. Hintergrund: MVT (ST_AsMVT / ST_AsMVTGeom in 3857, Filter in 25832). Identify/Edit: GeoJSON für ein Objekt oder eine kleine Arbeitsmenge. Optional ol-mapbox-style für Vector-Tile-Styles.

Vertrag:

  • GET /api/v1/map/tiles/{stage}/{z}/{x}/{y}.mvt?project_id=&kind=
  • GET/PATCH /api/v1/map/objects/{id} (PATCH nur Editor)

Begründung

Ein Engine für beide Clients vermeidet doppelte Snap/Draw-Logik. OpenLayers spricht nativ EPSG:25832 über proj4. MVT hält Tiles klein; GeoJSON bleibt für Identify. Das passt zum bestehenden FastAPI+PostGIS ohne zweiten Tile-Server.

Verworfene Alternativen

Alternative Warum verworfen
MapLibre + Mapbox Draw als Dauer-Runtime Kein natives 25832; Draw-Plugin ist ein zweites Ökosystem; heutiger GeoJSON-Dump skaliert nicht
Zwei Engines (OL im Editor, MapLibre im Dashboard) Doppelte Styles, Snap, Identify; Drift bei kind-generischen Layern
Reines GeoJSON für alle Layer Ungeeignet für Stadt-/Trassennetze; transform-whole-project-to-4326 verboten
MapServer / GeoServer als Tile-SSOT Zweites Backend neben FastAPI; Lastenheft: ein API-Host

Folgen

Dashboard /map ist lesend (OpenLayers, keine Draw-Tools). Editor nutzt Draw/Modify/Snap. MVT-Tiles brauchen denselben Principal wie die übrigen Map-Reads: die Dashboard-Karte schickt das Session-Cookie same-origin, der Editor muss Authorization: Bearer an jeden Tile-Request hängen (OpenLayers lädt Tiles sonst ohne Header). GET /map/fiber-routes ist entfernt (ADR-0050).