This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
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/ ===============================================================================