48aaf82899
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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 (kostenlos, ohne API-Key)
- Routing: öffentlicher OSRM-Server (kostenlos, ohne API-Key)
Einrichtung
.envöffnen undPHP_DB_URLauf den DB4js-Endpunkt setzen (lokal:http://localhost:8080/DB4js_all.php). Falls der Proxy Basic-Auth verlangt, zusätzlichAPI_USER/API_PASSeintragen.- 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
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.jsonzwischengespeichert; 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 = NULLund 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 inDB4js_all.phpimplementiert.
Ergebnis prüfen
Per Proxy:
curl -s -X POST "$PHP_DB_URL" -H 'Content-Type: application/json' \
-d '{"cmd":"LB_GET_BEO_ADRESSEN"}'