⚠️ 📴 Offline-Modus – Alle Fahrplandaten verfügbar. Karte wird aus Cache geladen.
BusPilotDeutschland
📍 GPS
🔍 Suche
🚌 Linien
🏠 Zuhause
Von
📍
Nach
🎯
Datum
Abfahrt
🚌 Busse ab dieser Haltestelle jetzt
📍 Tracking-Punkte (0)
🔄
Umstieg-Planer – Wo muss ich umsteigen?
▼
Gib Start und Ziel ein – die App zeigt dir wo und wie du umsteigen musst. Beispiel: Balduinbrücke → Hauptbahnhof
📍 Von (Start)
⇄
🎯 Nach (Ziel)
🏠 Meine Haltestellen
Wähle deine Heimat-Haltestelle (Start) und dein Lieblings-Ziel. Diese werden beim nächsten Start automatisch geladen.
📍
Meine Start-Haltestelle
Noch nicht festgelegt
🎯
Mein Lieblings-Ziel
Noch nicht festgelegt
💡 Die Auswahl wird automatisch im Download-Ordner als BusPilot-Zuhause.txt gespeichert und beim nächsten Start geladen.
📖
Kurzanleitung BusPilot
✕
1
Von-Feld – Start-Haltestelle eingeben: Tippe im Feld „Von" deine Abfahrtshaltestelle ein, z.B. „Hauptbahnhof". Die App schlägt passende Haltestellen automatisch vor. Alternativ: 📡 GPS-Button drücken – die nächste Haltestelle wird automatisch erkannt und eingetragen.
2
Nach-Feld – Ziel eingeben: Tippe dein Reiseziel ins Feld „Nach". Du kannst auch direkt auf der Karte auf eine Haltestelle tippen – sie wird dann als Ziel übernommen.
3
Datum und Uhrzeit wählen: Stelle das gewünschte Datum und die Abfahrtszeit ein. Mit dem Knopf „🕐 Jetzt" wird automatisch die aktuelle Uhrzeit eingesetzt. Nach der Zeitauswahl zeigt die App welche Busse ab deiner Haltestelle abfahren.
4
Route berechnen: Drücke den blauen Knopf „Route berechnen". Die App sucht die schnellste Verbindung – direkt oder mit Umstieg – und zeigt mehrere Optionen an.
5
Route auf der Karte: Die berechnete Route wird farbig auf der Karte eingezeichnet. Umsteigepunkte sind orange markiert und zeigen die Liniennummern. Tippe auf eine Route um sie auszuwählen.
6
Route speichern: Drücke 💾 „Speichern" unter einer Route um sie zu sichern. Alle gespeicherten Routen findest du im Ordner-Bereich rechts – mit Mini-Vorschau auf der Karte.
7
🏠 Zuhause-Tab – Heimat-Haltestellen: Im Tab „Zuhause" kannst du deine feste Start- und Ziel-Haltestelle dauerhaft speichern. Beim nächsten Start werden sie automatisch geladen und eingetragen.
8
🎤 Sprach-Assistent: Drücke den Mikrofon-Button oben. Der Assistent fragt dich Schritt für Schritt: Von welcher Haltestelle? Wohin? Um wie viel Uhr? – alles per Sprache, ohne Tippen.
9
🕐 Uhrzeit-Button: Einmal drücken sagt die aktuelle Uhrzeit laut an. Zweimal schnell hintereinander drücken liest diese komplette Anleitung vor.
10
🅿 Park & Ride: Grüne P+R Marker auf der Karte zeigen Park-and-Ride Parkplätze. Antippen zeigt die verfügbaren Buslinien und die Anzahl der Stellplätze. Du kannst den P+R Platz als Startpunkt übernehmen.
11
📍 Tracking – Route aufzeichnen: Im Suche-Tab findest du den Tracking-Bereich. Starte die GPS-Aufzeichnung deiner Fahrt. Die Route kann anschließend als KML-Datei heruntergeladen und in Google Maps oder Google Earth geöffnet werden.
12
Was du noch machen kannst: Im Tab „🚌 Linien" siehst du alle Buslinien mit Haltestellen auf der Karte. Routen können als Textdatei heruntergeladen werden. Die App funktioniert auch offline mit den zuletzt geladenen Daten.
Diese Anwendung (BusPilot) ist eine statische HTML-Datei, die ausschließlich lokal im Browser des Nutzers ausgeführt wird. Es werden keine personenbezogenen Daten an externe Server übertragen oder dort gespeichert.
1. Erhobene Daten
Die App verarbeitet folgende Daten ausschließlich lokal auf dem Gerät des Nutzers:
GPS-/Standortdaten: Nur nach ausdrücklicher Zustimmung, ausschließlich zur Anzeige der nächstgelegenen Haltestelle. Keine Speicherung oder Übertragung.
Gespeicherte Routen & Einstellungen: Werden ausschließlich im localStorage des Browsers auf dem Gerät gespeichert – kein Serverzugriff.
Sprachsteuerung: Nur nach Aktivierung durch den Nutzer. Die Spracherkennung erfolgt über die Web Speech API des Browsers (ggf. Verarbeitung durch den Browserhersteller).
Tracking / KML: GPS-Punkte werden nur auf dem Gerät gespeichert und erst beim Export als Datei lokal heruntergeladen.
2. Externe Dienste
Die Kartenanzeige nutzt OpenStreetMap (Kacheln von tile.openstreetmap.org). Dabei kann die IP-Adresse des Nutzers an die OSM-Server übertragen werden. Es gelten die Datenschutzhinweise der OSMF. Fahrplaninformationen basieren auf Daten von koveb.de und VRM.de.
3. Keine Analyse, keine Werbung
Es werden keine Analyse-Tools (z. B. Google Analytics), Cookies oder Werbedienste eingesetzt.
4. Betroffenenrechte
Da keine personenbezogenen Daten auf externen Servern gespeichert werden, können Sie alle lokal gespeicherten Daten jederzeit selbst löschen (Browser-Einstellungen → Website-Daten löschen).
Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV
Ralf Devant, Koblenz
Haftungsausschluss
Die Fahrplaninformationen dieser App basieren auf öffentlich zugänglichen Daten von koveb.de und VRM.de. Trotz sorgfältiger Prüfung wird keine Gewähr für Richtigkeit, Vollständigkeit oder Aktualität der Verbindungsinformationen übernommen. Verbindliche Fahrplaninformationen erhalten Sie direkt bei koveb oder VRM.
ℹ️ Diese Anwendung ist kein offizielles Produkt von koveb oder VRM. Sie ist ein unabhängiges Open-Source-Hilfsmittel für Fahrgäste im Raum Koblenz.
⚙️
Betreiber-Information & Anpassung
BusPilot – Hinweise für Betreiber & Anpasser
BusPilot läuft als einzelne HTML-Datei ohne
Webserver, Datenbank oder Installation. Wer mehr will – eigene Liniendaten oder echte
Fahrplanzeiten – kann die unten beschriebenen PHP-Bausteine danebenlegen. Fehlen sie,
läuft die App mit ihren eingebauten Daten weiter.
🔧 Daten in der Datei
Linien und Haltestellen stehen im JavaScript-Bereich:
var LINES = [...] – Linien mit Nummer, Farbe, Name, Weg, Anbieter und Haltestellenfolge
var STOPS = {...} – Haltestellen mit Koordinaten [lat, lng]
var PARK_RIDE = [...] – Park-and-Ride-Plätze mit Linie und Stellplatzzahl
📄 linien.xml – Daten von außen
Liegt eine linien.xml im selben Verzeichnis, ersetzt sie beim Start die
eingebauten Linien. Den Aufbau zeigt „📄 Linien.xml" in der Fußzeile.
🌍 linien_holen.php – Linien aus OpenStreetMap
Holt Buslinien und Haltestellen serverseitig aus OpenStreetMap und schreibt sie in die
Datenbank. Der Abruf läuft auf dem Server, nicht im Browser – deshalb greifen weder
CORS-Sperren noch Zeitlimits.
Gebiet wählen: Rhein-Mosel oder eines der 16 Bundesländer
Das Gebiet wird in kleine Kacheln zerlegt und einzeln abgefragt
Der Stand wird nach jeder Kachel gespeichert – der Lauf ist unterbrechbar
Meldet Overpass die Anfragegrenze (HTTP 429), wird gewartet statt weitergefeuert
Schritt 4 schreibt zusätzlich eine fertige linien.xml
Rhein-Mosel dauert etwa vier
Minuten. Ein ganzes Bundesland kann Stunden brauchen – Overpass ist ein Spendenprojekt.
🔌 Die PHP-Bausteine im Überblick
buslines_api.php – liefert die Linien aus der Datenbank.
Diesen Namen fragt BusPilot beim Start von selbst ab; liegt die Datei da,
kommen die Linien von dort, ohne dass am Code etwas geändert werden muss.
halte_api.php – Haltestellen samt Koordinaten
linien_holen.php – füllt die Datenbank aus OpenStreetMap
gtfs_import.php – liest einen GTFS-Fahrplan ein (einmalig)
abfahrten_api.php – echte Abfahrtszeiten aus dem Fahrplan
🕐 Zu den Zeitangaben
Ohne abfahrten_api.php zeigt BusPilot eine Schätzung der Fahrzeit –
rund zwei Minuten je Haltestelle, fünf je Umstieg – und kennzeichnet sie als solche.
Das ist kein Fahrplan: Wartezeiten, Betriebszeiten und Feiertage sind darin nicht
enthalten. Erst mit importierten GTFS-Daten erscheinen echte Abfahrtszeiten, dann
grün als Fahrplan statt gelb als geschätzt.
🌐 Sprachen
Neue Sprachen kommen in var LANGS = {...}. Jede Sprache ist ein
Schlüssel (etwa "es") mit denselben Textschlüsseln wie die vorhandenen acht.
Die Kurzanleitung liegt unter dem Schlüssel guideSteps.
🎨 Aussehen
Farben und Abstände stehen als CSS-Variablen im :root { ... }
am Dateianfang:
--acc – Hauptfarbe (Blau #1a6fd4)
--acc2 – Akzentfarbe (Rot #d93a56)
--grn – Grün für Bestätigungen und P+R
📦 Ablegen
HTML-Datei auf einen beliebigen Webserver legen. Für die Offline-Nutzung muss
sw.js danebenliegen und die Seite über HTTPS ausgeliefert werden –
Service Worker laufen sonst nicht.
✅ Entwickelt von Ralf Devant – netzwerkbetreuer.de · Fragen & individuelle Anpassungen auf Anfrage.
📄
Aufbau der Datei Linien.xml
Die Datei Linien.xml erlaubt es, Fahrplandaten extern zu pflegen und unabhängig vom HTML-Code zu aktualisieren. Die App lädt diese Datei beim Start (sofern sie im gleichen Verzeichnis liegt).
Grundstruktur
<?xml version="1.0" encoding="UTF-8"?>
<linien version="3.0" erstellt="2026-07-27" region="Rhein-Mosel">
<!-- Je Linie ein Element, darin die Haltestellen in Fahrtreihenfolge -->
<linie num="1"
color="#c0392b"
name="Linie 1"
route="Altstadt ↔ Hbf ↔ Goldgrube"
anbieter="koveb">
<halt>Zentralplatz/Forum</halt>
<halt>Hauptbahnhof</halt>
<halt>Goldgrube</halt>
</linie>
<linie num="8" color="#2980b9" name="Linie 8"
route="Hbf ↔ Bendorf" anbieter="koveb">
<halt>Hauptbahnhof</halt>
<halt>Balduinbrücke</halt>
<halt>Bendorf Bahnhof</halt>
</linie>
</linien>
Zur Reihenfolge: Die Halte stehen in Fahrtreihenfolge. Daraus
leitet die App die Fahrtrichtung ab und findet Umstiege. Eine falsche
Reihenfolge führt zu unsinnigen Verbindungen.
Koordinaten der Haltestellen
Die linien.xml enthält nur Namen, keine Koordinaten. Die Positionen
holt sich BusPilot selbst: beim Zoomen auf der Karte und beim GPS-Klick werden
die Haltestellen im Umkreis aus OpenStreetMap nachgeladen. Wer sie fest
hinterlegen will, nutzt halte_api.php aus der Datenbank.
Elemente im Überblick
Element
Attribut
Beschreibung
<linien>
version, erstellt, region
Wurzelelement. Die Attribute sind rein informativ.
<linie>
num
Liniennummer, wie sie angezeigt wird (z.B. 1, N8)
color
Linienfarbe als HEX, z.B. #c0392b
name
Anzeigename der Linie
route
Kurzbeschreibung des Wegs, erscheint unter dem Namen
anbieter
Verkehrsunternehmen. Danach werden die Linien im Tab gruppiert.
<halt>
– (Textinhalt)
Haltestellenname, in Fahrtreihenfolge. Mindestens zwei je Linie.
💡 Tipp: Die Datei muss UTF-8-kodiert sein; Umlaute können direkt geschrieben werden. Wird keine linien.xml gefunden, nutzt BusPilot die eingebetteten Daten. Erzeugen lässt sie sich mit linien_holen.php (Schritt 4) oder der Linien-Werkbank.