Unidata - To provide the data services, tools, and cyberinfrastructure leadership that advance Earth system science, enhance educational opportunities, and broaden participation. Unidata
         
  advanced  
 

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [netcdf-java] Help reading grib2 file. (fwd)





===============================================================================
Robb Kambic                                Unidata Program Center
Software Engineer III                      Univ. Corp for Atmospheric Research
rkambic@xxxxxxxxxxxxxxxx                   WWW: http://www.unidata.ucar.edu/
===============================================================================

---------- Forwarded message ----------
Date: Fri, 2 Oct 2009 13:14:41 -0600 (MDT)
From: Robb Kambic <rkambic@xxxxxxxxxxxxxxxx>
To: Esteban Wagner <wagner.esteban@xxxxxxxxx>
Subject: Re: [netcdf-java] Help reading grib2 file.

On Tue, 29 Sep 2009, Esteban Wagner wrote:

Hi,Â
I have a grb2 file containing global Primary_wave_direction forecasts.ÂI would like to read the
values it contains.


By the moment I was able to read the file and obtain a GridDataset using the following code:
------------
(NetCDF:Version 4.0.16; Grib:Version 6.0.16)


final File file = new File("src/test/resources/multi_1.glo_30m.DIRPW.grb2");
final GridDataset gridDataSet = GridDataset.open(file.getAbsolutePath());
----------
the file can be downloaded from:Â
ftp://polar.ncep.noaa.gov/pub/waves/develop/multi_1.latest_run/multi_1.glo_30m.DIRPW.grb2
----------
Now I would like if someone can tell me which are the methods from gridDataSet I should use in order
to obtain the different forecast values of theÂPrimary_wave_directionÂfor a given grid point.


Thanks,

Regards.

Esteban.


Esteban,

I'll reference the JavaDocs first:

http://www.unidata.ucar.edu/software/netcdf-java/v4.1/javadoc/ucar/nc2/dt/GridDataset.html
http://www.unidata.ucar.edu/software/netcdf-java/v4.1/javadoc/ucar/nc2/dt/GridDatatype.html
http://www.unidata.ucar.edu/software/netcdf-java/v4.1/javadoc/ucar/nc2/dt/GridCoordSystem.html

I'm assuming by grid point you mean Lat/Lon
One needs to be at the GridCoordSystem level to be able to convert the Lat/Lon point into indices. Then use the indices information in the GridDatatype readDatSlice routine to get the value. Here's a short sample program.


public class GetDataFromLatLon {
  public static void main(String[] args) {

       try {

final File file = new File("C:/data/grib/multi_1.glo_30m.DIRPW.grb2");
final GridDataset gridDataSet = GridDataset.open(file.getAbsolutePath());
GridDatatype pwd = gridDataSet.findGridDatatype( "Primary_wave_direction");
System.out.println( pwd.getInfo());


        GridCoordSystem pwdGcs = pwd.getCoordinateSystem();
        int[] result = null;
        // Get index value for Lat 30.0 and Lon 179
        int[] idx = pwdGcs.findXYindexFromLatLon( 30.0, 179.0, result );
        //int[] idx = pwdGcs.findXYindexFromLatLon( 90.0, 0.0, result );
        // Extract data value for time 0, no Vert index, Lat index, Lon index
        Array data = pwd.readDataSlice( 0, -1, idx[1], idx[0]);
        // Another option: read all data values for timeIndex = 0
        //Array data = pwd.readVolumeData( 0 );
        IndexIterator iter = data.getIndexIterator();
        while(iter.hasNext()) {
                float val = iter.getFloatNext();
                System.out.println( "Primary_wave_direction = "+ val);
        }

        System.out.println( "Success");
       } catch (Exception exc) {
              exc.printStackTrace();
       }
    }
}
===============================================================================
Robb Kambic                                Unidata Program Center
Software Engineer III                      Univ. Corp for Atmospheric Research
rkambic@xxxxxxxxxxxxxxxx                   WWW: http://www.unidata.ucar.edu/
===============================================================================

 
 
  Contact Us     Site Map     Search     Terms and Conditions     Privacy Policy     Participation Policy
 
National Science Foundation (NSF) UCAR Community Programs   Unidata is a member of the UCAR Community Programs, is managed by the University Corporation for Atmospheric Research, and is sponsored by the National Science Foundation.
P.O. Box 3000     Boulder, CO 80307-3000 USA     Tel: 303-497-8643     Fax: 303-497-8690