[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: metar.cdl
- Subject: Re: metar.cdl
- Date: Mon, 26 Apr 2004 11:34:59 -0600 (MDT)
On Mon, 26 Apr 2004, Jim Cowie wrote:
>
> Some of these features would have been nice if they were in place
> earlier, but we would have to change some code to handle the new
> variable names, and we don't have a lot of resources to do that. So
> I doubt we'd be able to make use of this any time soon. Will adding
> a time dimension on the reports cause problems with IDV or other
> display apps?
Jim,
It will cause some code changes but I believe that the IDV folks are
looking at implementing it since the new format makes for better data
access.
Three times per hour is probably enough for the METARs
> on the NOAAport feed, but if you had higher time resolution (I hear
> that you can get 5-minute ASOS data), and set the CDL to a higher
> number, would the decoder handle it?
Right now it set at 3 but scanning metar the code it would not be hard to
implement a user configuration for different values.
Robb...
>
>
> Robb Kambic wrote:
> > 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
> > address@hidden WWW: http://www.unidata.ucar.edu/
> > ===============================================================================
>
>
> --
> Jim Cowie
> NCAR/RAP
> address@hidden
> 303-497-2831
>
===============================================================================
Robb Kambic Unidata Program Center
Software Engineer III Univ. Corp for Atmospheric Research
address@hidden WWW: http://www.unidata.ucar.edu/
===============================================================================