L '[indice de pluviométrie du bassin](https: // www), qui est la base de la Distribution des risques d'alerte aux inondations de l'Agence météorologique. Il existe des données appelées .jma.go.jp / jma / kishou / know / bosai / ryuikishisu.html). Ces données représentent le montant correspondant au débit de la rivière, et la valeur est définie pour chaque code de maille tertiaire et code de rivière, et est stockée au format BUFR4. Il existe différentes méthodes de décodage du BUFR, mais comme l'indice de pluviométrie du bassin utilise une table locale propre à l'Agence météorologique, il ne peut pas être lu sans spécifier une table locale avec un outil.
Si vous recherchez "indice de précipitations du bassin BUFR", vous trouverez Méthode de décodage au format BUFR4 La méthode utilisant la bibliothèque libECBUFR est un hit. Bien sûr, c'est bien, mais c'est un peu lourd à installer, et c'est pratique d'utiliser Python, qui est populaire ces jours-ci, j'ai donc utilisé un package Python appelé PyBufrKit. enquêté.
Il semble qu'il ne puisse pas être installé avec conda
, alors appuyez surpip install pybufrkit
.
Tout d'abord, lisez Information technique n ° 446 sur les matériaux de distribution, puis lisez le tableau utilisé dans l'indice des précipitations du bassin BUFR. Vérifiez les paramètres liés à.
Ou vous pouvez appuyer sur la commande pybufrkit
et vous verrez une erreur. Les paramètres liés au tableau sont les suivants.
info
$ pybufrkit info (Fichier BUFR)
(Abréviation)
master_table_number = 0
originating_centre = 34
originating_subcentre = 0
master_table_version = 26
local_table_version = 1
Téléchargez la table maître au format JSON pour PyBufrKit correspondant aux paramètres ci-dessus à partir de PyBufrKit GitHub. Les fichiers à lire sont TableB.json
et TableD.json
danstables / {master_table_number} / 0_0 / {master_table_version}
(il y a aussi code_and_flag.json
dans le même répertoire, mais cette fois il manque. Mais cela a fonctionné). Par conséquent, dans ce cas, https://github.com/ywangd/pybufrkit/tree/master/pybufrkit/tables/0/0_0/26 Vous pouvez télécharger les tables
suivantes de / tables / 0 / 0_0 / 26). L'emplacement de ce répertoire tables
téléchargé est spécifié au moment de l'exécution, vous pouvez donc le placer où vous le souhaitez.
Vérifions le contenu de la table au format JSON téléchargée. D'abord du tableau B.
0/0_0/26/TableB.json
{"000001": ["TABLE A: ENTRY", "CCITT IA5", 0, 0, 24, "Character", 0, 3]}
Cette signification peut être facilement comprise en regardant Spécifications du Tableau B de l'OMM.
Les trois derrière ne sont pas utilisés pour CREX, vous pouvez donc les remplir de mannequins lorsque vous créez votre propre table locale.
Ensuite, jetons un coup d'œil au tableau D.
0/0_0/26/TableD.json
{
"300002": ["", ["000002", "000003"]],
"300003": ["(F, X, Y of descriptor to be added or defined)", ["000010", "000011", "000012"]]
}
Cela a également du sens par rapport aux Spécifications du Tableau D de l'OMM.
Maintenant que vous connaissez le format de la table, créez une table locale JMA dans le répertoire suivant.
tables/{master_table_number}/{originating_centre}_{originating_subcentre}/{local_table_version}/Table{B,D}.json
Plus précisément, il devient tables / 0 / 34_0 / 1 / Table {B, D} .json
.
Premièrement, en ce qui concerne le tableau B, le tableau intitulé "Descripteur d'élément" dans Information technique n ° 446 sur les matériaux de distribution à voir.
Par conséquent, les fichiers suivants doivent être créés.
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]
}
De même, le tableau D est également appelé "descripteur agrégé" dans Information technique n ° 446 concernant les matériels de distribution. Regarde la table.
Par conséquent, les fichiers suivants doivent être créés.
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 ...
--Spécifiez le répertoire de la table créée avec -t
--Référence: https://github.com/ywangd/pybufrkit/issues/5
--Afficher uniquement les informations sur les fichiers
- pybufrkit -t ./tables info ${bufrfile}
pybufrkit -t ./tables decode ${bufrfile}
pybufrkit -t ./tables decode -j ${bufrfile}
Exemple de programme pour convertir en 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
Si ces avertissements n'étaient pas résolus, un message d'erreur serait émis en même temps lors de la sortie vers JSON, ce qui serait un obstacle. Remarque pour référence.
WARNING: Fallback to default master table version 33 (26 not found)
--Si la table maître tables / 0 / 0_0 / 26
spécifiée par BUFR n'existe pas et que la dernière version de tables / 0 / 0_0 / 33
existe, elle reviendra à cela.WARNING: Cannot find sub-centre 0 nor valid default. Local table not in use.
--Si la table locale tables / 0 / 34_0 / 1
spécifiée dans BUFR n'est pas trouvée, la table locale ne sera pas utilisée.