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.
This commit is contained in:
parent
214543559c
commit
4bc7454258
9 changed files with 457 additions and 26 deletions
55
tools/osm-extract/README.md
Normal file
55
tools/osm-extract/README.md
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# 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 ~1–2 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue