Text Data Server (TDS)

By Ryan Romanchuk
On

Developer references to real time open aviation weather related data via ADDS Text Data Server

Data Types

Aircraft Reports


An Aircraft Report is a report of actual weather conditions encountered by an aircraft while in flight. There are two types of reports. An AIREP is a routine, often automated report of in-flight weather conditions such as wind and temperature. A PIREP is reported by a pilot to indicate encounters of hazardous weather such as icing or turbulence. Both are transmitted in real-time via radio to a ground station.

PIREPs and AIREPs are encoded differently. AIREP format is more common outside the contiguous U.S. even though there are some AIREPs over the CONUS. The location is specified by latitude and longitude which is better for international routes. PIREPs are preferred over the CONUS where the location is based on distance and direction to a known Nav Aid such as a VOR.[1]

The human encoding process

PIREP form
FAA FORM 7110-2 [2]
UA/UAA
Routine PIREP, UUA - Urgent PIREP
/OV

Location: Use 3-letter NAVAID idents only.

a. Fix: /OV ABC, /OV ABC 090025.

b. Fix to fix:
/OV ABC-DEF
/OV ABC-DEF 120020
/OV ABC 045020-DEF 120005
/OV ABC-DEF-GHI.

/TM
Time: 4 digits in GMT: /TM 0915.
/FL
Altitude/Flight Level: 3 digits for hundreds of feet. If not known, use UNKN: /FL095, /FL310, /FLUNKN
/TP
Type aircraft: 4 digits maximum, if not known use UNKN: /TP L329, /TP B727, /TP UNKN.
/SK

Cloud layers: Describe as follows:

a. Height of cloud base in hundreds of feet. If unknown, use UNKN.

b. Cloud cover symbol.

c. Height of cloud tops in hundreds of feet.

d. Use solidus (/) to separate layers.

e. Use a space to separate each sub element.

f. Examples:
/SK 038 BKN
/SK 038 OVC 045
/SK 055 SCT 073/085 BKN 105
/SK UNKN OVC

/WX
Weather: Flight visibility reported first. Use standard weather symbols, intensity is not reported: /WX FV02 R H, /WX FV01 TRW.
/TA
Air temperature in Celsius: If below zero, prefix with a hyphen: /TA 15, /TA -06.
/WV
Wind: Direction and speed in six digits. /WV 270045, /WV 280110.
/TB
Turbulence: Use standard contractions for intensity and type (use CAT or CHOP when appropriate). Include altitude only if different from /FL. /TB EXTRM, /TB LGT-MOD BLO-090.
/IC
Icing: Describe using standard intensity and type contractions. Include altitude only if different than /FL: /IC LGT-MDT RIME, /IC SVR CLR 028-045.
/RM
Remarks: Use free form to clarify the report. Most hazardous element first: /RM LLWS -15KT SFC-003 DURGC RNWY 22 JFK.

Developer references


The raw aircraftreports.csv structure is as follows: row[0] through row[4] contains metadata about the results. row[5] includes the header keys. Both PIREPs and AIREPs share the same schema but overload meaning, or ignore some properties all together. The type of record is identified by report_type

No errors
No warnings
58 ms
data source=aircraftreports
1957 results
receipt_time,observation_time,mid_point_assumed,no_time_stamp,flt_lvl_range,above_ground_level_indicated,no_flt_lvl,bad_location,aircraft_ref,latitude,longitude,altitude_ft_msl,sky_cover,cloud_base_ft_msl,cloud_top_ft_msl,sky_cover,cloud_base_ft_msl,cloud_top_ft_msl,turbulence_type,turbulence_intensity,turbulence_base_ft_msl,turbulence_top_ft_msl,turbulence_freq,turbulence_type,turbulence_intensity,turbulence_base_ft_msl,turbulence_top_ft_msl,turbulence_freq,icing_type,icing_intensity,icing_base_ft_msl,icing_top_ft_msl,icing_type,icing_intensity,icing_base_ft_msl,icing_top_ft_msl,visibility_statute_mi,wx_string,temp_c,wind_dir_degrees,wind_speed_kt,vert_gust_kt,report_type,raw_text

Headers

[
    [ 0] "receipt_time",
    [ 1] "observation_time",
    [ 2] "mid_point_assumed",
    [ 3] "no_time_stamp",
    [ 4] "flt_lvl_range",
    [ 5] "above_ground_level_indicated",
    [ 6] "no_flt_lvl",
    [ 7] "bad_location",
    [ 8] "aircraft_ref",
    [ 9] "latitude",
    [10] "longitude",
    [11] "altitude_ft_msl",
    [12] "sky_cover",
    [13] "cloud_base_ft_msl",
    [14] "cloud_top_ft_msl",
    [15] "sky_cover",
    [16] "cloud_base_ft_msl",
    [17] "cloud_top_ft_msl",
    [18] "turbulence_type",
    [19] "turbulence_intensity",
    [20] "turbulence_base_ft_msl",
    [21] "turbulence_top_ft_msl",
    [22] "turbulence_freq",
    [23] "turbulence_type",
    [24] "turbulence_intensity",
    [25] "turbulence_base_ft_msl",
    [26] "turbulence_top_ft_msl",
    [27] "turbulence_freq",
    [28] "icing_type",
    [29] "icing_intensity",
    [30] "icing_base_ft_msl",
    [31] "icing_top_ft_msl",
    [32] "icing_type",
    [33] "icing_intensity",
    [34] "icing_base_ft_msl",
    [35] "icing_top_ft_msl",
    [36] "visibility_statute_mi",
    [37] "wx_string",
    [38] "temp_c",
    [39] "wind_dir_degrees",
    [40] "wind_speed_kt",
    [41] "vert_gust_kt",
    [42] "report_type",
    [43] "raw_text"
]
  • aircraft_ref is the Aircraft Type Designator[2] for PIREPs and the aircraft's callsign for AIREPs
  • There are three optional condition (icing, turbulence, and sky) reports, each with up to two layers. { icing_condition: [ {}, {} ] }

Using AWS S3's SelectObjectContent[3], the following query examples can be used to filter and stream both compressed gzip and csv rows in real time.

SELECT * FROM s3object s LIMIT 5 
SELECT * FROM s3object s where s._43 = 'PIREP' OR  s._43 = 'AIREP'
SELECT * FROM s3object s where s._43 = 'PIREP'

METARs


Headers
{
  "_1": "raw_text",
  "_2": "station_id",
  "_3": "observation_time",
  "_4": "latitude",
  "_5": "longitude",
  "_6": "temp_c",
  "_7": "dewpoint_c",
  "_8": "wind_dir_degrees",
  "_9": "wind_speed_kt",
  "_10": "wind_gust_kt",
  "_11": "visibility_statute_mi",
  "_12": "altim_in_hg",
  "_13": "sea_level_pressure_mb",
  "_14": "corrected",
  "_15": "auto",
  "_16": "auto_station",
  "_17": "maintenance_indicator_on",
  "_18": "no_signal",
  "_19": "lightning_sensor_off",
  "_20": "freezing_rain_sensor_off",
  "_21": "present_weather_sensor_off",
  "_22": "wx_string",
  "_23": "sky_cover",
  "_24": "cloud_base_ft_agl",
  "_25": "sky_cover",
  "_26": "cloud_base_ft_agl",
  "_27": "sky_cover",
  "_28": "cloud_base_ft_agl",
  "_29": "sky_cover",
  "_30": "cloud_base_ft_agl",
  "_31": "flight_category",
  "_32": "three_hr_pressure_tendency_mb",
  "_33": "maxT_c",
  "_34": "minT_c",
  "_35": "maxT24hr_c",
  "_36": "minT24hr_c",
  "_37": "precip_in",
  "_38": "pcp3hr_in",
  "_39": "pcp6hr_in",
  "_40": "pcp24hr_in",
  "_41": "snow_in",
  "_42": "vert_vis_ft",
  "_43": "metar_type",
  "_44": "elevation_m"
}
S3 Filtering
SELECT * FROM s3object s where s._43 = 'METAR' or s._43 = 'SPECI';
SELECT * FROM s3object s where s._43 = 'METAR';
Station Id/Location Identifiers

  1. https://www.aviationweather.gov/airep/help ↩︎

  2. https://www.icao.int/publications/DOC8643/Pages/Search.aspx ↩︎

  3. https://docs.aws.amazon.com/AmazonS3/latest/API/API_SelectObjectContent.html ↩︎

  4. https://www.faa.gov/regulations_policies/orders_notices/index.cfm/go/document.current/documentNumber/7350.9 ↩︎

  5. https://www.faa.gov/air_traffic/publications/atpubs/locid_html/chap1_section_1.html ↩︎

talk