Aviation Data

Design Notes

[ airports | runways | navaids | fixes | routes | legs || csv | sgb | sqlite ]
[ airports | runways | navaids | fixes | routes | legs || csv | sgb | sqlite ]

Airports

An example airport:

Airport:
  faa_ident: ITO
  icao_ident: PHTO
  name: "HILO INTL"
  state: HAWAII
  latitude: 19.7203333333
  longitude: -155.0485
  elevation: 38

Try not to make assumptions about FAA and ICAO identifiers. Not all airports have 4 letter ICAO identifers:

Airport:
  faa_ident: Y91
  name: "HOME ACRES SKY RANCH"
  ...

And not all FAA identifiers have three letters:

Airport:
  faa_ident: 05AK
  name: "WASILLA CREEK AIRPORT"
  ...

The last assumption I've seen is that the ICAO identifier is simply 'K' in front of the FAA identifier. This doesn't work for Alaska and Hawai'i.


[ airports | runways | navaids | fixes | routes | legs || csv | sgb | sqlite ]

Runways

Runway information for a subset of airports, pulled from NGS data.

Example runway:

Runway:
  airport: PHTO
  ident: 3
  latitude: 19.7124899722
  longitude: -155.062438972
  elevation: 33.7
  length: 5600
  width: 150

[ airports | runways | navaids | fixes | routes | legs || csv | sgb | sqlite ]

Navaids

An example Navaid:

Navaid:
  ident: ITO
  latitude: 19.7213611111
  longitude: -155.0109444444
  elevation: 23
  frequency: 116.9
  type: VORTAC
  magvar: -11

Example types include: VOR, VORTAC, VOR/DME, LOM, NDB, LOC, LOC/DME, LOC|SDF, LDA, LDA/DME.


[ airports | runways | navaids | fixes | routes | legs || csv | sgb | sqlite ]

Fixes

A fix is any aviation waypoint, including intersections, all airports, and all navaids.

A couple of example fixes:

Fix:
  ident: PHTO
  latitude: 19.72033333
  longitude: -155.0485
  type: AIRPORT

Fix:
  ident: ITO
  latitude: 19.7213611111
  longitude: -155.010944444
  type: VORTAC

Fix:
  ident: OKALA
  latitude: 20.0218888889
  longitude: -155.264638889
  type: FIX

The ident is not unique: there are several identically named NDBs, for example.


[ airports | runways | navaids | fixes | routes | legs || csv | sgb | sqlite ]

Routes

Routes can be Victor routes, high altitude JET routes, departure procedures (DPs), Standard Terminal Arrival Routes (STARs), or placeholders for instrument approaches.

A couple of example routes:

Route:
  name: BETTE3.BETTE
  type: DEP
  airport: KJFK

Route:
  name: BETTE3.ACK
  type: DEP
  airport: KJFK

Route:
  name: PARCH.PARCH1
  type: ARR
  airport: KJFK
  conditions: "LDG RWYS 4 L/R, 13 L/R, 31 L/R"

Route:
  name: PARCH.PARCH1
  type: ARR
  airport: KJFK
  conditions: "LDK RWYS 22 L/R"

Route:
  name: V22
  type: VIC

[ airports | runways | navaids | fixes | routes | legs || csv | sgb | sqlite ]

Legs

Consider routes as a directed graph. Fixes are the graph vertices. Legs are the graph arcs.

Most routes are undirected: there are two leg records for each actual leg:

Leg:
  route: V16
  from_fix_id: OKALA
  to_fix_id: TIGAH

Leg:
  route: V16
  from_fix_id: TIGAH
  to_fix_id: OKALA

But some routes are directed: Departure procedures and STARs, for two examples.

There are also leg records for every instrument procedure. There is one leg record for every IAF or IF to the destination airport.


[ airports | runways | navaids | fixes | routes | legs || csv | sgb | sqlite ]

CSV - Comma Separated Values

Each table of aviation data is available as a separate file in CSV format, suitable for importing into spreadsheets.

The first row of each file is meta-data, name=value pairs that describe the file. Example:

start=2010-11-18T09:01:00,end=2011-01-13T09:01:00,version=1.0,note=NOT FOR NAVIGATION
Name Description Format Example
start Effective start date of the data ISO 8601 date/time format 2010-11-18T09:01:00
end Effective end date of the data, 56 days past the start date ISO 8601 date/time format 2011-01-13T09:01:00
version Version of the software that created the CSV major.minor[.release] 0.1
note Do not use this data for navigation

The second row is the normal CSV header, upper-case column names.

latitude is a floating point, positive (0..90.0) for North, negative (0..-90.0) for South.

longitude is a floating point, positive (0..180.0) for East, negative (0..-180.0) for West. elevation is in feet MSL.


[ airports | runways | navaids | fixes | routes | legs || csv | sgb | sqlite ]

SGB - Stanford Graphbase

Donald Knuth's classic book The Stanford Graphbase has a lot of clever routines for dealing with graphs.

The entire FAA route structure is stored as a single .gb graph, suitable for use with restore_graph.

Look at the example program shortest_path.c for an example on how to use Dijkstra's shortest path algorithm to find a route between any two airports.

Data types:

Graph uu.S effective start date, in ISO 8601 format
vv.S effective end date, in ISO 8601 format
ww.S version of software creating the data
xx.S NOT FOR NAVIGATION
Vertex name FAA fix identifier
u internal SGB hashing
v internal SGB hashing
w.I latitude of fix in integer arcseconds (divide by 3600.0 to get degrees)
x.I longitude of fix in integer arcseconds (divide by 3600.0 to get degrees)
y internal SGB Dijskstra algorithm
z internal SGB Dijsktra algorithm
Arc len length of route leg, in arcseconds (1/60 of a nautical mile)
a.S name of route

[ airports | runways | navaids | fixes | routes | legs || csv | sgb | sqlite ]

SQLite

Look at routes.sql for the schema.

A sample command line session with SQLite data:

$ sqlite3 routes_24MAY2018.db
sqlite> select * from airports where icao_ident='PHTO';
PHTO|ITO|PHTO|HILO INTL|HAWAII|19.720333333|-155.0485|38

The database has an extra table, properties, consisting of key/value pairs.

Property Type Description
start ISO 8601 date/time Effective date
end ISO 8601 date/time Effective end date
version String major.minor[.release] Version of software creating the database
note String Not for navigation