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.
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/ ==============================================================================
decoders
archives: