Wie das gerechnet ist
Die Karte zeigt zwei Zahlen pro Haus: wie gut es an den ÖV angeschlossen ist und wie vielfältig das Kulturangebot in der Nähe ist. Beide kommen aus offenen Daten und einem Rechengang, der auf einem Laptop in wenigen Sekunden durchläuft. Hier steht, was dabei passiert.
ÖV-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 19.7 Minuten, im Median 29.9, 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 = ½ · ( d / v(s) + d / v(−s) )
d = Luftlinie · 1,35 s = Höhendifferenz / dDer Faktor 1,35 macht aus der Luftlinie eine plausible Wegstrecke. Ein echtes Wegnetz steckt nicht dahinter, deshalb ist die Zahl an Stellen mit Fluss oder Steilhang etwas zu optimistisch.
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’329 Orte aus OpenStreetMap in zehn Sorten: Cafés, Bars und Clubs, Bühnen, Kinos, Museen und Galerien, Kunst im Freien, 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 Kunst im Freien –, 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 die 1’434 Restaurants und die 525 Einträge «Kunst im Freien» –, 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’099 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 557 Starthaltestellen mal 830 Zielzellen, über 24 Abfahrtszeiten. Das sind rund 13’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, 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
- Fuss- und Velowege sind Luftlinie mal Umwegfaktor, kein echtes Wegnetz.
- 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.
Rasterweite, Abfahrtsfenster, Geh- und Velotempo, Umsteigezuschlag: alle Parameter stehen in einer einzigen Datei im Quellcode, pipeline/config.ts. Wer andere Annahmen für sinnvoll hält, ändert dort eine Zeile und lässt den Rechengang neu laufen.