From c5bdad2d8650b2827d45bec00f1940d6d2a9452d Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 6 Jun 2026 11:07:42 +0200 Subject: [PATCH] Offline-Plan: Follow-ups Runde 1 dokumentiert (Staging-AN v1222, Runde 2 offen) --- docs/OFFLINE_MAPS_PLAN.md | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/docs/OFFLINE_MAPS_PLAN.md b/docs/OFFLINE_MAPS_PLAN.md index 73135e3..3fafa26 100644 --- a/docs/OFFLINE_MAPS_PLAN.md +++ b/docs/OFFLINE_MAPS_PLAN.md @@ -1,28 +1,41 @@ # Offline-Karten (GL/Vektor) — Feature-Plan -**Status:** KERN UMGESETZT + headless verifiziert (2026-06-05, v1213), **flag-gated `by_offline_tiles` (Default AUS)** bis Gerätetest. -**Stand:** 2026-06-05. Autor: René + Claude (Design). +**Status:** KERN + Follow-ups Runde 1 umgesetzt, **Staging-Default AN seit 2026-06-06 (v1222)** — Gerätetest ausstehend; Production AUS bis Freigabe. +**Stand:** 2026-06-06. Autor: René + Claude (Design). -## Umsetzungsstand (2026-06-05) -**✅ Fertig + headless bewiesen:** +## Umsetzungsstand (2026-06-06, v1222 auf Staging) +**✅ Fertig + headless bewiesen (2026-06-05, v1213):** - `map-offline.js` (`window.MapOffline`): Region-Download (`downloadAround(lat,lon,radiusKm)`) → Vektorkacheln z0–14 via `pmtiles.getZxy` (liefert bereits dekomprimierte MVT) + Glyphs in **IndexedDB** (`by-offline-tiles`). `byt://`-MapLibre-Protokoll (IndexedDB-first, remote-Fallback). ~15 MB / 5 km (dekomprimiert). -- `map-gl-style.js` `build({offline})`: `byt`-Source statt `pmtiles://`. Flag `by_offline_tiles` (Default AUS). +- `map-gl-style.js` `build({offline})`: `byt`-Source statt `pmtiles://`. - ui.js/map.js laden map-offline + registrieren `byt`. `UI.loadMapLibreUI` exportiert. - Welten-FAB Segment 5: prüft im GL-Modus gespeicherte Region (nicht mehr OSM-Raster); „Fehlende nachladen" stößt `MapOffline.downloadAround(GPS, 5km)` an. - **Beweis:** Download 97 Tiles (5 km München) → Netz AUS → **1903 Features gerendert**, nicht geladene Gegend (Paris) leer; Glyphs nötig (sonst lässt MapLibre offline die ganze Kachel fallen). -**🔲 Offen (Follow-ups):** -- **Gerätetest (iOS-PWA offline/IndexedDB)** → dann Flag-Default auf Staging-AN (analog `by_map_gl`). -- Download-Button auf der **Karte** (`map-offline-btn`) im GL-Modus auf `downloadAround(Karten-Center)` umbiegen - (bisher OSM-Raster-Prefetch). +**✅ Follow-ups Runde 1 (2026-06-06, v1222):** +- **Flag-Default Staging-AN:** `by_offline_tiles` Default AN auf `staging.banyaro.app`, AUS sonst; + localStorage `1`/`0` bzw. `?tilesoffline=1/0` (boot.js) übersteuert. Default-Logik 3× synchron: + `map-gl-style.js _offlineEnabled()`, `offline-indicator.js _offlineTilesMode()`, `pages/map.js _offlineTilesEnabled()`. +- **Karten-Download-Button:** Speed-Dial „Karte offline speichern" (`map-offline-btn`, war seit FAB-Redesign + verwaist) — GL-Modus → `downloadAround(Kartenmitte, 5 km)` mit Fortschritt in der Statusbar (Kartenmitte + statt GPS: Urlaubsort vorab speicherbar); Leaflet-Modus → alter Raster-Prefetch (`_cacheTiles`). + Sichtbarkeit gated: GL ohne Offline-Flag (= Production) zeigt den Button nicht. +- **Glyph-Persistenz:** Glyphs in IndexedDB (Key-Präfix `f/` im Tiles-Store, kein Schema-Bump) + Protokoll + `byt://f/{fontstack}/{range}` (IndexedDB-first, remote-Fallback); Style nutzt offline die byt-Glyph-URL + → überlebt App-Updates (SW-Cache wird gepurged, IndexedDB nicht). +- **Raster-Prefetch gegated:** `offline-indicator.js init()` überspringt `_prefetchTiles()` im + Offline-Tiles-Modus (GL nutzt das OSM-Raster nicht). + +**🔲 Offen (Follow-ups Runde 2):** +- **Gerätetest (iOS-PWA offline/IndexedDB)** auf Staging — jetzt ohne Flag-Frickelei möglich (Default AN). + Danach: Prod-Freigabe-Entscheidung (Default-Hostnames erweitern analog `by_map_gl`). - **Adaptives Lernen** (rollendes Vorausladen beim Aufzeichnen + Funkloch-Gedächtnis). - **Bereichsauswahl / Routen-Korridor** (inkl. „Route offline speichern" aus routes.js `_openDetail`). -- **Glyph-Persistenz** über App-Updates (aktuell SW-Cache, wird bei Update gepurged) → in IndexedDB ablegen + via `byt://f/` servieren. -- Alten OSM-Raster-Prefetch (`offline-indicator.js _prefetchTiles`) entfernen, wenn Flag dauerhaft AN. +- Alten OSM-Raster-Prefetch (`offline-indicator.js _prefetchTiles` + `map.js _cacheTiles`) komplett + entfernen, wenn Flag dauerhaft AN (auch Prod). ## Ziel GL-Vektorkarten offline-tauglich machen — Kernszenario **Gassi/Wandern im Funkloch**.