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).