chore: km_berechnen Tool (BEO-Entfernungen/Fahrkosten-Recherche) hinzugefügt

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-10 15:45:37 +02:00
parent 982ada5172
commit 48aaf82899
6 changed files with 523 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
# km_berechnen
Berechnet die **Straßenentfernung (km)** zwischen der fixen **Sternwarte Welzheim**
und dem Wohnort jedes BEOs (Tabelle `beos`) und schreibt das Ergebnis in die
vorhandene Spalte `beos.km`.
Der DB-Zugriff läuft über den **PHP-Proxy** `DB4js_all.php`, da die echte
Sternwarte-Datenbank nicht direkt erreichbar ist:
- Lesen: `cmd = LB_GET_BEO_ADRESSEN` (BEOs mit Adresse + km)
- Schreiben: `cmd = LB_UPDATE_BEO_KM` `{ id, km }`
Distanzberechnung:
- **Geocoding:** OpenStreetMap [Nominatim](https://nominatim.openstreetmap.org) (kostenlos, ohne API-Key)
- **Routing:** öffentlicher [OSRM](https://project-osrm.org)-Server (kostenlos, ohne API-Key)
## Einrichtung
1. `.env` öffnen und `PHP_DB_URL` auf den DB4js-Endpunkt setzen
(lokal: `http://localhost:8080/DB4js_all.php`). Falls der Proxy Basic-Auth
verlangt, zusätzlich `API_USER` / `API_PASS` eintragen.
2. Optional den exakten Referenzpunkt der Sternwarte setzen
(`STERNWARTE_LAT` / `STERNWARTE_LON`) — sonst wird er per Nominatim ermittelt,
mit Ortsmitte Welzheim als Fallback.
Es werden nur Node-Bordmittel verwendet (globales `fetch`) — kein
`npm install` nötig (Node ≥ 18).
## Ausführen
```bash
cd km_berechnen
node --env-file=.env berechne-km.mjs # berechnen und in beos.km schreiben
node --env-file=.env berechne-km.mjs --dry-run # nur berechnen/anzeigen, DB unverändert
```
## Hinweise
- Geocoding-Ergebnisse werden in `geocode-cache.json` zwischengespeichert; ein
zweiter Lauf ist dadurch deutlich schneller. Zum Neu-Geocodieren die Datei löschen.
- Nominatim erlaubt max. 1 Anfrage/Sekunde — das Skript hält dies automatisch ein.
- BEOs ohne (vollständige) Adresse bzw. ohne Geocoding-/Routing-Treffer erhalten
`km = NULL` und werden am Ende aufgelistet.
- Die öffentlichen Nominatim-/OSRM-Server sind „Fair Use"; für die ~20 BEOs
unproblematisch.
- Die beiden Proxy-Kommandos (`LB_GET_BEO_ADRESSEN`, `LB_UPDATE_BEO_KM`) sind in
`DB4js_all.php` implementiert.
## Ergebnis prüfen
Per Proxy:
```bash
curl -s -X POST "$PHP_DB_URL" -H 'Content-Type: application/json' \
-d '{"cmd":"LB_GET_BEO_ADRESSEN"}'
```