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.

metar.cdl

NOTE: The decoders mailing list is no longer active. The list archives are made available for historical reasons.

Jim,

I've been working on a new cdl for the metar data. Trying to merge some
variables with different units and making the names more human readable.
Also, there is only one record per station so I have 3 slots available so
up to reports per hour can be stored. If more than 3 reports arrive per
station the appropriate slot is overwritten. Would this scheme fit in with
your work? Appended is the cdl.

Robb...

netcdf metar  {                         // metar netCDF definition

dimensions:
        station = UNLIMITED ;
        station_name_len = 4;
        interval = 3 ;
        interval_minutes_len = 5 ;
        time_len = 20 ;
        vis_len = 2 ;
        weather_len = 16;
        report_len = 192;

variables:

        // Gives the time ranges for the intervals 1-3
        char interval_minutes( interval, interval_minutes_len ) ;
                interval_minutes:long_name = "minutes range for interval";
                interval_minutes:_FillValue = "\0";

        // Station information
        char station( station, station_name_len ) ;
                station:long_name = "Station name";
                station:_FillValue = "\0";
                station:reference = "sfmetar_sa.tbl";
        long wmo_id( station ) ;
                wmo_id:long_name = "Numeric WMO Identifier";
                wmo_id:_FillValue = -99999;
                wmo_id:reference = "Air Force station bulletin";
        float latitude( station ) ;
                latitude:long_name = "Station latitude";
                latitude:_FillValue = -99999.f;
                latitude:valid_range = -90.0, 90.0;
                latitude:units = "degrees";
        float longitude( station ) ;
                longitude:long_name = "Station longitude";
                longitude:_FillValue = -99999.f;
                longitude:valid_range = -180.0, 180.0;
                longitude:units = "degrees";
        int elevation( station ) ;
                elevation:long_name = "Station elevation";
                elevation:_FillValue = -99999;
                elevation:units = "meters";

        // Report time information
        char datetime( station, interval, time_len ) ;
                datetime:long_name = "Observation time";
                datetime:_FillValue = "\0";
               // units YYYY-MM-DD hh:mm:ssZ  (ISO 8601)
        long time_observation( station, interval ) ;
                time_observation:long_name = "time of Observation";
                time_observation:_FillValue = -99999;
                time_observation:units = "seconds since 1970-01-01 00 UTC";
        long time_nominal( station, interval ) ;
                time_nominal:long_name = "time nominal";
                time_nominal:_FillValue = -99999;
                time_nominal:units = "seconds since 1970-01-01 00 UTC";

        // Wind
        int wind_from_direction( station, interval ) ;
                wind_from_direction:long_name = "Wind From Direction";
                wind_from_direction:_FillValue = -99999;
                wind_from_direction:valid_range = 0, 360;
                wind_from_direction:units = "degrees";
        float wind_speed( station, interval ) ;
                wind_speed:long_name = "Wind Speed";
                wind_speed:_FillValue = -99999.f;
                wind_speed:units = "m/s";
        float wind_gust( station, interval ) ;
                wind_gust:long_name = "Wind Gust";
                wind_gust:_FillValue = -99999.f;
                wind_gust:units = "m/s";
        int wind_from_direction_min( station, interval ) ;
                wind_from_direction_min:long_name = "wind from direction 
minimum";
                wind_from_direction_min:_FillValue = -99999;
                wind_from_direction_min:valid_range = 0, 360;
                wind_from_direction_min:units = "degrees";
        int wind_from_direction_max( station, interval ) ;
                wind_from_direction_max:long_name = "wind from direction 
maximum";
                wind_from_direction_max:_FillValue = -99999;
                wind_from_direction_max:valid_range = 0, 360;
                wind_from_direction_max:units = "degrees";
        int wind_peak_from_direction( station, interval ) ;
                wind_peak_from_direction:long_name = "Peak wind direction";
                wind_peak_from_direction:_FillValue = -99999;
                wind_peak_from_direction:valid_range = 0, 360;
                wind_peak_from_direction:units = "degrees";
        float wind_peak_speed( station, interval ) ;
                wind_peak_speed:long_name = "Peak wind speed";
                wind_peak_speed:_FillValue = -99999.f;
                wind_peak_speed:units = "m/s";
        char wind_peak_time( station, interval, time_len ) ;
                wind_peak_time:long_name = "Peak wind time";
                wind_peak_time:_FillValue = "\0";
               // units YYYY-MM-DD hh:mm:ssZ  (ISO 8601)

        // Visibility
        float visibility_in_air( station, interval ) ;
                visibility_in_air:long_name = "visibility in air";
                visibility_in_air:_FillValue = -99999.f;
                visibility_in_air:units = "miles";
        char visibility_in_air_direction( station, interval, vis_len ) ;
                visibility_in_air_direction:long_name = "visibility in air 
direction";
                visibility_in_air_direction:_FillValue = "\0";
                visibility_in_air_direction:units = "degrees";
        float visibility_in_air_vertical( station, interval ) ;
                visibility_in_air_vertical:long_name = "Vertical visibility in 
air";
                visibility_in_air_vertical:_FillValue = -99999.f;
                visibility_in_air_vertical:units = "meters";
        float visibility_in_air_surface( station, interval ) ;
                visibility_in_air_surface:long_name = "Visibility in air at 
surface";
                visibility_in_air_surface:_FillValue = -99999.f;
                visibility_in_air_surface:units = "meters";

        // Clouds
        float low_cloud_area_fraction( station, interval ) ;
                low_cloud_area_fraction:long_name = "Low cloud area fraction";
                low_cloud_area_fraction:_FillValue = -99999.f;
                low_cloud_area_fraction:units = "";
        float low_cloud_base_altitude( station, interval ) ;
                low_cloud_base_altitude:long_name = "Low cloud base";
                low_cloud_base_altitude:_FillValue = -99999.f;
                low_cloud_base_altitude:units = "meters";
        float middle_cloud_area_fraction( station, interval ) ;
                middle_cloud_area_fraction:long_name = "Middle cloud area 
fraction";
                middle_cloud_area_fraction:_FillValue = -99999.f;
                middle_cloud_area_fraction:units = "";
        float middle_cloud_base_altitude( station, interval ) ;
                middle_cloud_base_altitude:long_name = "Middle cloud base";
                middle_cloud_base_altitude:_FillValue = -99999.f;
                middle_cloud_base_altitude:units = "meters";
        float high_cloud_area_fraction( station, interval ) ;
                high_cloud_area_fraction:long_name = "High cloud area fraction";
                high_cloud_area_fraction:_FillValue = -99999.f;
                high_cloud_area_fraction:units = "";
        float high_cloud_base_altitude( station, interval ) ;
                high_cloud_base_altitude:long_name = "High cloud base";
                high_cloud_base_altitude:_FillValue = -99999.f;
                high_cloud_base_altitude:units = "meters";

        // Temperature
        float air_temperature( station, interval ) ;
                air_temperature:long_name = "Air temperature at 2 meters";
                air_temperature:_FillValue = -99999.f;
                air_temperature:units = "Celsius";
        float dew_point_temperature( station, interval ) ;
                dew_point_temperature:long_name = "Dew point temperature at 2 
meters";
                dew_point_temperature:_FillValue = -99999.f;
                dew_point_temperature:units = "Celsius";

        // Pressure
        float air_pressure( station, interval ) ;
                air_pressure:long_name = "Air pressure at surface";
                air_pressure:_FillValue = -99999.f;
                air_pressure:units = "hectoPascal";
        float air_pressure_at_sea_level( station, interval ) ;
                air_pressure_at_sea_level:long_name = "Air pressure at sea 
level";
                air_pressure_at_sea_level:_FillValue = -99999.f;
                air_pressure_at_sea_level:units = "hectoPascal";

        // Weather
        char weather( station, interval, weather_len ) ;
                weather:long_name = "Weather phenomenia";
                weather:_FillValue = "\0";
                weather:reference = "WMO #306, code table 4658";

        // Precipitation
        float snowfall_amount_last_hour( station, interval ) ;
                snowfall_amount_last_hour:long_name = "Snow fall amount last 
hour";
                snowfall_amount_last_hour:_FillValue = -99999.f;
                snowfall_amount_last_hour:units = "inches";
        float snowfall_amount( station, interval ) ;
                snowfall_amount:long_name = "Snow fall amount on ground";
                snowfall_amount:_FillValue = -99999.f;
                snowfall_amount:units = "inches";
        float precipitation_amount_hourly( station, interval ) ;
                precipitation_amount_hourly:long_name = "Hourly precipitation 
amount";
                precipitation_amount_hourly:_FillValue = -99999.f;
                precipitation_amount_hourly:units = ".01 inches";
        float precipitation_amount_24( station, interval ) ;
                precipitation_amount_24:long_name = "24 hour precipitation 
amount";
                precipitation_amount_24:_FillValue = -99999.f;
                precipitation_amount_24:units = ".01 inches";

        // Raw report with remarks
        char report( station, interval, report_len ) ;
                report:long_name = "Original report";
                report:_FillValue = "\0";
                report:reference = "max length 192";

        :title = "METAR definition";
        :version = 2.0;

//      The metar2nc decoder is dependant on the netCDF variables names
//      because it reads the cdl file to determine the variables to be
//      included in the netcdf file.  A user can comment out or delete
//      variables not to be included in the output file with one exception,
//      the variable 'station' must be included as the first or second position

data:

interval_minutes
 "45-04", // top of hour report interval
 "05-24",
 "25-44" ;

}

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


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