-
Jan Eggers authoredJan Eggers authored
hlnug-hochwasser
Produziert aus den Wasserstands- und Prognosedaten des HLNUG eine Hochwasserkarte.
Simples und schnell gestricktes R-Skript, das als CRON-Job alle zehn Minuten aufgerufen wird und eine Datawrapper-Karte aktualisiert - indem sie eine Tabelle der 183 bekannten Messstationen übergibt.
Stand: 22.12.2023
Karte zum Embedden:
<iframe title="Live-Hochwasserkarte für Hessen" aria-label="Karte" id="datawrapper-chart-qcSxx" src="https://datawrapper.dwcdn.net/qcSxx/1636/" scrolling="no" frameborder="0" style="width: 0; min-width: 100% !important; border: none;" height="788" data-external="1"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(a){if(void 0!==a.data["datawrapper-height"]){var e=document.querySelectorAll("iframe");for(var t in a.data["datawrapper-height"])for(var r=0;r<e.length;r++)if(e[r].contentWindow===a.source){var i=a.data["datawrapper-height"][t]+"px";e[r].style.height=i}}}))}();</script>
Was es tut
Das Skript zapft die JSON-Dateien an, die die Webseite der HLNUG selbst nutzt - da es keine richtige API gibt. Es nutzt dabei eine Datei index.json, die die Wasserstände für alle 183 Messpunkte enthält, und eine weitere Datei stations.json, die Details zu den Messstationen enthält, unter anderem auch die Flüsse, die sie messen. Außerdem werden nach dem Schema der HLNUG-Website URLs generiert, die auf die Einzelseite und eine Thumbnail-Grafik für die jeweilige Messstation verweisen.
Diese Werte werden ausgelesen und in eine Tabelle/ein Dataframe geschrieben, das an eine Datawrapper-Symbol-Karte übertragen wird. Jedes Symbol enthält neben den Koordinaten zwei Informationen: den Wasserstand (Größe) und die Warnstufe (Farbe: grün, gelb, orange, purpur)
Weitere Informationen - welcher Fluss, werden in den Tooltipps der Karte angezeigt; den Code für diese Datawrapper-Tooltipps findest du unten.
Was es noch nicht tut
Technisch einfach umzusetzen, aber in der Eile noch nicht geschrieben:
- Informationen über die festgesetzten Warnstufen an der jeweiligen Messstation (geschrieben, aber noch nicht zu Ende korrigiert; einige Messstationen melden unvollständige Daten)
- Historie und (wo vorhanden) Prognose der jeweiligen Messsstation aus der "week.json"-Datei für jede Station (Beispiel: https://www.hlnug.de/static/pegel/wiskiweb3/data/internet/stations/0/42710050/W/week.json). Ein Teil der Stationen berechnet in diesem Datensatz eine Prognose für die nächsten 6 Stunden - für eine Warnkarte ist das der möglicherweise wichtigste Datenpunkt.
- Die "Abschätzung" für die nächsten 7 Tage ist eine Trendberechnung, die ermöglicht zu sagen, wann der schlimmste Tag am jeweiligen Ort zu erwarten ist.
(Noch nicht umgesetztes Konzept: die deutlich schwieriger zu bestückende Locator-Karte; Symbole verdeutlichen Trend und zu erwartende Gefahren: Pfeil hoch/gleich/runter mit Tendenz, Farbe verdeutlicht Warnstufe in 6h. Dazu als Text: Wann wird der Höchstwert erwartet)
Datenquelle
Das HLNUG bietet die Wasserstände und Prognosen über diese Karte an:
https://www.hlnug.de/static/pegel/wiskiweb3/webpublic/#/overview/Wasserstand
Eine richtige API gibt es (noch) nicht - nur Downloads der Pegel-Historien und die Möglichkeit, Daten aus statisch abgelegten JSON-Dateien vom Server zu lesen.
Datenpunkte
Variable | Typ | Beschreibung | Beispiel |
---|---|---|---|
Stationsname | String | Eindeutiger Name | Dillenburg1 |
Gebiet | String | Hydrologische Zuordnung | Lahn |
Fluss | String | Bezeichnung des Gewässers | Dill |
station_id | int | 5-stellige Stationsbezeichnung | 42455 |
station_no | int | 8-stellige Stationsnummer (manchmal wird die ID verwendet, manchmal die Nr.) | 25840708 |
LAT | float | Geokoordinate: Breitengrad | 50.741453 |
LON | float | Geokoordinate: Längengrad | 8.280537 |
Wasserstand | int | Aktuell gemessener Wasserstand in cm | 54 |
Warnstufe | String | Meldestufe: "MS1". "MS2" oder "MS3" - wenn keine Meldestufe erreicht ist, NA | NA |
Warnstufe_num | int | Meldestufe numerisch (0-3) | 0 |
timestamp | Date | Zeitstempel der letzten Messung (i.d.R. alle 15min) | 2023-12-29T13:45:00.000+01:00 |
prog_yes | String | Existiert Prognose für diese Messstelle? "yes" oder "no" | yes |
png_url | String | URL einer Thumbnail-Grafik (200x100px) des HLNUG mit Historie und evtl. Prognose | https://www.hlnug.de/static/pegel/wiskiweb3/data/internet/stations/0/25800600/W/small_wasserstand_vhs.png |
page_url | String | URL der Einzelseite für diese Messstelle beim HLNUG | https://www.hlnug.de/static/pegel/wiskiweb3/webpublic/#/overview/Wasserstand/station/42482/AßlarWVorhersage |
Funktionen
- get_index() gibt ein Dataframe mit den oben erwähnten Werten zurück
- get_alarmlevel(station_no) - holt die Wasserstände der drei Meldestufen bzw. gibt leeres df zurück, falls nicht zu bekommen
- calling_all_stations_index() - erstellt eine Tabelle mit allen Meldestufen und Basisdaten
Datawrapper-Tooltipp
(lädt die Thumbnail-Grafik des HLNUG in den Tooltipp und bietet einen Link zur Einzelseite der jeweiligen Messstation)
Gebiet: {{ fluss }} (bei {{ stationsname }}): {{ wasserstand }}cm
Meldestufe: {{ warnstufe_num }}
<a href="{{ page_url }}" target="_blank"><img src="{{ png_url }}" alt="Prognosekarte HLNUG - nutzen Sie die Tabelle auf der unten verlinkten Seite" width="225px"></a>
<br><strong>Weitere Informationen: <a href="{{ page_url }}" target="_blank">{{ stationsname }}-Seite beim HLNUG</a></strong><br><br><small>aktualisiert: {{ FORMAT(timestamp, "DD. MMM. YY") }} um {{ FORMAT(timestamp, "HH:mm") }} Uhr