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:
@@ -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"}'
|
||||
```
|
||||
Reference in New Issue
Block a user