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.
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
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.
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.
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
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.
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.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 |
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 |