Permítanme decir en primer lugar que estoy empezando a trabajar con archivos GRIB2, he leído los documentos, y más o menos sé cómo están estructurados. Mi objetivo es ser capaz de analizar algunos archivos GRIB2 de la NOAA, más concretamente, los del modelo WaveWatch III. Así que, por favor, perdonad mi ignorancia si algo de lo que digo suena demasiado ingenuo :D
No estoy apegado a ninguna tecnología, aunque me siento cómodo con Java y Python. Para ser más preciso, puedes encontrar el archivo GRIB2 que estoy usando como muestra en esto enlace .
También estoy utilizando el ToolsUI de Unidata para una inspección más "amigable" del archivo GRIB2. Como se puede ver, hay algunas variables en el GRIB2 proporcionado, pero sólo estoy interesado en 2 de ellos:
Dirección_del_viento_desde_qué_superficie_sopla Dirección_del_viento_de_las_ondas_secuencia_ordenada_de_datos
Hasta ahora, he probado este código, que se basa en esto pregunta y puedo abrir el archivo GRIB2:
Grib2Input grib2Input;
String pathfile = "glw.grl.WDIR.grb2";
//Create RandomAccessFile
ucar.unidata.io.RandomAccessFile gribfile = null;
try {
gribfile = new ucar.unidata.io.RandomAccessFile(pathfile, "rw");
}
catch (IOException e) {
e.printStackTrace();
}
//Create grib2Input file
grib2Input = new Grib2Input(gribfile);
Grib2Data gd = new Grib2Data(gribfile);
try {
grib2Input.scan(false, false);
List<Grib2Record> records = grib2Input.getRecords();
float[] data = null;
for (int i = 0; i < records.size(); i++){
//First get record information
System.out.println("record " + i + "-> Param. Categ.: " + records.get(i).getPDS().getPdsVars().getParameterCategory());
System.out.println("record " + i + "-> Param. Number: " + records.get(i).getPDS().getPdsVars().getParameterNumber());
try {
data = gd.getData(records.get(i).getGdsOffset(),records.get(i).getPdsOffset(), records.get(i).getId().getRefTime());
}
catch (Exception e) {
e.printStackTrace();
}
//Second print some data
for (int j = 0; j < 50000; j+=5000){
System.out.println("data[" + j + "] -> " + data[j]);
}
System.out.println("--");
}
} catch (IOException e) { e.printStackTrace(); }
Ahora la salida, para los 2 primeros registros, es esta:
record 0-> Param. Categ.: 2
record 0-> Param. Number: 0
data[0] -> NaN
data[5000] -> 64.34
data[10000] -> NaN
data[15000] -> NaN
data[20000] -> 38.13
data[25000] -> NaN
data[30000] -> NaN
data[35000] -> NaN
data[40000] -> 66.55
data[45000] -> 107.06
--
record 1-> Param. Categ.: 0
record 1-> Param. Number: 7
data[0] -> NaN
data[5000] -> NaN
data[10000] -> NaN
data[15000] -> NaN
data[20000] -> NaN
data[25000] -> NaN
data[30000] -> NaN
data[35000] -> NaN
data[40000] -> NaN
data[45000] -> 328.5
Bueno, aquí está mi pregunta:
1.- ¿Hay alguna forma mejor de hacer esto con la librería NetCDF-Java? Me parece que para GRIBS de mayor tamaño este método va a tardar siglos. Además, debería eliminar todos los valores NaN de la matriz de datos para cada registro
2.- ¿Debería optar por bibliotecas más específicas de GRIB2 como pygrib o pynio ? Si es así... ¿algún ejemplo práctico de análisis sintáctico de archivos GRIB2 con ellos?
3.- También he probado a utilizar wgrib2 herramienta de línea de comandos... como... generar un archivo CSV con esa herramienta y luego analizar el archivo CSV. La cosa es que el archivo CSV generado tampoco es muy completo
¡¡¡Gracias!!! Alejandro
EDIT: Puedes encontrar una respuesta a esto (usando Python, difícil) aquí . También debo decir que pude hacer esto también usando Netcdf4Java, aunque con GRIB-API de ECMWF es mucho más simple.
0 votos
¿Ha probado la solución GDAL mencionada en esta otra pregunta en gis.stackexchange.com/questions/19543/ ? Parece hacer el trabajo
0 votos
Hola, no, pero realmente no quiero generar un archivo CSV a menos que sea absolutamente necesario ... de hecho, prefiero no usar wgrib2 en absoluto ... el uso de programas externos de línea de comandos es siempre un problema, especialmente cuando se despliega en máquinas remotas con muy diferente configuración como mi máquina de desarrollo ... Pensé que tener NetCDF Java, pygrib y pynio shoudl suffice para analizar un archivo GRIB2 :)
0 votos
¿Esta pregunta ha quedado superada por su otra pregunta sobre el uso del ECMWF?
0 votos
Hola Brad, ¿te refieres a este? gis.stackexchange.com/questions/92195/ . Si es así sí, gracias por recordármelo, haré referencia a él aquí.
0 votos
¿Podría añadirlo como respuesta? Entonces, ¿se puede cerrar?
0 votos
¿Responder a mi propia pregunta? Eso parece impar... Puedo borrar esta pregunta en su lugar.