User:Maxbe/Dominanz von Gipfeln

From OpenStreetMap Wiki
Jump to navigation Jump to search

Worum gehts?

Karten aus OSM-Daten stellen Berge häufig nicht so dar, wie man es erwarten würde. Gipfel werden z.B. bei Zoom 11 eingeblendet und erscheinen dann alle auf einmal. Sie überdecken sich gegenseitig, weil sie auf diesem Zoomlevel recht dicht gedrängt stehen, "unwichtige" Gipfel verdrängen "wichtige" und andere Elemente, etwa kleine Siedlungen verhindern die Darstellung "wichtiger" Gipfel. Wünschenswert wäre ein Verfahren, das die "wichtigkeit" eines Berges misst und eine Darstellung, die z.B. den Großglockner und den Ortler auf einer Karte der Ostalpen schon anzeigt, wenn ein Nebengipfel in den Voralpen noch nicht erscheint. Diese beiden Gipfel sollen dann vielleicht sogar die Beschriftung eines Dorfes oder eines Bahnhofs in der Nachbarschaft verhindern.

Wichtiger Gipfel?

Als wichtig betrachtet man üblicherweise Berge, die die höchsten eines Gebirges, einer Gebirgsgruppe, einer Insel oder eines Staates sind. Ausserdem soll der Gipfel deutlich aus der Umgebung herausragen. Daneben gibt es natürlich noch "weiche" Kriterien, wie "schöne Form", "interessanter, schwieriger oder leichter Anstieg", "Wohnort berühmter mystischer Wesen" oder "tolle touristische Infrastruktur am Gipfel".

Die "weichen" Kriterien sind aus den Daten nicht zu errechnen. Politische Gliederungen sind zumindest für Topographische Karten eher nebensächlich, schliesslich geht es da um Topographie. Leider kriegen wir "deutlich aus der Umgebung herausragen" auch nicht leicht aus den Daten raus. Dazu müsste man den Graten folgen, um die Schartenhöhe und irgendeine Art von Prominenz zu berechnen. Das sind recht komplizierte Berechnungen und bei fast einer halben Million Gipfel in OSM Aufgabe eines eigenen Projekts.

Was bleibt und realistischerweise als Masszahl für die Bedeutung zu berechnen ist, ist die Dominanz eines Gipfels.

Dominanz

Maxbe dominanz uebersicht.png

Die Dominanz eines Gipfels ist der Abstand zum nächstgelegenen Punkt, der höher liegt als der Gipfel. Dieser nächstgelegene Punkt ist in aller Regel selbst kein Gipfel, sondern liegt irgendwo am Hang eines Nachbargipfels.

Alleine die Entfernung zum nächsthöheren Gipfel zu berechnen, brächte gerade bei kleinen Bergen (Der A-Berg im Bild rechts) eine deutlich zu hohen Wert. Kleine Gipfel in Talnähe sind recht weit von den Gipfeln der hohen Berge entfernt, allerdings würde man scon ein paar Meter entfern auf den Hang des grossen Berges stossen.

Trotzdem ist die Berechnung des Gipfelabstandes ein nützlicher erster Schritt. Zur Berechnung der Dominanz müssen nämlich sämtliche Höhenwerte der Umgebung betrachtet werden und da ist es gut, die Ausdehnung dieser Umgebung etwas einschränken zu können. Der Abstand zum nächstgelegenen höheren Gipfel begrenzt auf jeden Fall diese Umgebung. Sollte sich in diesem Umkreis kein höherer Punkt finden, sind die Höhendaten oder Position und Tags der Gipfel falsch.


Das Programm

  • ist in C geschrieben, weil das die einzige Sprache ist, die ich kann und für die die libgdal-Bibliothek zur Verfügung steht. Diese bracht man, um GeoTiffs mit den Höhendaten zu lesen.
  • benötigt eine Liste von Gipfeln als csv-Date (id;lon;lat;ele) und ein DEM in Form einer GeoTiff-Datei mit Höhenwerten (1 Band, int16, EPSG:4326) in einer Abdeckung so gross wie der Bereich der Gipfel mit zusätzlichem Rand, um auch die Randgipfel berechnen zu können.
  • liest diese Liste der Gipfel ein, speichert Koordinaten und Höhe. Sollte keine Höhe gemappt sein, wird der nächstgelegene Höhenwert aus dem DEM genommen. Das gleiche passiert, wenn die Höhe nicht als Zahl interpretiert werden kann.
  • sortiert die Gipfel nach Breitengrad und vergleicht zunächst jeden Gipfel mit jedem anderen Gipfel. Die Entfernung der beiden ist die Dominanz des niedrigeren, falls der nicht schon vorher eine noch geringere Dominanz bekommen hat. Für den Vergleich "jeder mit jedem" ist die sortierung nach Breitengrad nützlich. Ab einer vorher definierten Grenze (z.B. 100km) wird nämlich nicht mehr nach höheren Gipfeln gesucht und der Suchlauf kann abgebrochen werden, sobald bei der Suche zu weit nach Norden gerät.
  • Aus dem Gipfelvergleich hat man jetzt einen maximalen Radius, in dem der nächstgelegene höhere Punkt liegen muss. Dazu werden alle Punkte in diesem Umkreis (eigentlich dem "Umquadrat") aus den Höhendaten gelesen und verglichen. Der Abstand zum nächstgelegene höhere Punkt ist die Dominanz.

Einschränkungen

  • Entfernungen werden nicht auf der Kugel gerechnet, sondern mit Pythagoras und der Differenz der Längen- und Breitengrade. Das ist gut genug im paar-hundert-Kilometer-Umkreis, aber ungeeignet um die Anden mit dem Himalaya zu vergleichen.
  • Es wird nicht über den 180. Längengrad hinaus gerechnet. Ein Berg auf 170E ist 340 Grad von einem Berg auf 170W entfernt.
  • Die Höhendaten sind nicht sehr genau, falls man auf freie Daten und weltweite Abdeckung angewiesen ist. Deshalb wird auf die Gipfelhöhe etwas draufgeschlagen. Damit wird verhindert, dass zu einem Gipfel der nächsthöhere Punkt am Hang des gleichen Gipfels gefunden wird. Aus dem gleichen Grund wird auch jeder höhere Punkt ignoriert, der näher als 100m am Gipfel liegt.

Probleme beim Update

  • Wenn man sämtliche Gipfel durch das Programm schiebt, funktioniert diese zweistufige Berechnung "1. Abstand zum Gipfel, 2. in diesem Umkreis der Punkt aus dem DEM". Wenn man eine Datenbank mit diffs hat, hat man aber bei jedem Schritt nur ein paar Gipfel, die nichtmal in einer kleinen Umgebung liegen. Dort funktioniert der erste Schritt nicht und die Dominanz wird in einem weiteren Umkreis gesucht. Das bremst ein wenig und kann auch zu unterschiedlichen Ergebnissen führen, falls der Punkt aus dem DEM weiter weg liegt als der nächste Gipfel.
  • Die Höhe eines Gipfels beeinflusst die Dominanzen aller seiner Nachbarn. Eigentlich müsste man die auch alle neu rechnen. Das sollte kein grosses Problem sein, könnte sich aber fatal auswirken, wenn ein Berg plötzlich niedriger wird (Er war als ele=1234 eingetragen, dann hat jemand bemerkt, dass da ele=123.4 stehen müsste. Der Berg wird neu berechnet, aber sein Nachbar mit korrekter ele=321 nicht, obwohl er jetzt der höhere Gipfel ist).

Ergebnis

Maxbe dominanz z6 100k.png

Rechts im Bild die höchsten Berge unserer Gegend mit Dominanz 100km (was hier eben heisst "mindestens 100km").

Maxbe dominanz z7 25k.png

Süddeutschland und Alpenraum mit allen Bergen der Dominanz >25km. Hier sieht man die dominantesten Gipfel der grösseren Gebirgsgruppen.

Der namenlose Berg in der Mitte erstaunt etwas, das ist der Node 2958903956 der offensichtlich einen 32km weiten Rundumblick bietet.

Maxbe dominanz z10 5k.png

Wetterstein, Karwendel und Alpenvorland mit allen Bergen der Dominanz >5km. Auch die kleineren Gebirgsgruppen haben jetzt einen "Hauptgipfel" Die Striche verbinden die Gipfel mit den gefundenen nächsthöheren Punkten. Die Beschriftung der Striche ist die Entfernung.

Maxbe dominanz z12 1k.png

Das Wettersteingebirge mit allen Bergen der Dominanz >1km. Inzwischen kommen auch völlig unbekannte Gipfel auf die Karte.

Maxbe dominanz z14 alle.png

Alle Gipfel rund ums Höllental unabhängig von ihrer Dominanz.

Am Beispiele des Wettersteins sieht man auch gut die Unterschiede der reinen Messerei zur gefühlten Wichtigkeit nach "weichen" Kriterien. Erst auf dem letzten Bild ist die Alpspitze zu sehen. Die dürfte nach der Zugspitze der prominenteste Berg der Gegend sein, steht aber technisch gesehen im Schatten des Hochblassen und gilt mit einer Dominanz von 770m schon fast als Nebengipfel.

Quellcode

wird im github der OpenTopoMap gepflegt.

Daten

Wer nicht selber rechnen will, kann sich eine gelegentlich aktualisierte Liste aller Gipfel und ihrer Dominanz runterladen. Als DEM werden mit freundlicher Genehmigung von Jonathan de Ferranti die Höhendaten von Viewfinder Panoramas verwendet.