banyaro/tools/osm-extract/README.md
rene 4bc7454258 POI-Karte: Offline-Import aus OSM statt Live-Overpass-Scan (Build 4)
- osm.py: Live-Scanner deaktiviert — /pois liest nur noch aus DB,
  /analyze ist No-Op. Behebt wiederholte OSM-Banns (Tile-Load + Scanning).
- tools/osm-extract: Extraktion (pyosmium) + Loader (schützt user_edited)
  + Docker-Refresh-Job mit osmium-tags-filter-Vorstufe (RAM-schonend).
- docker-compose.osm.yml: Refresh-Service (mem_limit 4g), monatlich via
  DSM-Aufgabenplaner.
2026-06-03 20:44:32 +02:00

55 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# OSM-POI Offline-Refresh (Build 4)
Ersetzt das Live-Scannen gegen `overpass-api.de` (war wiederholt OSM-Bann-Quelle)
durch einen **monatlichen Offline-Batch**: POIs werden aus den Geofabrik-OSM-Daten
extrahiert und in die Produktiv-DB geladen. Danach keine OSM-Live-Last mehr.
## Bestandteile
| Datei | Zweck |
|---|---|
| `extract_osm_pois.py` | pbf → `osm_pois`-Schema (pyosmium). Kanonisches Kategorie→Tag-Mapping. |
| `load_into_prod.py` | Extrakt → Produktiv-DB. Schützt `user_edited=1`, ersetzt den Rest. |
| `refresh.sh` | Orchestrierung im Container: download → tags-filter → extract → load. |
| `Dockerfile` | Image mit osmium-tool + pyosmium. |
| `../../docker-compose.osm.yml` | Eigener Service, **nicht** im Default-Stack. |
## Was es tut
- Lädt CH/AT/DE von Geofabrik (~5,7 GB), dampft sie mit `osmium tags-filter`
(streaming, <500 MB RAM) auf die relevanten Objekte ein, extrahiert die 9
Ban-Yaro-Kategorien und lädt sie in `/data/banyaro.db`.
- **Sicherheitskopie** der DB vor jedem Lauf (letzte 3 bleiben).
- `user_edited=1`-POIs und `user_map_pois` (Community-Marker) bleiben unberührt.
- Peak-RAM ~12 GB, hartes `mem_limit: 4g` als Schutzschranke.
- Aktuelle Größenordnung: DACH ~1,45 Mio POIs, ~180 MB.
## Manuell ausführen (Test)
```sh
cd /pfad/zu/banyaro # dort, wo docker-compose.yml liegt
docker compose -f docker-compose.osm.yml build
docker compose -f docker-compose.osm.yml run --rm osm-refresh
```
## Monatlich per DSM-Aufgabenplaner
1. **Systemsteuerung → Aufgabenplaner → Erstellen → Geplante Aufgabe → Benutzerdefiniertes Skript**
2. Benutzer: `root` (für Docker-Zugriff)
3. Zeitplan: **monatlich**, z. B. am 1. um 04:00 (lastarm)
4. Aufgabeneinstellungen Benutzerdefiniertes Skript:
```sh
cd /volume1/docker/banyaro && \
/usr/local/bin/docker compose -f docker-compose.osm.yml run --rm osm-refresh \
>> /volume1/docker/banyaro/data/osm-refresh.log 2>&1
```
> Pfad `/volume1/docker/banyaro` an euer Compose-Verzeichnis anpassen.
> Docker-Binary auf DSM ist meist `/usr/local/bin/docker` (`docker compose`),
> bei älteren DSM ggf. `docker-compose`.
## Rollback
Vor jedem Lauf wird `banyaro.pre-osm-JJJJMMTT.db` neben der DB abgelegt. Im
Notfall App stoppen, diese Datei auf `banyaro.db` zurückkopieren, App starten.