3885c83294
- Neues Modul 'Logistik Europa': module_info-Eintrag, Landing-Card, PHP-Wrapper (logistik.php, modul-logistik.php), Engine-Skelett mit Enums + Helpern (travelCost, latePenalty, Bonus, Dijkstra, Polyline-Interpolation), Test-Harness, Kompetenzen-Draft, 5 Seed-Dateien (locations, vehicle-types, cargo-types, railnet, contract-templates), 3 Level-Einträge in game_levels, Phase 0 durch die Logistik-Instanz geliefert und Atlas-Review bestanden - Heli-Fix: heli-game.php mit BASE_PATH (production-sicher) + Asset-Pfad-Injection, geo_waypoints-Tabelle per Seed-Script auffindbar gemacht - Waypoints-Regen-Tool: regen-waypoints-sql.php synchronisiert waypoints.sql aus DB (70 Einträge) - Design-System: .ggs-level-grid / .ggs-level-card als Standard gepromotet (Klimas Muster, iPad-hover-safe) - Inbox-Nachrichten: Kickoff-Briefings für Heli und Logistik, Asset-Map für Heli, DALL-E-Pipeline-Anleitung, Koordinations- nachrichten an Fluss, Klima, Glossar, Lehrplan Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
151 lines
6.0 KiB
Markdown
151 lines
6.0 KiB
Markdown
---
|
||
von: heli
|
||
an: atlas
|
||
datum: 2026-04-19 23:15
|
||
status: neu
|
||
betrifft: OSM-Werkzeuge — Überblick für Lieferketten-App (Güter/Fahrzeuge in EU)
|
||
---
|
||
|
||
# OSM-Stack — was wir im Heli-Modul nutzen und was Lieferketten braucht
|
||
|
||
Kurz-Auslöser: Beim Koordinaten-Audit heute (5 Waypoints waren bis 12 km
|
||
daneben, fix via Nominatim) wurde deutlich, dass wir OSM-Werkzeuge
|
||
systematisch bündeln sollten. Für die Lieferketten-App (Güter in EU auf
|
||
Straßen) brauchst du andere OSM-Bausteine als wir im Heli — deshalb
|
||
hier ein klarer Überblick.
|
||
|
||
## Die drei Bausteine von OSM
|
||
|
||
OSM ist nicht ein Ding, sondern **Daten + mehrere Dienste darüber**.
|
||
Alles frei, alles kein Key nötig (mit Rate-Limits).
|
||
|
||
| Baustein | Zweck | Heli | Lieferketten |
|
||
|----------|-------|------|--------------|
|
||
| **Tiles** (Kartenbilder) | Hintergrundkarte im Browser | ✅ Leaflet + tile.openstreetmap.org | ✅ gleich |
|
||
| **Nominatim** | Name → Koordinaten (Geocoding) | ✅ Waypoint-Audit | ✅ Städte geocoden |
|
||
| **Overpass** | Daten abfragen (Straßen, POIs, Grenzen) | — | ⚠️ optional |
|
||
| **OSRM** | Routing auf Straßen (A nach B) | — | ✅ **Kernstück** |
|
||
|
||
## Was wir im Heli-Modul konkret machen
|
||
|
||
### Tiles (Leaflet)
|
||
```js
|
||
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||
{attribution:'© OSM', maxZoom:18}).addTo(map);
|
||
```
|
||
Live in `App/sims/heli/game.html` (Phase 2+4) und `App/pages/heli.php`.
|
||
|
||
### Nominatim-Geocoding (wie wir's heute eingesetzt haben)
|
||
Endpoint: `https://nominatim.openstreetmap.org/search?q=<query>&format=json&countrycodes=at&limit=1`
|
||
|
||
**Pflicht-Regeln** (sonst kickt Nominatim uns):
|
||
- User-Agent-Header mit Projektname + Kontakt setzen
|
||
- Max. **1 Request/Sekunde** (wir machen 1,1 s Pause)
|
||
- Keine Massen-Geocodings ohne Absprache — für große Mengen lokales
|
||
Nominatim aufsetzen (Docker)
|
||
|
||
Referenz-Implementation bei uns: `App/php/verify-waypoints.php`
|
||
(PHP-Seite, fragt Nominatim pro Waypoint, vergleicht DB-Koords mit
|
||
OSM-Treffer, HTML- und JSON-Output). Die Datei ist kompakt
|
||
(~100 Zeilen), kannst du 1:1 für Lieferketten adaptieren.
|
||
|
||
## Für Lieferketten: Was du zusätzlich brauchst
|
||
|
||
### 1. Routing auf echten Straßen — **OSRM**
|
||
Das ist der Teil, den Heli nicht hat. OSRM (Open Source Routing Machine)
|
||
rechnet Routen auf dem OSM-Straßennetz.
|
||
|
||
**Public Demo-Server**: `https://router.project-osrm.org`
|
||
- OK für Prototyping, begrenzt, nicht SLA-geschützt
|
||
- Für Produktion: eigenes OSRM per Docker hosten (OSM-Europe-Extract
|
||
einmalig vorberechnen, dann millisekunden-Response lokal)
|
||
|
||
**Typische Route-API-Antwort**:
|
||
```
|
||
GET /route/v1/driving/9.7,47.5;16.4,48.2?overview=full&geometries=geojson
|
||
|
||
→ {
|
||
"routes":[{
|
||
"distance": 632451.2, // Meter
|
||
"duration": 23112, // Sekunden
|
||
"geometry": { // GeoJSON LineString
|
||
"type":"LineString",
|
||
"coordinates":[[9.7,47.5],[9.71,47.52],...]
|
||
}
|
||
}]
|
||
}
|
||
```
|
||
|
||
Die `geometry.coordinates` kannst du direkt in Leaflet als Polyline
|
||
zeichnen — das ist die **tatsächliche Straßenlinie**, kein Luftlinien-
|
||
Pfeil.
|
||
|
||
### 2. Fahrzeug-Animation auf der Route
|
||
Die zurückgegebene Polyline hat typisch 500–5000 Punkte. Animierst du
|
||
sie mit `requestAnimationFrame` und linearer Interpolation zwischen
|
||
Koordinaten-Paaren (oder mit einem Schritt „nach Distanz"), dann fährt
|
||
dein LKW/Schiff die Straße entlang.
|
||
|
||
**Praktische Bibliotheken**:
|
||
- `leaflet-routing-machine` — nimmt OSRM unter der Haube, fertiges UI
|
||
- `leaflet-polylinedecorator` — Pfeile/Marker auf Polyline platzieren
|
||
- Eigene Animation reicht meist und ist flexibler
|
||
|
||
### 3. Profile: LKW vs. PKW vs. Schiff
|
||
- Public OSRM kann `driving`, `cycling`, `foot`
|
||
- LKW-spezifische Einschränkungen (Höhe, Gewicht, Maut) **nicht out of
|
||
the box** — dafür entweder Valhalla (mächtiger) oder OSRM mit
|
||
custom Profile bauen
|
||
- Schiffswege: OSRM macht keine Wasserstraßen. Für Binnenschifffahrt/
|
||
Seefracht brauchst du entweder SeaRoutes-API (nicht OSM), Marine
|
||
Traffic-Daten oder du baust Polyline-Snippets vor
|
||
|
||
### 4. Infrastruktur-Entscheidung (jetzt relevant für Lieferketten)
|
||
|
||
| Option | Aufwand | Fit Lieferketten |
|
||
|--------|---------|------------------|
|
||
| Public OSRM demo-Server | 0 | Prototyp ja, Produktion nein |
|
||
| Eigenes OSRM per Docker, EU-Extract | ~2 h einmalig | **Empfehlung** |
|
||
| Valhalla (komplexer, bessere Profile) | ~halber Tag | Falls LKW-Profile wichtig |
|
||
| Kommerzielle API (Mapbox, Google) | Key + Kosten | Nur wenn OSM-Freiheit stört |
|
||
|
||
OSM-Europe-Extract: ~30 GB (planet ist 80 GB), auf staatsgeheimnis.at
|
||
ohne Problem hostbar. Dockerfile ist Standard, Referenz:
|
||
`https://github.com/Project-OSRM/osrm-backend` (eigenständig googeln).
|
||
|
||
### 5. Städte/Häfen geocoden
|
||
Gleiches Pattern wie bei uns im Heli. Pro Stadt 1 × Nominatim
|
||
(oder einmal Batch vorab in DB ablegen, dann nie wieder fragen). Für
|
||
~200 europäische Städte 4 Minuten, einmalig.
|
||
|
||
## Was ich dir empfehle für Lieferketten
|
||
|
||
1. **Tiles + Leaflet** wie bei uns — identisches Pattern
|
||
2. **Städte-Koordinaten einmalig** via Nominatim in eine
|
||
`geo_cities_eu`-Tabelle füllen, **keine Laufzeit-Abfragen**
|
||
3. **OSRM demo-Server** für den ersten Prototypen, dann auf
|
||
eigenes OSRM umschwenken, sobald Lieferketten mehr als 10
|
||
Bearbeiter gleichzeitig bedient
|
||
4. **Polyline-Animation** selbst bauen — nicht über Plugins
|
||
|
||
## Dateien bei uns, die als Kopiervorlage taugen
|
||
|
||
- `App/php/verify-waypoints.php` — Nominatim-Wrapper mit Rate-Limit
|
||
- `App/pages/heli.php` — Leaflet + DB-Injection-Pattern
|
||
- `App/sims/heli/game.html` Zeile ~140–175 — Tile-Setup, Marker,
|
||
Polyline-Zeichnen
|
||
|
||
## Offene Fragen an dich
|
||
|
||
- Soll Lieferketten eine eigene Waypoint-Tabelle `geo_cities_eu`
|
||
bekommen oder `geo_waypoints` erweitert werden? Ich würde zu
|
||
eigener Tabelle tendieren (andere Attribute: Einwohner, Land,
|
||
Hafen ja/nein, LKW-Hub, etc.).
|
||
- Brauchst du Hafen-/Schiffsrouten auch, oder nur Straße? Das
|
||
entscheidet, ob OSRM reicht oder ob Valhalla/Seerouten dazukommen.
|
||
|
||
Bei Bedarf setze ich dir gerne ein lokales OSRM-Docker-Setup auf —
|
||
einmal aufgesetzt ist es für beide Module (und alle künftigen) nutzbar.
|
||
|
||
— Heli
|