Im GRIB graben

MeteoSchweiz hat eine Initiative gestartet, die einen Grossteil der Wetterdaten öffentlich zugänglich machen soll, offenbar in Zusammenarbeit mit SwissTopo, die ihre Daten schon seit längerer Zeit veröffentlicht. Als Prognosedaten sind vorerst die Numerischen Wettervorhersagemodelle ICON-CH1-EPS und ICON-CH2-EPS verfügbar. ICON-CH1-EPS liefert für alle Punkte in einem 1-km-Gitter Daten für die folgenden 33 Stunden für jeweils die volle Stunde. Die Daten werden alle drei Stunden neu berechnet.

Dies gibt enwebs die Gelegenheit, in der Wetterkarte neben den drei lokalen Prognosepunkten in Leissigen, Gunten und Gwatt weitere Punkte mitten im See einzurichten. Die neuen Daten sind im GRIB-Format (General Regularly-distributed Information in Binary form), einem in der Meteorologie häufig verwendeten Datenformat, das auf einem geographischen Gitternetz basiert. Ich holte mir bei MeteoSchweiz ein solches File und untersuchte es mittels einer recht guten Dokumentation. Bald hatte ich eine Funktion programmiert, welche die Daten extrahiert, nur wusste ich nicht, wie ich mit den zwei angegebenen Faktoren die «gepackten» Daten in ein brauchbares Format umwandeln konnte. Eine Recherche im Internet brachte mich auf die richtige Idee. Nach und nach begriff ich, wie die Daten zu interpretieren sind: Für eine alle drei Stunden wechselnde Basiszeit brauche ich für jedes anzuzeigende Attribut und für jede Stunde in die Zukunft ein eigenes File. Weiter sind zwei Files abzuholen, welche die Längen- resp. Breitengrade der verfügbaren Gitterpunkte liefern.

Ich brauche fünf Attribute: Windgeschwindigkeit mit Komponenten Richtung Ost und Richtung Nord, die maximale Windgeschwindigkeit, die Niederschlagsmenge und die Wolkenbedeckung. Dies für die maximalen 33 Stunden in die Zukunft … ergibt 165 Files. Jedes File ist etwa 2.2 MB gross, also etwa 360 MB alle drei Stunden.

2.2 MB für ein einzelnes Attribut für drei Punkte auf dem See?

Die GRIB-Daten decken natürlich nicht nur das Gebiet des Thunersees ab, nicht nur die Schweiz, sondern eine Region, die im Westen bis nach Poitiers, im Norden weiter als Frankfurt, im Süden bis nach Rom, im Osten bis Bratislava reicht. Dies ergibt ein Netz von mehr als 1 000 000 Maschen. Ich programmierte eine Routine, welche die Daten für eine beschränkte Anzahl Punkte aus diesem Datenfriedhof extrahiert. Ich begnügte mich aber nicht mit den drei vorgesehenen Punkten auf dem See, sondern speichere nun 235 Punkte rund um den Thunersee, diese sind auf dem Bild ersichtlich.

Ich brauche etwas sphärische Trigonometrie und Pythagoras, um aus den Ost- und Nord-Komponenten der Windgeschwindigkeit die Windrichtung und die resultierende Windgeschwindigkeit zu berechnen. Ausserdem muss sich jeder anzuzeigende Punkt auf dem See mittels seiner Position den nächstgelegenen Punkt im Datenfeld suchen.

Alle drei Stunden (0:00, 3:00, 6:00, 9:00 … UTC) wechselt die Basiszeit, aber die neuen Daten tröpfeln erst fast eine Stunde später nach und nach herein und können von den Supercomputern in Lugano abgeholt werden. Die benötigten Daten werden extrahiert und zwischengespeichert; wenn zwei Drittel der Files vorhanden sind, werden die neuen Prognosen angezeigt. Die Daten werden erst abgeholt, wenn sie beim ersten Benutzer angezeigt werden sollen. Daher kann es ausnahmsweise fast eine Minute dauern, bis die Prognosen mitten auf dem See auch sichtbar sind.

Bitte hier alle Neuerungen testen!
Rückmeldungen sind immer willkommen.

This Post Has One Comment

  1. enwebs

    [Christoph Joder nach der Neueinrichtung der Wetterstation Neuhaus]
    Nun ist alles wieder eingerichtet resp. auch die Wassertemperatur meiner Station wird wieder auf der tollen Übersicht des Thunersees von Nik Reinhard angezeigt, wunderbar. Für die Wassersportler auf dem See wirklich eine sehr wertvolle Informationsquelle.

Hier Kommentar schreiben