NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

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

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

Attachment: 5900.20030601.rass
Description: Binary data

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