in code

Die Bahnhofstrassen in jeder Schweizer Sprachregion

Letzhin hatte ich es bei einem Fiirabe-‘Getränk der Wahl’ von Bahnhofstrassen, wir diskutierten, ob’s ächt fast in jeder Gemeinde eine solche gibt.
Und welches ächt die längste Bahnhofstrasse der Schweiz ist.
Solche lustigen Fragen völlig over-engineered zu klären ist ja etwas, das ich gerne mache, drum das untenstehende.

Amanda Mc Cann hat ein Tool entwickelt, mit dem sogenante ways in OpenStreetMap zusammenzufassen und zu analysieren.
Im OpenStreetMap Datenmodell werden Strassen1 manchmal in einzelne Segmente aufgeteilt, wenn Eigenschaften daran unterschiedlich sind, wie beispielsweise die Marktgasse in Bern, die als 11 einzelne ways erfasst ist.

Amandas Tool osm-lump-ways fasst die aus datentechnisch getrennten Dinge wieder zusammen, und macht es möglich, damit etwas Datenjonglage zu betreiben.
Mit dem Tool ist es z.B. möglich, nach zusammenhängenden ‘Bahnhofstrassen’ zu suchen und diese der Länge nach zu sortieren.
Damit lässt sich die Eingangs gestellte Frage nach der längsten Bahnhofstrasse der Schweiz ziemlich einfach beantworten.

Das Tool installiert sich flink so (sofern vorher auch brew install rust gemacht wurde).

cd ~Dev
git clone git@github.com:amandasaurus/osm-lump-ways.git
cd osm-lump-ways
cargo install osm-lump-ways

Die Geofabrik bietet einen Service an, mit dem OpenStreetMap-Daten einfach runtergeladen werden können, sogenannte ‘Extracts`, die etwas einfacher im Handling sind, als die 132 GB an kompletten, komprimierten Daten.

Ein einfacher Befehl wie unten und schwupps sind die 424 MB OpenStreetMap-Daten nur aus der Schweiz auf der Festplatte.

wget https://download.geofabrik.de/europe/switzerland-latest.osm.pbf

Nachdem mit ./osm-lump-ways -h kurz die Hilfe des Tools durchgeschaut wurde ist es einfach, die längste Bahnhofstrasse der Schweiz rauszuklauben, nämlich mit ./osm-lump-ways -i switzerland-latest.osm.pbf -f highway -f name~"[b|B]ahnhof" -o ch-bahnhof.geojson --only-longest-n-per-file 1.
Der Aufruf sucht im neuesten Export aus der Schweiz nach allen highway-Tags, führt diejenigen mit dem Namen Bahnhofstrasse zusammen und schreibt die längsten zusammenhängenden davon in eine geoJSON-Datei.
“Leider” ist die so gefundene Bahnhofstrasse die als Fläche erfasste Fussgänger-zone am Bahnhof in Zürich und nicht ganz das was wir suchen.
Mit kurzer Nachhilfe von Amanda können wir den Aufruf durch -f highway?pedestrian2 erweitern um Trottoirs und Fussgängerzonen auszuschliessen.

Also liefert uns

./osm-lump-ways -i switzerland-latest.osm.pbf -f highway -f highway?pedestrian -f name~"[b|B]ahnhof" -o ch-bahnhof.geojson --only-longest-n-per-file 1
./osm-lump-ways -i switzerland-latest.osm.pbf -f highway -f highway?pedestrian -f name~"la [g|G]are" -o ch-gare.geojson --only-longest-n-per-file 1
./osm-lump-ways -i switzerland-latest.osm.pbf -f highway -f highway?pedestrian -f name~"[s|S]tazion" -o ch-stazion.geojson --only-longest-n-per-file 1
./osm-lump-ways -i switzerland-latest.osm.pbf -f highway -f highway?pedestrian -f name~"[s|S]taziun" -o ch-staziun.geojson --only-longest-n-per-file 1

die längste ‘Bahnhofstrasse’, die längste ‘Rue de la Gare’, die längste ‘Via della Stazione’ sowie die längste ‘Via de la Staziun’ jeweils als geoJSON-Datei.
Diese sind als Karte unten eingebunden.

Die längste ‘Bahnhofstrasse’ der Schweiz mit 3.14 km in Unterneuhaus (am Rand der Schweiz).


Die längste ‘Rue de la Gare’ der Schweiz mit 2.29 km in Sonceboz-Sombeval.


Die längste ‘Via della Stazione’ der Schweiz mit 1.69 km in Airolo.


Die längste ^Via de la Staziun’ der Schweiz mit 1.05 km in Pontresina.


Das Spiel können wir mit

./osm-lump-ways -i switzerland-latest.osm.pbf -f highway -f highway?pedestrian -f name~"[b|B]ahnhof" -o ch-bahnhof-all.geojson
./osm-lump-ways -i switzerland-latest.osm.pbf -f highway -f highway?pedestrian -f name~"la [g|G]are" -o ch-gare-all.geojson
./osm-lump-ways -i switzerland-latest.osm.pbf -f highway -f highway?pedestrian -f name~"la [s|S]tazion" -o ch-la-stazion-all.geojson
./osm-lump-ways -i switzerland-latest.osm.pbf -f highway -f highway?pedestrian -f name~"la [s|S]taziun" -o ch-la-staziun-all.geojson

wiederholen und wir haben dann jeweils alle solchen in einer jeweiligen Datei.
Diese alle geoJSON-Dateien schieben wir in eine sogenannte uMap und stellen für jede Sprachregion eine hübsche Farbe ein.
Und Voilà, eine Karte davon ist unten eingebunden zu sehen.

See full screen

Alle sprachregiongetrennten Bahnhofstrassen, die längste davon jeweils als besonders dick gezeichnet.


  1. Die eben als way abgebildet werden. ?
  2. Achtung, das “?” hier sollte ein “≠”, sein, genau wie Amanda hier schreibt, aber WordPress will das in Code-Zeilen nicht korrekt darstellen. ?

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.