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: