Dies ist eine alte Version des Dokuments!
OpenTripPlanner (OTP) ist eine quelloffene Plattform in Java zur multimodalen Reiseplanung. Sie berechnet Routen über mehrere Verkehrsmittel hinweg, etwa ÖPNV, Fußwege, Fahrrad und Auto, und kombiniert dafür vor allem GTFS-Fahrplandaten mit OpenStreetMap-Kartendaten. OTP wird als Server-Komponente betrieben und stellt Schnittstellen für Web- und Mobile-Anwendungen bereit.
OTP erzeugt aus den Eingabedaten einen Graphen des Verkehrsnetzes. Dieser Graph basiert auf Straßen- und Wegenetzen aus OpenStreetMap sowie Fahrplandaten im GTFS-Format. Auf dieser Grundlage sucht die Software nach sinnvollen Reiseketten, zum Beispiel „zu Fuß zur Haltestelle, mit der Bahn weiter, dann per Fahrrad zum Ziel“.
Mit OTP 2 wurde der Bereich des ÖPNV-Routings grundlegend überarbeitet. Die offizielle Versionsdokumentation beschreibt, dass die Routing-Komponente für den öffentlichen Verkehr in OTP2 neu geschrieben wurde und gegenüber OTP1 bessere Leistung in großen Verkehrsnetzen sowie mehr alternative Reisevorschläge bietet.
Siehe auch GraphQL
Die Datei build-config.json teilt OTP mit, welche Optionen beim Erstellen des zugrunde liegenden Graphen festgelegt werden sollen.
{
"configVersion": "wien-v1",
"dataImportReport": true,
"osmDefaults": {
"timeZone": "Europe/Vienna"
}
}
Die Datei router-config.json enthält Standardkonfigurationen für Routing-Anfragen (z. B. Gehgeschwindigkeit). Befindet sie sich im Router-Verzeichnis, wird sie beim Erstellen des Routing-Graphen verwendet.
{
"configVersion": "wien-v1",
"routingDefaults": {
"walk": {
"boardCost": 900
},
"accessEgress": {
"maxDurationForMode": {
"WALK": "PT10M"
}
}
}
}
# alle agencies curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ agencies { gtfsId name } }"}' # alle routen curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ routes { gtfsId shortName longName agency { name } } }"}' # alle agencies und alle routen curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ agencies { gtfsId name } routes { gtfsId shortName longName agency { name } } }"}' # alle feeds curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ feeds { feedId } }"}' # feeds mit publisher und agencies curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ feeds { feedId publisher { name } agencies { gtfsId name } } }"}' # alle stops curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ stops { gtfsId name lat lon vehicleMode } }"}' # stops im radius um koordinaten curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ stopsByRadius(lat:48.1857, lon:16.3747, radius:500) { edges { node { stop { gtfsId name lat lon vehicleMode } distance } } } }"}' # einzelner stop per ID curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ stop(id:\"1:1234\") { gtfsId name lat lon vehicleMode platformCode } }"}' # routen mit zugehörigen stopps curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ routes { gtfsId shortName longName agency { name } patterns { code stops { gtfsId name lat lon } } } }"}' # routen für bestimmtes datum curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ routes(serviceDates:{start:\"2026-04-12\", end:\"2026-04-12\"}) { gtfsId shortName longName agency { name } } }"}' # welche agencies sind wirklich im graph? curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ agencies { gtfsId name } }"}' # stopps rund um einen bahnhof / punkt curl -X POST "http://192.168.0.125:8080/otp/gtfs/v1" \ -H "Content-Type: application/json" \ -d '{"query":"{ stopsByRadius(lat:48.1857, lon:16.3747, radius:700) { edges { node { stop { gtfsId name lat lon vehicleMode } distance } } } }"}' =====Test===== <code bash> sudo apt update sudo apt install -y openjdk-25-jre-headless wget unzip java -version sudo mkdir -p /opt/otp sudo chown -R $USER:$USER /opt/otp cd /opt/otp wget https://github.com/opentripplanner/OpenTripPlanner/releases/download/v2.9.0/otp-shaded-2.9.0.jar -O otp.jar # Download PBF # Download gtfs.zip cat > /opt/otp/build-config.json <<'EOF' { "configVersion": "wien-v1", "dataImportReport": true, "osmDefaults": { "timeZone": "Europe/Vienna" } } EOF cat > /opt/otp/router-config.json <<'EOF' { "configVersion": "wien-v1", "routingDefaults": { "walkSpeed": 1.3 } } EOF java -Xmx6G -jar otp.jar --build --save . # Falsche Java Version... # sudo apt install -y openjdk-25-jre-headless # sudo update-alternatives --config java java -Xmx6G -jar otp.jar --build --save . # Dauert etwas java -Xmx6G -jar otp.jar --load .