OpenAir airspace format
v1 · v2.1 We-Fly

Interactive specification

The OpenAir airspace format, made legible.

A line-oriented, plain-text language for describing airspace as points, circles and arcs. It has no single formal grammar — this reference reconciles the maintained Naviter/SeeYou spec, the openAIP parser, and the original Winpilot definition into one place you can actually read and test.

Plain text, line-oriented WGS84 coordinates Feet & flight levels Circles · arcs · polygons
01 Overview

What OpenAir describes

Each airspace is a block of records that begins with an AC (airspace class) record and runs until the next AC or end of file. A block carries metadata records — name, ceiling, floor, frequency — and one or more geometry records that trace its horizontal boundary.

Two dialects coexist. v1 (original / Winpilot) defines the core airspace and terrain records. v2 / v2.1 (extended / Naviter) adds structured metadata — airspace type, frequency, station, activation times, transponder code — and a version header. v2.1 is the current, actively maintained dialect.

Reference implementation. Every device varies. When in doubt, follow the openAIP OpenAIR parser — it is the flavour most airspace data is distributed in, and the source We-Fly ingests.
02 File structure

Lines, headers & comments

Plain text, one record per line, UTF-8. A record is a 1–2 letter prefix, a space, then its argument(s). Both CRLF and LF line endings should be tolerated.

Header (v2+)

extended header
*VERSION: 2.1
*WRITTEN_BY: We-Fly

The * prefix marks a comment to end of line; v1 parsers ignore the header harmlessly.

Delimiter gotcha. A block ends only at the next AC or EOF. Blank lines and comments between airspaces are optional and inconsistent — never treat a blank line as a required separator, and remember comments can appear between coordinates.
03 Coordinates

Two notations, one datum

Coordinates are written latitude longitude, each with a hemisphere letter, in WGS84. Both notations below must be accepted; the hemisphere letter may be attached or space-separated.

NotationLatitudeLongitudeExample
DMS deg:min:secDD:MM:SS[N|S]DDD:MM:SS[E|W]53:47:06N 008:21:41E
DDM deg:dec-minDD:MM.mmm[N|S]DDD:MM.mmm[E|W]39:36.8N 119:46.1W
Try it · coordinate → decimal
04 Altitudes

Ceilings & floors (AH / AL)

A value is a number plus a reference datum, or a symbolic keyword. Values are in feet unless stated. A trailing ft is optional and inconsistently present.

TokenMeaningApplies to
UNLUnlimited / no upper boundAH (ceiling)
GND, SFCGround / surface = 0 AGLAL (floor)
FL<n>Flight level — hundreds of feet @ 1013.25 hPaboth
<n> AMSL / MSLFeet above mean sea levelboth
<n> AGLFeet above ground levelboth
STDStandard-pressure reference (pairs with FL)both

AMSL (Naviter/openAIP) and MSL (Winpilot) are equivalent — accept both. Examples: AH FL145, AH UNL, AL 1000ft AMSL, AL GND.

05 Record explorer

Every record type

Filter by name or code, or narrow by category. Categories mirror an aeronautical chart legend — colour encodes what a record does.

06 AC classes

Airspace class values

The AC record carries an ICAO class letter or a legacy token. In the extended dialect, structural nature (CTR, TMA, danger…) moves to AY, leaving AC for the ICAO class — but older files overload AC. Accept both.

ValueMeaningGroup
AGICAO airspace classes A through GICAO
UNCUnclassifiedICAO
RRestrictedLegacy
PProhibitedLegacy
QDangerLegacy
GPGlider prohibitedLegacy
CTRControl zoneLegacy
WWave windowLegacy
07 AY types

Airspace type values v2 / v2.1

The AY record gives the structural airspace type, complementing the ICAO class in AC. Known values:

08 Line inspector

Paste OpenAir, read it back in English

Edit the file on the left. Every line is parsed live — the record code is colour-coded by category, coordinates are converted to decimal, and altitudes are spelled out. Unknown lines are flagged.

OpenAir source · editable
Parsed live
09 Parsing gotchas

Be permissive on input, strict on output

  • Block delimiters. Rely only on AC as the boundary. Never require blank lines; never treat comments as separators.
  • Arc winding. DA/DB depend on the current V D=. Reset direction before each arc; a missing V D= means clockwise (+).
  • Center lifetime. V X= persists until reassigned. A circle/arc with no preceding V X= is malformed — reject, don't guess.
  • Radius units. DC/DA radii and V W= width are all nautical miles, unit omitted.
  • Altitude synonyms. Accept AMSLMSL, GNDSFC, optional ft; UNL only as a ceiling.
  • Coordinate notation. Support DMS and DDM, hemisphere attached or detached.
  • Unknown records. Skip unrecognised prefixes rather than failing the whole file.
  • Polygon closure. Polygons are implicitly closed; don't assume the last DP repeats the first.
10 Version summary

v1 vs v2 / v2.1

Featurev1 (Winpilot)v2 / v2.1 (Naviter)
Header *VERSION, *WRITTEN_BY
AC AN AH AL AT
Geometry DP DC DA DB DY✓ (DY rare)
Variables V X= D= W= Z=
Terrain/drawing SP SB TO TCignored
AY type
AF freq, AG station
AI id, AA activation, AX transponder
Altitude datum spellingMSL / SFCAMSL / GND / STD
11 Sources

What this reconciles