Auf der Startseite von angebunden findest du das Velonavi Zürich: einen Veloroutenplaner für schnelle und komfortable Strecken durch die Stadt. Die Erreichbarkeitskarte Zürich und die Karten für Basel und Bern zeigen, wie gut jedes Haus an Tram, Bus und Bahn angebunden ist und welches Kulturangebot in Geh- oder Veloweite liegt. Dazu kommt die Wohnungssuche in Zürich.
Angefangen hat es als Idee an einem Samstagabend, die mein Mitbewohner Leo und ich dann gleich durchgeplant haben. Kontakt.
Wie das gerechnet ist
Alle Zahlen kommen aus offenen Daten und einem Rechengang, der auf einem Laptop in wenigen Sekunden durchläuft. Hier steht, was dabei passiert.
Das ganze Projekt ist Open Source.
Direkt zur Berechnung der Velorouten oder zur Berechnung der ÖV-Erreichbarkeit.
Erreichbarkeit
Die Kennzahl ist die mittlere Reisezeit von diesem Haus zu einer beliebigen Adresse der Stadt, Türe zu Türe. Man zieht gedanklich eine zufällige Zürcher Adresse und fragt, wie lange man mit Tram, Bus und S-Bahn im Schnitt dorthin braucht. Für das bestangeschlossene Haus sind es 20.5 Minuten, im Median 30.7, am Stadtrand über 45.
Als Ziele dient nicht jede einzelne Adresse, sondern ein Raster aus 300-Meter-Zellen. 830 davon enthalten Adressen. Der Zielpunkt einer Zelle ist der Schwerpunkt ihrer 57’507 Adressen, nicht die Zellmitte. Jede Zelle wiegt so schwer, wie viele Adressen in ihr liegen.
score(Haus) = Σ w(Zelle) · t(Haus, Zelle)
────────────────────────────
Σ w(Zelle)w ist die Anzahl Adressen in der Zelle, t die Reisezeit dorthin. Weil durch die Summe der Gewichte geteilt wird, bleibt der Wert eine Zeit und keine aufsummierte Grösse. 30 Minuten heisst: eine zufällig gezogene Adresse liegt im Schnitt 30 Fahrminuten weg. Der dicht bebaute Kreis 4 zieht den Schnitt stärker als der Wald am Uetliberg, wo kaum jemand wohnt.
Für jede Zelle nimmt der Rechengang den schnelleren von zwei Wegen: zu Fuss direkt, oder zu Fuss zur Haltestelle, dann ÖV, dann zu Fuss zum Ziel.
t(Haus, Zelle) = min( Fussweg direkt,
Fussweg zur Haltestelle + ÖV + Fussweg ans Ziel )Pro Haus kommen die acht nächsten Haltestellen infrage, bis 800 Meter Fussweg. Die ÖV-Zeit enthält Wartezeit, Fahrt und Umstiege. Jeder Umstieg kostet zwei Minuten Zuschlag, zusätzlich zur echten Wartezeit, und mehr als vier Umstiege probiert der Router nicht. Reisezeiten über 90 Minuten werden gekappt. Sonst würde eine einzelne kaum erreichbare Ecke den ganzen Schnitt eines Hauses verzerren.
Eine feste Abfahrtszeit gibt es nicht. Der Rechengang nimmt 24 Abfahrten im Fünfminutentakt zwischen 7:00–9:00 Uhr an einem Dienstag und mittelt über alle. So landet die Taktdichte in der Zahl: wer alle sieben Minuten eine Verbindung hat, wartet im Schnitt kürzer als jemand mit Halbstundentakt. Der Analysetag ist der Dienstag, 08.09.2026, ein normaler Schultag.
Wege mit Steigung
Fusswege sind nicht flach gerechnet. Grundlage ist Toblers Wanderfunktion. Die Gehgeschwindigkeit fällt exponentiell mit der Steigung, am schnellsten geht es bei rund fünf Prozent Gefälle. Nicht in der Ebene.
v(s) = v₀ · exp(−3,5 · |s + 0,05|) / exp(−3,5 · 0,05)v₀ ist 1,3 m/s, also 4,7 km/h in der Ebene. Der zweite Faktor normiert die Funktion auf genau diesen Wert. Toblers Originalkonstante von 6 km/h gilt für Wanderer im Gelände und wäre für den Weg zur Tramhaltestelle zu schnell.
Gerechnet wird das Mittel aus Hin- und Rückweg. Ein Haus am Zürichberg stünde sonst zu gut da, weil der Weg zur Haltestelle hinunter schnell geht. Wer dort wohnt, geht beide Richtungen.
Fusszeit = Σ_Segment ½ · ( d / v(s) + d / v(−s) )
d = Segmentlänge s = Höhendifferenz / dDie kurzen Wege zum Kulturort, zur Haltestelle und von der Haltestelle ans Ziel laufen über das Fusswegnetz aus OpenStreetMap. Brücken, Treppen und Unterführungen zählen; ein Haus hinter dem Fluss nimmt den Umweg über die Brücke. Steigung wird Segment für Segment gerechnet, das Auf und Ab bremst mehr als ein Mittelwert. Nur der lange „alles zu Fuss"-Vergleichswert der ÖV-Kennzahl bleibt Luftlinie mal Umwegfaktor 1.35. Ihn zu routen brächte für eine Zahl, die der ÖV fast immer schlägt, wenig.
Für die Kulturvielfalt zählen standardmässig 15 Gehminuten. Velo bleibt als Umschalter verfügbar und folgt demselben Muster mit einer anderen Kurve: Das Velotempo fällt monoton mit der Steigung, bergauf stark gebremst und bergab auf ein Stadttempo gedeckelt.
v(s) = min( 6,5 , 4,4 · exp(−10 · s) ) in m/s4,4 m/s sind rund 16 km/h in der Ebene, Stadtverkehr mit Halten. Fünf Prozent Steigung drücken das Tempo um etwa 40 Prozent; der Deckel bei 6,5 m/s (23 km/h) verhindert, dass eine lange Abfahrt die Zahl schönrechnet. Auch hier wird aus Hin- und Rückweg gemittelt.
Die Höhen stammen aus den frei nutzbaren Terrain-Kacheln von AWS. Die Höhe steckt dort in den Farbkanälen eines PNG:
h = R · 256 + G + B / 256 − 32768 (Meter über Meer)Für die Schweiz kommen die Daten aus dem swisstopo-Höhenmodell. Auf Zoomstufe 13 liegen die Rasterpunkte etwa 19 Meter auseinander. Das reicht, um zu wissen, ob ein Weg bergauf oder bergab führt. Für einzelne Treppen reicht es nicht, und das ist auch nicht das Ziel.
Kulturvielfalt
Die zweite Zahl misst, wie vielfältig das Kulturangebot in der Nähe ist. Grundlage sind 3’323 Orte aus OpenStreetMap in zehn Sorten: Cafés, Bars und Clubs, Bühnen, Kinos, Museen und Galerien, öffentliche Kunst, Bibliotheken, Badis, Quartiertreffs und Restaurants. Standardmässig zählt die Karte Orte in 15 Gehminuten; in der Karte lässt sich auf 10 Velominuten umstellen.
Vorgabe sind alle zehn Sorten. Abwählen lohnt sich bei den zahlreichsten, Restaurants und öffentliche Kunst: sonst misst die Karte in der Innenstadt vor allem deren Dichte. Welche Sorten zählen, stellt man in der Karte selbst ein.
Angezeigt wird die blosse Anzahl, weil man sie sofort versteht. Sortiert und eingefärbt wird nach einem Index: je Sorte werden die erreichbaren Orte mit der Reisezeit abklingend gezählt, dann werden die Sorten nicht addiert, sondern mit der Wurzel zusammengefasst.
n(Sorte) = Σ exp(−t / τ) über die Orte der Sorte mit t ≤ t_max
vielfalt(Haus) = Σ √( n(Sorte) ) über die gewählten SortenDie Wurzel bremst jede einzelne Sorte: die zwölfte Bar zählt kaum noch, das erste Museum viel. Ein Haus mit einem Angebot aus jeder Sorte schlägt so eines mit dreissig Cafés und sonst nichts. Ohne diesen Kniff zählt am Ende, wovon es zufällig am meisten gibt. In Zürich sind das die 1’434 Restaurants und die 521 Einträge «Öffentliche Kunst», und die Karte zeigt bloss noch, wie nah die Altstadt liegt. Mit der Wurzel treten die Quartierzentren hervor.
Warum das in Sekunden rechnet
Der naive Weg wäre, für jedes Häuserpaar eine Verbindung abzufragen. Bei 47’085 Häusern sind das 2.2 Milliarden Paare. Mit einer Routing-API ist das weder zeitlich noch preislich machbar. Drei Sachen bringen es auf wenige Sekunden.
Erstens ein eigener Router statt einer API. RAPTOR arbeitet direkt auf dem Fahrplan, rundenweise nach Anzahl Umstiegen statt mit einer Prioritätswarteschlange. Ein Lauf über das Zürcher Netz mit 1’893 Haltestellen und 30’583 Fahrten pro Tag dauert wenige Millisekunden und liefert die Ankunftszeit an allen Haltestellen auf einmal.
Zweitens hängt die Reisezeitmatrix an den Haltestellen, nicht an den Häusern. Gerechnet wird 564 Starthaltestellen mal 830 Zielzellen, über 24 Abfahrtszeiten. Das sind rund 14’000 Routing-Läufe statt Milliarden.
Drittens erben die Häuser diese Zeiten. Jedes Haus nimmt die Werte seiner Zustiegshaltestellen und addiert nur den eigenen Fussweg. Das ist eine Minimumbildung über Zahlenreihen, kein Routing mehr.
Datenquellen
| Fahrplan | opentransportdata.swiss, GTFS Fahrplanjahr 2026 |
|---|---|
| Gebäude, Adressen, Strassen, Fusswege, Gewässer, Kulturorte | OpenStreetMap über overpass.osm.ch |
| Höhen | AWS Terrain Tiles, für die Schweiz aus dem swisstopo-Höhenmodell |
Alles offen und kostenlos, nichts davon braucht einen API-Schlüssel. Die Google-Distance-Matrix-API rechnet pro Element ab und läge schon für eine grob vereinfachte Variante im sechsstelligen Frankenbereich, bei Daten, die als GTFS ohnehin frei verfügbar sind.
Was vereinfacht ist
- Die kurzen Fuss- und Velowege laufen über das OSM-Wegnetz; das Velonetz lässt nur die Treppen weg, Radwege und Einbahnen sind nicht fein modelliert. Der lange „alles zu Fuss"-Vergleichswert bleibt Luftlinie mal 1,35.
- Die Perrons einer Haltestelle sind zu einem Knoten zusammengefasst. Der Umstieg im Hauptbahnhof fällt dadurch etwas zu günstig aus; der Zwei-Minuten-Zuschlag federt das teilweise ab.
- Gerechnet ist ein Dienstagmorgen. Abend, Nacht und Wochenende sehen anders aus.
- Es ist der Sollfahrplan. Verspätungen und verpasste Anschlüsse kommen nicht vor.
Velonavi
Der Velonavi rechnet auf dem Fuss- und Velowegnetz der Stadt Zürich. Das sind rund 38'700 Wegstücke mit Angaben dazu, ob Velos fahren dürfen, in welche Richtung eine Einbahn gilt und auf welcher Seite ein Velostreifen liegt. Dazu kommen 1'015 Abbiegeverbote. Jedes Wegstück bekommt aus weiteren Quellen das signalisierte Tempo, die Strassenklasse, den Belag, Brücken und Tunnels, Tramgleise in der Fahrbahn, die Zugehörigkeit zu Vorzugsroute oder Hauptnetz der städtischen Velonetzplanung, die Höhenmeter und die polizeilich registrierten Velounfälle seit 2016.
Aus Tempo, Strassenklasse und Velostreifen ergibt sich je Fahrtrichtung eine Stufe von 1 bis 4, angelehnt an das Schema «Level of Traffic Stress». Ein durchgehender Velostreifen zählt dabei viel: Mit Streifen ist eine Tempo-50-Strasse Stufe 1, auf der grossen Hauptachse Stufe 2. Drei Fahrspuren und mehr ohne Streifen ergeben ab Tempo 50 immer Stufe 4, Abbiegespuren an einer Tempo-30-Kreuzung dagegen nicht. Dazu kommt, was mit Autoverkehr nichts zu tun hat: Kopfsteinpflaster hebt eine Strecke um zwei Stufen, Tramgleise ohne eigenen Streifen ebenfalls um zwei, Fussgängerzonen mindestens auf Stufe 2. Die Gassen um das Grossmünster sind autofrei und trotzdem keine Strecke, auf der man gerne fährt. Stufe 1 ist ein abgetrennter Veloweg oder eine glatte Tempo-30-Nebenstrasse, Stufe 4 Mischverkehr auf Tempo 50, Gleise ohne eigene Spur oder grobes Pflaster. Die Farben der Route auf der Karte zeigen diese Stufen.
Was ein Velo aufhält, zählt in Sekunden: Pfosten 3, Schranken 8, Drängelgitter 15, Umlaufgitter und Drehkreuze 45 bis 60, Bahnübergänge 6, eine Fahrbahn ohne Ampel queren 3. Die Standorte kommen aus OpenStreetMap, 9'877 davon liegen auf einer Kante des Netzes. Wege durch Gebäude fallen ganz aus dem Netz: Das Netz der Stadt enthält Bahnhofshallen, Perrons, Ladenpassagen und Lifte, weil es auch dem Fussverkehr dient. Mit dem Velo schiebt dort niemand durch.
Gesucht wird im Browser mit A* über gerichtete Wegstücke statt über Kreuzungen. Nur so kennt der Router an jeder Kreuzung die Richtung, aus der man kommt. Bei den 419 städtischen Signalknoten schätzt er die Grünzeit aus den Strassen, die sich dort kreuzen: Jede Achse bekommt Grün im Verhältnis zu ihrem Verkehr, und breite Strassen verlängern den Umlauf. An 120 dieser Kreuzungen kommt der Verkehr aus der Verkehrszählung der Stadt, die an ihren Lichtsignalanlagen die Fahrzeuge je Stunde erfasst. An den übrigen ergibt er sich aus Strassenklasse und Fahrspuren. Wer auf einer Nebenachse eine vierspurige Hauptstrasse quert, wartet so gegen eine Minute, entlang der Hauptachse oft nur wenige Sekunden. Im Mittel sind es 22 Sekunden. Links abbiegen heisst indirekt abbiegen, also zweimal warten, rechts abbiegen kostet 1 Sekunde. Signalpläne und gemessene Grünzeiten veröffentlicht die Stadt nicht. Jedes Abbiegen kostet zusätzlich einige Sekunden, sonst führt der Weg in Rasterquartieren im Zickzack durch die Blöcke. Eine Hauptstrasse ohne Ampel zu queren kostet ebenfalls.
Die Fahrzeit rechnet mit 23 km/h in der Ebene, 3.2 Sekunden zusätzlich je Höhenmeter bergauf und höchstens 34 km/h bergab. Auf Fusswegen und in Begegnungszonen sind es höchstens 15 km/h. Kopfsteinpflaster und Kies bremsen. Grobes Pflaster kostet zusätzlich: Es drückt das Tempo auf zwei Drittel und wiegt in der Bewertung so schwer wie ein Umweg von gut einem Drittel der Strecke. Die beiden Varianten unterscheiden sich nur darin, wie stark Verkehr, Steigung, Ampeln und Belag zusätzlich zur Zeit zählen. «Schnell» achtet fast nur auf die Zeit. «Komfort» meidet Verkehr, Gleise und Pflaster deutlich und nimmt dafür rund 7% mehr Fahrzeit in Kauf. Über acht Testrouten quer durch die Stadt fährt «Schnell» 32% der Strecke auf Stufe 3 oder 4, «Komfort» 12%. Vorzugsrouten bekommen 15% Rabatt, das Hauptnetz 5%.
Wer im Velonavi Fahrten aufzeichnet, bekommt Fahrzeiten, die sich nach den eigenen Messungen richten. Der Velonavi legt jede aufgezeichnete Spur auf das Velonetz und misst, wie lange jeder Abschnitt gedauert hat und wie lange du vor jeder Ampel gestanden bist. Daraus entstehen drei Korrekturen: Dein Tempo im Verhältnis zu den 23 km/h des Modells, ein Faktor für jeden befahrenen Abschnitt und eine Wartezeit für jede Ampel, getrennt nach Anfahrtsrichtung und Manöver. Ob eine Ampel grün ist, entscheidet der Zufall, deshalb verschiebt eine einzelne Fahrt ihre Wartezeit nur um die Hälfte. Fährst du eine eigene Strecke schneller, als «Schnell» für seinen Vorschlag rechnet, werden ihre Abschnitte schneller und der nächste Vorschlag rückt an deine Strecke heran. Aus einer einzelnen Fahrt lässt sich nicht trennen, ob du schnell fährst oder ob die Strecke schnell ist. Zu Beginn schreibt der Velonavi die Abweichung deshalb der Strecke zu. Nach rund zwei Stunden aufgezeichneter Fahrzeit bestimmt die Messung dein Tempo zu vier Fünfteln.
Der Velonavi vergleicht Fahrten auch untereinander. Ähnlich ist eine Fahrt, wenn sie in der Nähe beginnt und endet oder zu grossen Teilen auf denselben Kanten liegt, die genaue Adresse spielt keine Rolle. Dazu kommen Teilstrecken: Wo du zwischen zwei Kreuzungen schon auf verschiedenen Wegen gefahren bist, steht der schnellere zuerst.
Auf Wunsch lernt der Velonavi auch aus den Fahrten anderer. Wer mitmacht, schickt keine Fahrt, sondern einzelne Messwerte: je Abschnitt das Verhältnis der gefahrenen zur erwarteten Zeit, je Ampel die Wartezeit. Jeder Wert steht für sich, ohne Zeitpunkt, Kennung und Reihenfolge, und die ersten und letzten 150 Meter einer Fahrt fehlen. Die Datenbank gibt einen Wert erst weiter, wenn mindestens fünf Messungen dazu vorliegen. Ein einzelner Wert lässt sich so keiner Person und keiner Fahrt zuordnen. Mitmachen ist standardmässig eingeschaltet und lässt sich im Menü jederzeit ausschalten. Es gehen nur Messwerte aus Velofahrten weg, nie ein Weg zu Fuss oder im Fahrzeug.
Die Grundkarte des Velonavi ist die Basiskarte der Stadt Zürich. Sie kommt direkt vom Kartendienst der Stadt, dein Browser fragt dort also die Kartenausschnitte ab. Start und Ziel bleiben im Browser.
Was gespeichert wird
Ein Konto braucht es nicht, und Cookies setzt die Seite nie. Die Adresssuche rechnet im Browser, und welches Haus du dir ansiehst, bleibt dort. Es steht im Link hinter dem # und wird nie an einen Server geschickt.
Aufgezeichnete Spuren werden auf deinem Gerät gespeichert, in der Datenbank des Browsers oder der Android-App, und dort ausgewertet, verglichen und fürs Lernen gerechnet. Was das Gerät darüber hinaus verlässt, steht in den beiden Absätzen unten. Die Android-App zeichnet auf Wunsch im Hintergrund auf und erkennt von selbst, wenn du Velo fährst. Dafür braucht sie den Standort «immer» und die Bewegungserkennung, und eine sichtbare Benachrichtigung zeigt, wenn sie aufzeichnet. Gespeichert werden nur Velofahrten. Einzelne Fahrten oder alle zusammen löschst du im Velonavi selbst.
Zwei Dinge gehen darüber hinaus. Das Beitragen von Messwerten, wie oben beschrieben, ist standardmässig an und braucht kein Konto. Die Sicherung im Konto gibt es erst, wenn du dich anmeldest; dann ist sie an und lässt sich im Menü ausschalten: Damit die Fahrten auf einem neuen Gerät wieder da sind, wird deine E-Mail-Adresse gespeichert und eine Kopie jeder Velofahrt, vollständig mit Spur, Start und Ziel und Zeit. Beides liegt bei Supabase in einer Datenbank in Zürich. Jedes Konto kann nur die eigenen Fahrten lesen, die Messwerte kann niemand einzeln lesen. Die Anmeldung steht im Speicher des Browsers und nicht in einem Cookie. Das Konto lösche ich auf ein E-Mail an die Adresse unter Kontakt.
Eine Zahl wird doch gezählt: wie viele Leute pro Tag da sind. Das übernimmt GoatCounter, cookielos. Die Kennung ist ein täglich wechselnder Hash aus IP und Browser, den niemand dauerhaft speichert; kein Profil über mehrere Seiten, keine Weitergabe. Die Tageszahlen liegen offen auf GitHub im Zweig besucherzahlen.
Die Seite selbst ist ein Ordner statischer Dateien. Beim Hoster bleiben ausserdem die Zugriffslogs mit IP und Zeitpunkt, wie bei jeder Website.
Open Source
Der ganze Code liegt auf GitHub: github.com/moritzlauper/angebunden.
Rasterweite, Abfahrtsfenster, Geh- und Velotempo, Umsteigezuschlag: Alle Parameter stehen in einer einzigen Datei, pipeline/config.ts. Wer andere Annahmen für sinnvoll hält, ändert dort eine Zeile und lässt den Rechengang neu laufen.
Medien, Redaktionen und alle anderen dürfen die Karte, Screenshots davon und die Zahlen verwenden. Als Quellenangabe reicht angebunden.ch.
Der Code steht unter der MIT-Lizenz. Die Kartendaten unter public/data/ stammen aus OpenStreetMap und bleiben unter der Open Database License: Wer sie weiterverwendet, nennt OpenStreetMap und stellt abgeleitete Datenbanken wieder unter die ODbL.
Kontakt: Moritz Lauper, moritz.lauper@hispeed.ch oder LinkedIn.
Studienwahl: wasstudieren.ch