Wasser fließt. Sein Weg verläuft dabei nicht chaotisch, sondern folgt den Gesetzen und Gegebenheiten der Natur. Quellen speisen kleine Bäche, die zu Flüssen anwachsen und letztendlich zu großen Strömen vereinigt in das Meer fließen. Dabei bilden sich Flussgebiete, die nach dem ins Meer mündenden Hauptfluss benannt sind.
Die interaktive Karte zeigt die Gewässer Mitteleuropas und ihre Zugehörigkeit zu einem der großen Flussgebiete.
Die Karte entstand aus aktuellen Daten von OpenStreetMap. Die entsprechend dem Flussgebiet eingefärbten Wasserwege stehen im Vordergrund. Über das Layermenü rechts oben lassen sich verschiedene Hintergründe auswählen: Entweder die originale OpenStreetMap Karte oder eine auf das Wesentliche reduzierte «Topo» Karte, die als Basis ein gefärbtes und schattiertes Höhenrelief hat und zusätzlich Eisen- und Autobahnen sowie Ortsmarken zur Orientierung darstellt.
Außerdem bindet meine Anwendung GEOPosition die Flussgebiete als zusätzliches Overlay ein.
Grundlage der Kartenberechnung ist der tagesaktuelle OpenStreetMap-Datensatz, den man von Geofabrik herunterladen kann. Mehrere auf der Osmium Library basierende Tools extrahieren daraus die interessierenden Daten, hier also vor allem die Wasserwege und ihre OSM-IDs. Damit erfolgt eine Weiterverarbeitung durch einen im Rahmen dieses Projektes entwickelten Algorithmus:
OpenStreetMap stellt Wasserwege als Linienzüge (way) mit dem Attribut waterway dar. Sie bestehen aus einzelnen Knoten (node), deren geografische Koordinaten den Verlauf des Wasserwegs festlegen. Neben Attributen und Koordinaten besitzen sowohl nodes als auch ways eindeutige IDs. Stehen zwei Wasserwege miteinander in Verbindung, dann haben Sie einen gemeinsamen Knoten, der durch seine ID eindeutig bestimmbar ist.
Der Algorithmus zur Bestimmung der Flussgebiete verwendet nun genau diese IDs. Ausgehend von einem Linienzug eines bekannten Wasserwegs (zum Beispiel way 102135980 für ein Teilstücks des Rheins) ermittelt man alle enthaltenen IDs der Knoten. Diese IDs sucht man dann in der Restmenge aller Knoten aller Wasserwege. Ist die Suche erfolgreich, dann mündet der zugehörige Wasserweg in den Rhein und gehört damit zu seinem Flusssystem. Die auf diese Art und Weise gefundenen neuen Wasserwege gehen als Eingabe in die nächste Runde der Suche. Das wird für alle Flussgebiete solange fortgeführt, bis sich keine neuen Wasserwege mehr finden lassen.
Der Algorithmus wurde als Java-Programm implementiert. Er lässt sich sehr gut parallelisieren und nutzt optimal alle zur Verfügung stehenden CPU-Kerne. Als Ergebnis entsteht eine Tabelle, welche die IDs der Wasserwege auf die Namen der Flussgebiete abbildet. Ein weiteres Tool führt diese Daten mit der Geometrie der Wasserwege zusammen und erzeugt daraus eine SpatiaLite-Datei.
Das Rendern der SpatiaLite-Datei erfolgt Online auf dem Server mit Mapnik, renderd und mod_tile. Die Visualisierung der Karte im Browser übernimmt schließlich Leaflet.
Wasserscheiden bilden natürliche Grenzen zwischen den Flussgebieten. Jedoch gibt es auch Wasserwege, die Wasserscheiden überwinden! Das sind in erster Line künstlich entstandene Kanäle und Stollen; aber auch natürliche Bifurkationen bilden Wasserscheiden.
Der beschriebene Algorithmus zur Flussgebietsberechnung berücksichtigt Wasserwege, die Wasserscheiden sind. Die IDs solcher Wege habe ich per Hand aus den OSM Daten ermittelt und in eine Blacklist eingetragen. Der Suchalgorithmus prüft in jeder Runde, ob ein neu gefundener Wasserwege in dieser Blacklist steht und bricht dann ab. Auf der Karte sind diese Stellen durch eine besondere Farbe (siehe Kartenlegende) gekennzeichnet.
Auf der Karte sind einige Wasserwege grau gekennzeichnet. Für diese konnte der Algorithmus keine Zuordnung zu einem Flusssystem bestimmen. Das kann verschiedene Ursachen haben:
So ist es möglich, dass ein Wasserweg überhaupt nicht mit den großen Strömen in Verbindung steht. Das kann natürliche Ursachen haben, wenn ein Fluss in ein endorheisches Gebiet entwässert. Häufiger ist jedoch, dass der Gewässerverlauf nicht bekannt ist, weil er zum Beispiel unterirdisch oder über gesperrte Flächen verläuft. Es entstehen dann Lücken in den Daten, die jedoch hoffentlich im Laufe der Zeit noch ausgefüllt werden.
Auch treten Fehler beim Editieren auf. Typische Situationen zeigen die Abbildungen: Links ist die Mündung eines Baches in einen größeren Fluss zu sehen. Solche größeren Flüsse haben neben der durch einen Linienzug (waterway=river) gekennzeichneten Hauptsrömung noch eine umgebende Fläche, die die genaue Gestalt des Flussbetts beschreibt (waterway=riverbank). Oftmals lässt der Editor dann den Linienzug des Bachs bereits am Flussbett enden, anstatt ihn bis zur Hauptströmung durchzuziehen (Abb. links unten). Eine weitere häufige Fehlerquelle ist, wenn zwei Linienzüge nur «auf den ersten Blick» verbunden sind, in Wirklichkeit aber in zwei dicht nebeneinanderliegenden Punkte enden (siehe Abb. rechts).
Eine Besonderheit ist die Mündung von Flüssen in einen See. Man könnte dies zwar als Spezialfall der Mündung eines Baches in einen Fluss sehen, jedoch gab es lange keine explizite Mappingvorschrift hierfür. Dementsprechend unterschiedlich handhabten die Kartografen diese Situation: Im Starnberger See (Abb. links unten) ist die Hauptströmung (als dicke braune Line) durchgezogen und alle Nebenflüsse sind mit ihr verbunden. Ein anderes Bild bietet dagegen der Tegernsee (Abb. links oben). Hier enden alle Zuflüsse am Seeufer und sind nicht über Linienzüge miteinander verbunden.
Mittlerweile empfiehlt das OSM Wiki, die in einen See mündenden und abgehenden Flüsse miteinander zu verbinden und mit dem Tag waterway=flowline zu kennzeichnen.
Der Algorithmus berücksichtigt nun diese Fälle, indem er auch alle Flächen mit in die Berechnung einbezieht, die durch Linien oder Multipolygone mit dem Attribut natural=water gekennzeichnet sind. Im Bild links oben sind daher auch alle Zuflüsse des Tegernsees korrekt durch ihre braune Farbe als zugehörig zum Flussgebiet der Donau markiert.
In küstennahen Gewässern ist die Situation ähnlich: Hier münden viele Flüsse und Bäche direkt ins Meer, ohne in Kontakt mit dem Hauptfluss zu kommen. Zum Beispiel mündet die Recknitz direkt in die Ostsee, gehört aber zum Flusssystem der Warnow. Das Programm zieht daher auch die Küstenlinien (natural=coastline) zur Berechnung von Verbindungen zwischen Flüssen heran.
Die Karte der Flussgebiete Mitteleuropas entstand ausschließlich unter Verwendung freier Daten und Software. Sie ermöglicht es interessierten Benutzern, interaktiv die Wege des Wassers zu erkunden. Außerdem ist eine visuelle Kontrolle der Qualität der OSM-Daten für Wasserwege möglich. Bestehende Lücken und Fehler in der Datenerfassung lassen sich relativ einfach lokalisieren und mögen hoffentlich den ein oder anderen Mapper dazu inspirieren, weiter an der Verbesserung des großartigen Projekts OpenStreetMap zu arbeiten!