Re: [netcdf-java] Fw: Syntax for opening and reading a BUFR file

Hi Brian:

I just added this doc:

http://www.unidata.ucar.edu/software/netcdf-java/reference/Cookbook.html#readSequences

let me know if it helps

John

On 5/14/2013 4:30 PM, Brian Schlining wrote:
> Hi All,
> 
> I'm stumped on how to get data out of the nested sequence data in the 
> attached BUFR file using NetCDF-Java. I can read all variables in the 
> top-level Sequence (obs), but I can't get them out of the nested 
> Sequence (seq1). I've tried all the method calls I can think of. Any 
> suggestions or help would be greatly appreciated? Here's some pseudo 
> code I've used to get the variable and try to read it.:
> 
> 
> netcdf = //  Open the BUFR file
> seq1 = netcdf.findVariable("obs.seq1);
> 
> // --- METHOD 1L Try using the recommended structure iterator
> i = seq1.getStructureIterator();
> while (i.hasNext()) {
>      v = i.next();
>      d = v.getArray();
> }
> 
> //  METHOD 1 OUTPUT
> 2013-05-14 14:55:24,154 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member time
> 2013-05-14 14:55:24,154 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member WMO block number
> 2013-05-14 14:55:24,154 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member WMO station number
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Type of station
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Year
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Month
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Day
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Hour
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Minute
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Latitude (coarse accuracy)
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Longitude (coarse accuracy)
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Height of station
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Short station or site name
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Type of measuring equipment used
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Time significance
> 2013-05-14 14:55:24,155 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member Time period or displacement
> 2013-05-14 14:55:24,156 [main] WARN  ucar.nc2.dataset.StructureDS  - 
> StructureDataDS.convert Cant find member seq1
> Java exception occurred:
> java.lang.NullPointerException
> at ucar.nc2.dataset.StructureDS.convert(StructureDS.java:445)
> at 
> ucar.nc2.dataset.SequenceDS$StructureDataConverter.next(SequenceDS.java:78)
> 
> 
> // --- METHOD 2: Try calling read
> vt = netcdf.findVariable('obs.seq1.Virtual temperature);
> vt.read();
> 
> // METHOD 2 OUTPUT
> java.lang.ClassCastException: ucar.ma2.ArrayObject$D1 cannot be cast to 
> ucar.ma2.ArrayStructure
> at ucar.nc2.Variable.reallyRead(Variable.java:854)
> at ucar.nc2.Variable._read(Variable.java:831)
> at ucar.nc2.Variable.read(Variable.java:709)
> at ucar.nc2.dataset.VariableDS.reallyRead(VariableDS.java:518)
> at ucar.nc2.dataset.VariableDS._read(VariableDS.java:502)
> at ucar.nc2.Variable.read(Variable.java:709)
> 
> 
> 
> The CDL is:
> 
> netcdf 5900.20030601.rass {
>   types:
>    enum Type of station { 'Automatic' = 0, 'Manned' = 1, 'Hybrid: both 
> manned and automatic' = 2, 'Missing value' = 3};
>    enum Type of measuring equipment used { 'Pressure Instrument 
> associated with wind measuring equipment' = 0, 'Optical theodolite' = 1, 
> 'Radio theodolite' = 2, 'Radar' = 3, 'VLF-Omega' = 4, 'Loran C' = 5, 
> 'Wind profiler' = 6, 'Satellite navigation' = 7, 'Radio-acoustic 
> Sounding System (RASS)' = 8, 'Sodar' = 9, 'Pressure instrument 
> associated with wind measuring equipment but pressure element failed 
> during ascent' = 14, 'Missing value' = 15};
>    enum Time significance { 'Time series' = 1, 'Time averaged (see Note 
> 1)' = 2, 'Accumulated' = 3, 'Forecast' = 4, 'Forecast time series' = 5, 
> 'Forecast time averaged' = 6, 'Forecast accumulated' = 7, 'Ensemble mean 
> (see Note 2)' = 8, 'Ensemble mean time series' = 9, 'Ensemble mean time 
> averaged' = 10, 'Ensemble mean accumulated' = 11, 'Ensemble mean 
> forecast' = 12, 'Ensemble mean forecast time series' = 13, 'Ensemble 
> mean forecast time averaged' = 14, 'Ensemble mean forecast accumulated' 
> = 15, 'Start of phenomenon' = 17, 'Analysis' = 16, 'Start of orbit' = 
> 19, 'Radiosonde launch time' = 18, 'Time of ascending node' = 21, 'End 
> of orbit' = 20, 'Monitoring period' = 23, 'Time of occurrence of wind 
> shift' = 22, 'Nominal reporting time' = 25, 'Agreed time limit for 
> report reception' = 24, 'First guess' = 27, 'Time of last known 
> position' = 26, 'End of scan or time of ending' = 29, 'Start of scan' = 
> 28, 'Missing value' = 31, 'Time of occurrence' = 30};
> 
>   variables:
> 
>     Sequence {
>       String time;
>         :units = "minutes since 2003-06-01 00:00:00Z";
>         :long_name = "time of observation";
>         :_CoordinateAxisType = "Time";
>       byte WMO block number;
>         :missing_value = 127B; // byte
>         :BUFR:TableB_descriptor = "0-1-1";
>         :BUFR:bitWidth = 7; // int
>       short WMO station number;
>         :missing_value = 1023S; // short
>         :standard_name = "station_WMO_id";
>         :BUFR:TableB_descriptor = "0-1-2";
>         :BUFR:bitWidth = 10; // int
>       String Type of station;
>         :units = "CodeTable 0-2-1";
>         :BUFR:CodeTable = "Type of station (0-2-1)";
>         :BUFR:TableB_descriptor = "0-2-1";
>         :BUFR:bitWidth = 2; // int
>       short Year;
>         :units = "Year";
>         :missing_value = 4095S; // short
>         :BUFR:TableB_descriptor = "0-4-1";
>         :BUFR:bitWidth = 12; // int
>       byte Month;
>         :units = "Month";
>         :missing_value = 15B; // byte
>         :BUFR:TableB_descriptor = "0-4-2";
>         :BUFR:bitWidth = 4; // int
>       byte Day;
>         :units = "Day";
>         :missing_value = 63B; // byte
>         :BUFR:TableB_descriptor = "0-4-3";
>         :BUFR:bitWidth = 6; // int
>       byte Hour;
>         :units = "Hour";
>         :missing_value = 31B; // byte
>         :BUFR:TableB_descriptor = "0-4-4";
>         :BUFR:bitWidth = 5; // int
>       byte Minute;
>         :units = "Minute";
>         :missing_value = 63B; // byte
>         :BUFR:TableB_descriptor = "0-4-5";
>         :BUFR:bitWidth = 6; // int
>       float Latitude (coarse accuracy);
>         :units = "degrees_north";
>         :_CoordinateAxisType = "Lat";
>         :BUFR:TableB_descriptor = "0-5-2";
>         :BUFR:bitWidth = 15; // int
>       float Longitude (coarse accuracy);
>         :units = "degrees_east";
>         :_CoordinateAxisType = "Lon";
>         :BUFR:TableB_descriptor = "0-6-2";
>         :BUFR:bitWidth = 16; // int
>       float Height of station;
>         :units = "m";
>         :_CoordinateAxisType = "Height";
>         :BUFR:TableB_descriptor = "0-7-1";
>         :BUFR:bitWidth = 15; // int
>       char Short station or site name(5);
>         :standard_name = "station_id";
>         :BUFR:TableB_descriptor = "0-1-18";
>         :BUFR:bitWidth = 40; // int
>       String Type of measuring equipment used;
>         :units = "CodeTable 0-2-3";
>         :BUFR:CodeTable = "Type of measuring equipment used (0-2-3)";
>         :BUFR:TableB_descriptor = "0-2-3";
>         :BUFR:bitWidth = 4; // int
>       String Time significance;
>         :units = "CodeTable 0-8-21";
>         :BUFR:CodeTable = "Time significance (0-8-21)";
>         :BUFR:TableB_descriptor = "0-8-21";
>         :BUFR:bitWidth = 5; // int
>       float Time period or displacement;
>         :units = "Second";
>         :BUFR:TableB_descriptor = "0-4-26";
>         :BUFR:bitWidth = 13; // int
> 
>       Sequence {
>         short Height above station;
>           :units = "m";
>           :missing_value = 32767S; // short
>           :_CoordinateAxisType = "Height";
>           :BUFR:TableB_descriptor = "0-7-6";
>           :BUFR:bitWidth = 15; // int
>         float Virtual temperature;
>           :units = "K";
>           :BUFR:TableB_descriptor = "0-12-7";
>           :BUFR:bitWidth = 12; // int
>         byte Wind profiler quality control test results;
>           :units = "FlagTable 0-25-34";
>           :missing_value = 15B; // byte
>           :BUFR:TableB_descriptor = "0-25-34";
>           :BUFR:bitWidth = 4; // int
>       } seq1;
> 
>     } obs(*);
> 
> 
>   :history = "Direct read of BUFR data by CDM";
>   :location = "5900.20030601.rass";
>   :BUFR:edition = 3; // int
>   :BUFR:categoryName = "Vertical soundings (other than satellite)";
>   :BUFR:category = 2; // int
>   :BUFR:subCategory = 0; // int
>   :BUFR:localSubCategory = -1; // int
>   :BUFR:centerName = "59.0 (The NOAA Forecast Systems Laboratory, 
> Boulder, CO, USA)";
>   :BUFR:center = 59; // int
>   :BUFR:subCenter = 0; // int
>   :BUFR:table = 0; // int
>   :BUFR:tableVersion = 3; // int
>   :BUFR:localTableVersion = 3; // int
>   :WMO Header = "";
>   :Conventions = "BUFR/CDM";
>   :_CoordSysBuilder = "ucar.nc2.dataset.conv.DefaultConvention";
> }
> 
> 
> -- 
> Brian Schlining
> 
> 
> 
> _______________________________________________
> netcdf-java mailing list
> netcdf-java@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe, visit: 
> http://www.unidata.ucar.edu/mailing_lists/
> 



  • 2013 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: