diff --git a/docs/OFFLINE_MAPS_PLAN.md b/docs/OFFLINE_MAPS_PLAN.md index ea12814..55c464d 100644 --- a/docs/OFFLINE_MAPS_PLAN.md +++ b/docs/OFFLINE_MAPS_PLAN.md @@ -16,15 +16,21 @@ Selbst-zielend (cacht wo nötig, nicht überall), speichersparsam, ohne Nutzerau - Folge offline heute: App + Daten da, aber GL-Karte = Routenlinie/Marker auf **leerem Hintergrund**. ## Gemessene Speicher-Fakten (an echter dach.pmtiles, maxzoom=14 + Overzoom bis ~16) +**Referenz-Radius = 5 km** (René, 2026-06-05: „5 km genügen"). Messungen: | Gebiet | Fläche | Tiles | Größe | |---|---|---|---| -| München (48,1/11,5), dicht | 20×20 km (10 km Radius) | 252 | **15 MB** | -| Bayerischer Wald, ländlich | 20×20 km | 285 | **4,4 MB** | -| Bayerischer Wald, ländlich | 50×50 km (~25 km Radius) | 1.595 | **20 MB** | +| **München (48,1/11,5), dicht — 5 km** | 10×10 km | 82 | **6,4 MB** | +| **Bayerischer Wald, ländlich — 5 km** | 10×10 km | 99 | **2,6 MB** | +| (Kontext) München 10 km | 20×20 km | 252 | 15 MB | +| (Kontext) Bayerischer Wald 10 km | 20×20 km | 285 | 4,4 MB | +| (Kontext) Bayerischer Wald ~25 km | 50×50 km | 1.595 | 20 MB | -→ Vektor ist ~10× sparsamer als Raster (Raster 10 km ≈ 100–300 MB). Stadt-Tiles ~3,4× dicker als Land. -→ **Budget ≈ 16 MB** deckt in der Stadt ~10 km, auf dem **Land ~18–22 km** Radius ab (mehr Reichweite - genau dort wo die Funklöcher sind). Glyphs (~1–2 MB) + Style (winzig) obendrauf → ~17 MB pro Gegend. +→ Vektor ist ~10× sparsamer als Raster (Raster 5 km ≈ 40–120 MB). Stadt-Tiles ~2,5× dicker als Land. +→ 5 km ist NICHT 1/4 von 10 km (6,4 vs 15 MB) — die unteren Zoomstufen (Übersicht) sind immer dabei, + unabhängig von der bbox-Größe. +→ **Budget ≈ 7 MB** (5 km dichte Stadt + Glyphs). Budget-getrieben deckt das in der Stadt ~5 km, auf dem + **Land ~8–10 km** Radius ab (mehr Reichweite genau dort wo die Funklöcher sind). Glyphs (~1–2 MB) + + Style (winzig) → ~8 MB pro Gegend. Sehr sparsam → viele Gegenden problemlos (10 ≈ 80 MB). → Messmethode (reproduzierbar): `docker run --rm -v /tmp/pmt:/out protomaps/go-pmtiles:latest extract https://staging.banyaro.app/tiles/dach.pmtiles /out/x.pmtiles --bbox=W,S,E,N` → Dateigröße ablesen. @@ -32,9 +38,9 @@ Selbst-zielend (cacht wo nötig, nicht überall), speichersparsam, ohne Nutzerau ### Region-Extract (budget-getrieben, NICHT fester Radius) - PMTiles-**Directory enthält pro Tile die Byte-Länge** → Server kann die Größe einer Region **aufsummieren OHNE die Tiles zu laden**. -- Endpoint `GET /tiles/region?lat=&lon=&budget=16` (MB): wächst die bbox um die Position, bis die +- Endpoint `GET /tiles/region?lat=&lon=&budget=7` (MB): wächst die bbox um die Position, bis die summierte Tile-Länge ≈ Budget erreicht (Stadt → kleiner Radius, Land → großer Radius), extrahiert dann - genau diese Region als `region.pmtiles` (**ein 200er**, ~16 MB). `pmtiles extract` (go-pmtiles) oder + genau diese Region als `region.pmtiles` (**ein 200er**, ~7 MB). `pmtiles extract` (go-pmtiles) oder python-pmtiles im Container. - Client lädt die Datei einmal → **IndexedDB** (Blob; 200er, anders als die 206-Ranges cachebar). - MapLibre liest **offline** aus dem lokalen Blob via `pmtiles://` (pmtiles.js kann aus ArrayBuffer lesen); @@ -59,7 +65,8 @@ Selbst-zielend (cacht wo nötig, nicht überall), speichersparsam, ohne Nutzerau - **Aufräumen:** Den alten OSM-Raster-Prefetch in `offline-indicator.js` ablösen/abschalten (cacht ungenutztes Raster). ## Offene Entscheidungen / Defaults -- Budget-Default **16 MB**, optional Stufe „Groß 40 MB" (Stadt ~16 km / Land ~30+ km) für Wandertage. +- Budget-Default **~7 MB** (Referenz 5 km Stadt; René 2026-06-05). Stadt ~5 km / Land ~8–10 km. + Optional Stufe „Groß ~16 MB" (Stadt ~10 km / Land ~18–22 km) für Wandertage. - Zoom z0–14 (Overzoom liefert Straßenebene gratis). - Detektionssignal = echte Fetch-Timeouts bei aktivem GPS (nicht `navigator.onLine`). - Speicher = IndexedDB (Blobs); MapLibre-Source-Umschaltung online/offline.