Der [Beckenregenindex](https: // www), der die Grundlage für die Verteilung des Hochwasserwarnrisikos der Meteorologischen Agentur bildet. Es gibt Daten mit dem Namen .jma.go.jp / jma / kishou / know / bosai / ryuikishisu.html). Diese Daten stellen die Menge dar, die der Flussrate des Flusses entspricht, und der Wert wird für jeden Tertiärnetzcode und Flusscode definiert und im BUFR4-Format gespeichert. Es gibt verschiedene Methoden zum Dekodieren von BUFR. Da der Niederschlagsindex des Beckens jedoch eine lokale Tabelle verwendet, die für die Meteorologische Agentur eindeutig ist, kann er nicht gelesen werden, ohne mit einem Werkzeug eine lokale Tabelle anzugeben.
Wenn Sie nach "Becken-Niederschlagsindex BUFR" suchen, finden Sie Dekodierungsmethode im BUFR4-Format, eine kanadische BUFR. Die Methode mit der Bibliothek libECBUFR ist ein Hit. Natürlich ist das in Ordnung, aber die Installation ist etwas umständlich und es ist praktisch, Python zu verwenden, was heutzutage sehr beliebt ist. Deshalb habe ich ein Python-Paket namens PyBufrKit verwendet. untersucht.
Es scheint, dass es nicht mit "conda" installiert werden kann, also drücke "pip install pybufrkit".
Lesen Sie zuerst Technische Informationen Nr. 446 zu Verteilungsmaterialien und dann die Tabelle, die im Beckenregenindex BUFR verwendet wird. Überprüfen Sie die Parameter in Bezug auf.
Oder Sie können den Befehl pybufrkit
drücken und es wird ein Fehler angezeigt. Die auf die Tabelle bezogenen Parameter sind wie folgt.
info
$ pybufrkit info (BUFR-Datei)
(Abkürzung)
master_table_number = 0
originating_centre = 34
originating_subcentre = 0
master_table_version = 26
local_table_version = 1
Laden Sie die JSON-formatierte Mastertabelle für PyBufrKit herunter, die den obigen Parametern entspricht, von PyBufrKit GitHub. Die zu lesenden Dateien sind "TableB.json" und "TableD.json" in "tables / {master_table_number} / 0_0 / {master_table_version}" (es befindet sich auch "code_and_flag.json" im selben Verzeichnis, diesmal fehlt es jedoch. Aber es hat funktioniert). In diesem Fall daher https://github.com/ywangd/pybufrkit/tree/master/pybufrkit/tables/0/0_0/26 Sie können die folgenden Tabellen
von / tables / 0 / 0_0 / 26) herunterladen. Der Speicherort dieses heruntergeladenen "Tabellen" -Verzeichnisses wird zur Laufzeit angegeben, sodass Sie es an einer beliebigen Stelle platzieren können.
Lassen Sie uns den Inhalt der heruntergeladenen JSON-Formattabelle überprüfen. Zuerst aus Tabelle B.
0/0_0/26/TableB.json
{"000001": ["TABLE A: ENTRY", "CCITT IA5", 0, 0, 24, "Character", 0, 3]}
Diese Bedeutung kann leicht unter WMO-Tabelle B-Spezifikationen verstanden werden.
Die drei dahinter werden nicht für CREX verwendet, sodass Sie sie beim Erstellen Ihrer eigenen lokalen Tabelle mit Dummies füllen können.
Schauen wir uns als nächstes Tabelle D an.
0/0_0/26/TableD.json
{
"300002": ["", ["000002", "000003"]],
"300003": ["(F, X, Y of descriptor to be added or defined)", ["000010", "000011", "000012"]]
}
Dies ist auch im Vergleich zu WMO-Tabelle D-Spezifikationen sinnvoll.
Nachdem Sie das Format der Tabelle kennen, erstellen Sie eine lokale JMA-Tabelle im folgenden Verzeichnis.
tables/{master_table_number}/{originating_centre}_{originating_subcentre}/{local_table_version}/Table{B,D}.json
Insbesondere wird es zu "tables / 0 / 34_0 / 1 / Table {B, D} .json".
Zu Tabelle B gehört zunächst die Tabelle "Elementdeskriptor" in Technische Informationen Nr. 446 zu Verteilungsmaterialien. sehen.
Daher sollten die folgenden Dateien erstellt werden.
0/34_0/1/TableB.json
{
"008021": ["TIME SIGNIFICANCE", "CODE TABLE", 0, 0, 5, "CODE TABLE", 0, 2],
"004001": ["YEAR", "YEAR", 0, 0, 12, "YEAR", 0, 4],
"004002": ["MONTH", "MONTH", 0, 0, 4, "MONTH", 0, 2],
"004003": ["DAY", "DAY", 0, 0, 6, "DAY", 0, 2],
"004004": ["HOUR", "HOUR", 0, 0, 5, "HOUR", 0, 2],
"004005": ["MINUTE", "MINUTE", 0, 0, 6, "MINUTE", 0, 2],
"001210": ["RIVER CODE", "Numeric", 0, 80000000, 24, "Numeric", 0, 8],
"005240": ["INDEX OF LATITUDE FOR 1ST ORDER MESH", "Numeric", 0, 0, 7, "Numeric", 0, 4],
"006240": ["INDEX OF LONGITUDE FOR 1ST ORDER MESH", "Numeric", 0, 0, 7, "Numeric", 0, 4],
"005241": ["INDEX OF LATITUDE FOR 2ND ORDER MESH", "Numeric", 0, 0, 4, "Numeric", 0, 2],
"006241": ["INDEX OF LONGITUDE FOR 2ND ORDER MESH", "Numeric", 0, 0, 4, "Numeric", 0, 2],
"005242": ["INDEX OF LATITUDE FOR 3RD ORDER MESH", "Numeric", 0, 0, 4, "Numeric", 0, 2],
"006242": ["INDEX OF LONGITUDE FOR 3RD ORDER MESH", "Numeric", 0, 0, 4, "Numeric", 0, 2],
"013212": ["RUNOFF INDEX (HIGH ACCURACY)", "Numeric", 1, 0, 12, "Numeric", 0, 4]
}
In ähnlicher Weise wird Tabelle D in Technische Informationen Nr. 446 zu Vertriebsmaterialien auch als "Aggregatdeskriptor" bezeichnet. Schau auf den Tisch.
Daher sollten die folgenden Dateien erstellt werden.
0/34_0/1/TableD.json
{
"301011": ["", ["004001", "004002", "004003"]],
"301012": ["", ["004004", "004005"]],
"301200": ["", ["005240", "006240", "005241", "006241", "005242", "006242"]]
}
help
$ pybufrkit -h
usage: pybufrkit [-h] [-v] [--info | --debug] [-d DEFINITIONS_DIRECTORY]
[-t TABLES_ROOT_DIRECTORY]
command ...
-t
erstellten Tabelle anpybufrkit -t ./tables info ${bufrfile}
--Decode to Text Format (ziemlich redundant)pybufrkit -t ./tables decode ${bufrfile}
--Decode in JSON-Format (nur Werte werden gespeichert)pybufrkit -t ./tables decode -j ${bufrfile}
Beispielprogramm zum Konvertieren in JSON
bufr2json.py
import os
from pybufrkit.decoder import Decoder
from pybufrkit.renderer import FlatJsonRenderer
class BufrConverter:
def __init__(self):
self.TOPDIR = os.path.dirname(os.path.abspath(__file__))
self.decoder = Decoder(tables_root_dir=f"{self.TOPDIR}/tables")
self.renderer = FlatJsonRenderer()
def convert(self, ini, region):
filename = f"Z__C_RJTD_{ini}_MET_SEQ_Ggis1km_Proi_Aper10min_RJsuikei{region}_ANAL_bufr4.bin"
filepath = f"{self.TOPDIR}/bufr/{filename}"
with open(filepath, 'rb') as buf:
bufr_message = self.decoder.process(buf.read())
json = self.renderer.render(bufr_message)
return json
Wenn diese Warnungen nicht behoben würden, würde bei der Ausgabe an JSON gleichzeitig eine Fehlermeldung ausgegeben, was ein Hindernis wäre. Hinweis als Referenz.
WARNING: Fallback to default master table version 33 (26 not found)
--Wenn die von BUFR angegebene Mastertabelle tables / 0 / 0_0 / 26
nicht existiert und die neueste Version von tables / 0 / 0_0 / 33
existiert, wird darauf zurückgegriffen.WARNING: Cannot find sub-centre 0 nor valid default. Local table not in use.
--Wenn die in BUFR angegebene lokale Tabelle tables / 0 / 34_0 / 1
nicht gefunden wird, wird die lokale Tabelle nicht verwendet.