TL;DR
Das Konvertierungsprogramm befindet sich auf GitHub. Bitte tun Sie dies auf eigenes Risiko. Informationen zur Konvertierung von Wetterradar-Polarkoordinatendaten mit doppelter Polarisation finden Sie in diesem Artikel.
Möglicherweise möchten Sie die Radardaten der Meteorological Agency (JMA) verwenden, um Niederschlagsphänomene zu untersuchen. Normalerweise 1 km Maschenweite GPV mit synthetischer Radarechointensität und [analysierter Niederschlag](https: // www. Sie werden häufig räumliche zweidimensionale Niederschlagsdaten verwenden, die durch die Verarbeitung von Informationen aus mehreren Radargeräten erstellt wurden, z. B. data.jma.go.jp/add/suishin/shiyou/pdf/no11601)). Bei aufwändigen Aufgaben wie der Untersuchung der dreidimensionalen räumlichen Verteilung des Niederschlags wird die Reflexionsintensität jedoch im Polarkoordinatengitter für jeden auf dem Radar zentrierten Höhenwinkel gespeichert Radio-Polarkoordinatendaten. Es ist notwendig, jma.go.jp/add/suishin/shiyou/pdf/no13702) zu behandeln.
Diese Daten werden wie andere Daten der Meteorological Agency im GRIB2-Format gespeichert und zeichnen sich durch die Verwendung der Originalvorlagen von JMA aus, z. B. der Vorlagen 3.50120 und 4.51022 ([Distributionsmaterialspezifikation Nr. 13702]). Siehe https://www.data.jma.go.jp/add/suishin/shiyou/pdf/no13702). Lesen und zeichnen Sie daher so wie es ist mit Zeichensoftware wie NCL und GrADS. Du kannst nicht.
Eine Möglichkeit zum Zeichnen besteht darin, das Beispielprogramm auf der Website zum Herunterladen von Radardaten für Radarkoordinationen der Meteorologischen Agentur NICT zu verwenden. Dieses Beispielprogramm verwendet wgrib2 mit einem Patch und einem Patch, mit denen Sie die JMA-eigene Vorlage unter [wgrib2] lesen können (https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/). Enthält ein C-Programm, das die konvertierte einfache Binärdatei in orthogonale Koordinaten konvertiert, die auf der Radarstelle zentriert sind, sowie ein GrADS-Skript, das die konvertierten Daten zeichnet.
Andererseits wurden kürzlich Radardaten in Python wie PyART und wradlib Analysewerkzeuge werden immer umfangreicher. Natürlich sollten diese Tools nicht die GRIB ihrer eigenen Vorlage lesen, sondern die Daten in das NetCDF-Format der Konvention CF / Radial konvertieren und lesen. Ich muss dich lassen. Es scheint, dass niemand ein solches Konvertierungsprogramm veröffentlicht hat, also habe ich es erstellt.
Bevor Sie die CF / Radial-Begriffe erläutern, müssen Sie die CF-Begriffe kennen. In Bezug auf die CF-Regeln die Erklärung der Website von Herrn Toyoda (NetCDF CF regelt die japanische Übersetzung) (http://www.gfd-dennou.org/library/netcdf/cf-conventions-ja/cf-ja.html) Ich werde es zitieren, weil es prägnant ist.
NetCDF definiert das Framework des Datenformats (genau wie XML). Sie können dem Datensatz ein Name-Wert-Paar geben, das als Attribut bezeichnet wird. Sie können jedoch alle Informationen entsprechend Ihrer Zustimmung schreiben. Sie müssen daher versprechen, wie es verwendet wird. Dies wird als NetCDF-Konvention bezeichnet. Ich werde. Dies ist eine japanische Übersetzung des CF-Codes, der zum De-facto-Standard im Code wird.
Wie Sie aus dem offiziellen Namen der CF / Radial-Konvention als "CF-konformes netCDF-Format für Momentdaten für RADAR und LIDAR in Radialkoordinaten" ersehen können, wurde die CF-Konvention nicht ausreichend unterstützt, sodass sie in Polarkoordinaten ausgedrückt werden kann. Es ist eine Konvention, die die Beobachtungsdaten verschiedener Radargeräte und Fahrer ausdrückt.
Es gibt zwei Arten von CF / Radial-Konventionen: Version 1.x (CfRadial1) und 2.x (CfRadial2). CfRadial1 basiert auf dem klassischen Datenmodell von NetCDF. Die erste Version 1.1 wurde 2011 formuliert und die neueste Version 1.4 (https://github.com/NCAR/CfRadial/blob/master/docs/CfRadialDoc.v1.4.20160801.pdf) wurde 2016 formuliert. Es wird eine Version sein. Andererseits verwendet CfRadial2 NetCDF4 und group und ist nicht abwärtskompatibel mit CfRadial1. Die aktuellste Version von Version 2.0 wurde 2017 formuliert und wird teilweise 2019 sein. Updates wurden hinzugefügt. Darüber hinaus wird der Entwurf der Phase Version 2.1 im Jahr 2019 veröffentlicht.
Da CfRadial2 kürzlich erstellt wurde, scheint der Support-Status je nach Tool unterschiedlich zu sein. In Bezug auf PyART, [Problem beim Lesen von CF / Radial 2.0-Dateien # 858](https://github.com/ARM-DOE/pyart/issues/ Soweit ich 858 gelesen habe, scheint es in der offiziellen Version einige Probleme mit CfRadial2 zu geben, und es scheint, dass Freiwillige und kompatible Leser erstellt wurden. Für wradlib, soweit Sie [wradlib.io.xarray.CfRadial] sehen können (https://docs.wradlib.org/en/stable/) , CfRadial2 scheint unterstützt zu werden. (Weder wurde tatsächlich bestätigt)
Grundsätzlich müssen Sie nur Spezifikationen für Vertriebsmaterialien Nr. 13702 lesen und den zu konvertierenden Code schreiben. Da diesmal viele Umgebungen verwendet werden können und die Struktur einfach ist, wird sie in [CF / Radial Version 1.4] konvertiert (https://github.com/NCAR/CfRadial/blob/master/docs/CfRadialDoc.v1.4.20160801.pdf). Ich habe mich dazu entschlossen. Ich habe Pythons netCDF4-Paket verwendet, um NetCDF zu erstellen. Hier sind einige Punkte.
GRIBs Abschnitt 1 (Identifizierungsabschnitt), Abschnitt 3 (Abschnitt zur Definition des Gittersystems) und Abschnitt 4 (Abschnitt zur Produktdefinition) lesen die Binärdatei mit Python. Für die komprimierten Daten mit Lauflänge in Abschnitt 5 (Abschnitt Materialausdruck) und Abschnitt 7 (Abschnitt Material) ist es schwierig, den Code zum Dekomprimieren mit Python zu schreiben. Konvertieren Sie ihn daher mit wgrib2 in eine einfache Binärdatei und lesen Sie ihn. ist. Da die Ausgabe in eine einfache Binärdatei nicht mit der ursprünglichen JMA-Vorlage zusammenhängt, verursacht normales wgrib2 keinen Fehler. Wenn Sie sich Sorgen über die Abhängigkeit von externen Programmen machen, können Sie die Dekomprimierung der Ausführungslänge natürlich in Python schreiben.
Wie Sie in Abschnitt 2.3 von CfRadial Data File Format sehen können, ist die Datenspeichermethode Regular. Es gibt zwei Arten: 2-D-Speicher und gestaffelte 2-D-Speicher. Ersteres ist der Fall, wenn die Anzahl der Bins in der Entfernungsrichtung unabhängig von der Zeit konstant ist und Variablen wie die Reflexionsintensität als zweidimensionale Anordnung von Bereich und Zeit gespeichert werden. Letzteres ist der Fall, wenn die Anzahl der Bins in der Bereichsrichtung mit der Zeit variabel ist, Variablen wie die Reflexionsintensität in einem eindimensionalen Array gespeichert werden und die Anzahl und Position der Bins in der Bereichsrichtung zu jedem Zeitpunkt in ray_n_gates und ray_start_index gespeichert werden. Bei Polarkoordinatendaten für jedes Radar ist die Anzahl der Bins in Entfernungsrichtung abhängig vom Höhenwinkel variabel. Daher habe ich mich zunächst für die gestaffelte 2-D-Speicherung entschieden. Die Ausgabe netCDF konnte jedoch von PyART nicht gut gelesen werden, daher habe ich sie auf Regular 2-D storage gesetzt und den Teil ohne Wert mit _FillValue ausgefüllt.
Das Radar der Meteorologischen Agentur wurde seit 2020 nacheinander aktualisiert, und zum Zeitpunkt des Schreibens wurde das Radar in Tokio aktualisiert. es war erledigt. Das Highlight dieses Updates ist die Doppelpolarisation. Eine versteckte Verbesserung besteht jedoch darin, dass der Volumenscan (dreidimensionales Scannen in allen Höhenwinkeln von oben nach unten) 10 bis 5 Minuten dauert. Kann gemacht werden. Da die GRIB2-Daten weiterhin alle 10 Minuten vorliegen, enthält eine Datei zwei Volume-Scans. Wenn Sie die CF / Radial-Konvention lesen, sieht es aus wie ein Volume pro Datei (ich bin nicht sicher, ob es wahr ist). Daher möchten Sie möglicherweise zwei netCDFs aus einer GRIB generieren. Daher habe ich das Ausschneiden durch Angabe der Anzahl der in GRIB gespeicherten Daten (entsprechend dem Höhenwinkel) ermöglicht.
Platzieren Sie das erstellte Konvertierungsprogramm unter der MIT-Lizenz auf GitHub.
Wenn Sie mit PyART ein Diagramm der Ausgabedaten zeichnen, sieht es folgendermaßen aus. Es ist praktisch, eine Mindestzahl mit 4 Linien zeichnen zu können.
draw.py
import matplotlib.pyplot as plt
import pyart
radar = pyart.io.read_cfradial('./work/RS47695.nc')
display = pyart.graph.RadarDisplay(radar)
display.plot('DBZ', sweep=29)
plt.show()
Recommended Posts