Lire des fichiers GRIB2 pour les données Lat / Long
Question
Quelqu'un ici fait du travail météorologique ou de la terre? J'essaie de travailler avec les fichiers de données de format GRIB2. Il existe des bibliothèques disponibles, en particulier le décodeur Java Unidata Grib. Et je peux voir exactement comment extraire des données dans un grand tableau linéaire, mais ce que je veux faire, c'est accéder aux valeurs par lat / long. Impossible de trouver un exemple simple sur la façon de procéder. Suggestions?
Tia!
La solution
Vous devrez obtenir le type de projection avec les paramètres, puis l'utiliser pour cartographier les coordonnées de Lat / Long à Grid X / Y (voir Fe la classe CoordinateReferenceSystem
du Site Web Geotools).
Autres conseils
Vous pouvez utiliser l'outil degrib pour sonder les données à un lat / long spécifié. Vois ici http://www.weather.gov/mdl/degrib/txtview.php?file=degrib.txt&dir=base Un exemple de Windows serait 'degrib.exe myfile.grib -p -pnt 40.0, -10.0 -interp 2'. Si vous avez besoin de Degrib.exe, vous pouvez le trouver dans le répertoire d'installation d'un programme appelé VRTool http://www.tecepe.com.br/nav/vrtool/
La wgrib2 Le programme vous permet d'extraire une série chronologique à un emplacement LAT / LON choisi en utilisant l'option -LON, par exemple:
wgrib2.exe input_file.grb2 -lon 360 90> output_file.txt
L'utilisation de Python avec le module PyGrib fonctionne généralement comme un charme. Vous pouvez extraire des lats / lons et des données avec le code suivant.
import pygrib
gr=pygrib.open(file)
data=values.(gr[key]) #use the key to the variable of interest to extract its data
lats,lons=(gr.readline()).latlons() #extract coordinates
Maintenant, il est facile de visualiser les données avec la boîte à outils BasEmap ou l'exporter vers un fichier approprié :)
Vous pouvez utiliser les grib2tools, voir https://github.com/philippphb/grib2tools. Après avoir lu dans un fichier GRIB2 à partir d'un INPUTSTREAM comme
RandomAccessGribFile gribFile = new RandomAccessGribFile("", "");
gribFile.importFromStream(inputstream, 0);
Vous pouvez accéder aux données du fichier GRIB basé sur Lat / LON:
double longitude = ... // in degrees
double latitude = ... // in degrees
float val = gribFile.getValueAt(0, GribFile.degToUnits(latitude), GribFile.degToUnits(longiude));
Vous pouvez également obtenir des données interpolées pour les positions LAT / LON qui ne sont pas exactement sur la grille:
double longitude = ... // in degrees
double latitude = ... // in degrees
float val = gribFile.interpolateValueAt(0, GribFile.degToUnits(latitude), GribFile.degToUnits(longiude));