METAR and TAF - The language of aviation meteorology
Posted 9 January 2025Or, well, one of the languages, anyways.
Of all the ways to communicate meteorological data in a machine-readable fashion, METAR is probably one of the easiest to understand. METAR is a standardized way to communicate observation data most commonly used in aviation. It's often used alongside TAF (the Terminal Aerodrome Forecast), a directly related means of communicating forecast data. You probably won't ever need either, but I figured I'd give you a lesson in the two anyways using the following METAR string and TAF data from 08 June 2022:
KGKY 081353Z 18012G25KT 10SM BKN021 27/22 A2985 RMK AO2 SLP097 T02670217
KGKY 081401Z 0814/0912 19012KT P6SM FEW025 BKN250
TEMPO 0814/0815 BKN025
FM081600 01015KT P6SM VCTS SCT050CB BKN100
FM082100 07009KT P6SM SCT250
First, let's talk about why you might want to use METAR and TAF. The most obvious reason is if you're a pilot. As alluded to in the title, these are extremely important in communicating meteorological data in aviation. The International Civil Aviation Organization (ICAO) is one of the primary bodies behind the standard, alongside the World Meteorological Organization. METAR and TAF are part of VOLMET broadcasts which provide weather data for in-progress flights. And, if you choose to get weather info from the US's Aviation Weather Center, you'll be getting it in these format. It is the standard for aviation weather data.
The other reason you might want to use them are for machine-readable storage of weather observations and short-term forecasts. While BUFR, the Binary Universal Form for the Representation of meteorological data, does exist, it's substantially more complex and, as the inclusion of "Binary" likely suggests, it isn't easily human-readable. So, if you'd like to work with observation data, METAR provides a much simpler, human-readable method to do so, or at least a reasonable starting point for your own storage format.
So, then, how do they work? Let's start with the METAR string. Each
section represents a different bit of data. The first chunk,
KGKY
, tells you the airport where the data was collected.
In this case, KGKY is Arlington Regional, located in north Texas. Next
up, 081353Z
, is the date and time. The first two digits,
08
tells you the day of the month. Since this is from
June 2022, as mentioned, this means it's from 08 June 2022. The last
four digits, 1353
, is the time, with the Z
indicating it's in UTC or "Zulu time". Since north Texas was in daylight
savings time at the time, CDT or UTC-5:00 ("UTC minus 5 hours"), this
data was from 08:53 local time.
Next up is wind information. The first three digits, 180
,
is the direction the wind is blowing in degrees off north. Note that
it goes clockwise, with east being 90° and west being 270°. In this
case, winds are directly from the south at 180°. The next two digits,
12
, is the wind speed in knots, as represented by the
KT
at the end. Internationally, wind speeds are given in
meters per second, and so that gets replaced with MPS
. In
this case, we also have wind gusts, as represented by G25
.
So, at the time, winds were at 12 knots gusting up to 25, or 6 meters
per second gusting up to 13.
If winds are from varying directions, you may see two different things.
First, the wind direction may be replaced with VRB
. Second,
after this chunk, you'll see a second chunk giving the two directions
it's varying between. For instance, here, if winds were varying between
170° and 210°, the entire thing would be 18012G25KT 170V210
.
After wind is visibility. 10SM
tells us that the visibility
is 10 statute miles (SM
) or more. Outside the US,
this is given in meters, capping out at 9999. Additionally, in the US,
visibility under a mile is given as a fraction, such as
1/2SM
.
At this point, weather codes, if any, would be given. Here, we have no
weather codes. I won't give a full listing, but I will give some
examples. Part of it is a descriptor. VC
means in the
vicinity. FZ
means freezing precipitation, such as
FZFG
for freezing fog. SH
and TS
,
showers and thunderstorms respectively, can be either descriptors, such
as TSSN
for thundersnow, or weather codes of their own,
such as VCTS
for thunderstorms in the vicinity. The second
part, weather type, could be any number of things. It could be
precipitation, like DZ
for drizzle, RA
for
rain, SN
for snow, and GR
for hail. There are
things that obscure vision, like FG
for fog that brings
visibility under 1 statute mile/kilometer, HZ
for haze,
and FU
for smoke. Finally, there are other things like
SS
for sandstorm, SQ
for squall, or
FC
for funnel cloud. And, finally, the code can be prefixed
by either +
for heavy intensity or -
for
light intensity, such as +VCTS
for heavy thunderstorms in
the vicinity.
After the weather codes is cloud coverage. It's given either as a code for clear or a code representing how many oktas (eighths of the sky) are covered along with the height of that cloud layer in hundreds of feet. Note that it is always in hundreds of feet, regardless of where you are in the world. Here's the codes you can get:
CLR
- No clouds under 12,000 feet (US) or 25,000 (Canada). Typically only used in North America and means the report is at least partially automated.
SKC
- Sky clear. In North America, this means the report is human generated.
NCD
- Nil clouds detected. Means the report is fully automated.
NSC
- No significant clouds. Not used in North America.
FEW
- 1 to 2 oktas
SCT
- Scattered; 3 to 4 oktas
BKN
- Broken; 5 to 7 oktas
OVC
- Overcast; full cloud coverage
VV
- Clouds cannot be seen and Vertical Visibility is given instead.
Note that even though CLR
, SKC
,
NCD
, NSC
are all technically
different, they all just means there are (probably) not any clouds.
There are also a few codes that come after the height:
TCU
- Towering cumulus
CB
- Cumulonimbus
Here, we have BKN021
. So, we have broken clouds, 5 to 7
oktas of the sky covered, and the 021
means the cloud layer
is at 2,100 feet (about 640 meters).
The next part, 27/22
is the temperature and dew point in
degress Celsius. Thus, it's 27°C with a dew point of 22°C. If one or
both are below freezing, the temperature is prefixed with an M. Thus,
M02/M12
means it's -2°C with a dew point of -12°C.
The last part in the main section is the altimeter setting, or
barometric pressure. In the US, this is given in inches of mercury,
where the first two digits are the digits before the decimal and the
last two are the digits after the decimal. Thus, A2985
means the pressure is 29.85 inHg. Outside the US, the A is replaced with
a Q, and it's given in hectoPascals. So, this would be given as
Q1011
, for 1011 hPa or 101.1 kPa.
The remarks section, RMK
and everything following it, are
only used in the US and will vary from airport to airport and time to
time. Let's talk about what we have here. AO2
means this
report was generated by an automated station with precipitation
discriminator. AO1
is similar but without precipitation
discriminator. SLP
is sea level pressure, given as the
last three digits in hPa with a 1 slapped on the front. Here, we have
097
, so the sea level pressure is 1097 hPa.
T02670217
gives us temperature and dew point, this time to
1 decimal place. The two zeros here happen to be sign bits, basically.
In our M02/M12
example from earlier, both of those would
be 1, so it might be T10211127
.
There are also things that might show up in the main block that aren't
used in the US. For instance, you might get runway visual range. So,
like, R04/P1500N
would mean that on runway 4
(R04
), runway visual range is 1500 meters or more
(P1500
) and not changing (N
). U
would mean visibility is increasing, and D
means it's
decreasing. You can also get runway conditions. So, 8849//91
means that for all runways (88
), the runway is coated in
dry snow (4
), more than half of the runway is covered
(9
), thickness is not measurable or is unimportant
(//
), and the braking index is bad (91
). If
conditions are fine, it might note Ceiling and Visibility OK, or
CAVOK
. Finally, internationall METAR ends in =
.
So, for instance, the current conditions for 16 April 2023 at KGKY might
be given in international style as:
KGKY 161853Z 3307G10MPS 9999 CLR 21/M01 Q1025 CAVOK=
Now, let's move on to that TAF. A lot of it is similar to METAR. So,
those first two chunks on the first line are airport, KGKY in this case,
and time and date, 14:01 UTC on the 8th day of the month. Next is the
valid period. These are given as the day and hour for the start and end
times. So, it's valid from 14:00 UTC on the 8th (0814
) to
12:00 UTC on the 9th (0912
). The rest is current conditions
from the time it was issued. So, you can probably figure out by now that
winds are from 190° at 12 knots, there are few clouds at 2,500 feet and
broken clouts at 25,000 feet, and visibility is 6 statute miles. Here,
visibility caps out at 6 statute miles, so P6SM
actually
means 6 statute miles or more.
TEMPO
lines temporarily replace conditions in the current
time period for at least half the time. Here, from 14:00 to 15:00 UTC,
there may be broken clouds at 2,500 feet.
The remaining lines all start with when the conditions start. For our
first line, from (FM
) 16:00 UTC on the 8th, we'll get winds
from 10° at 15 knots, 6 statute miles or more of visibility,
thunderstorms in the vicinity, scattered cumulonimbus clouds at 5,000
feet, and broken clouds at 10,000 feet. Notice that the remainder of the
line basically reads like in METAR. The other line, as you might be able
to surmise, tells us that from 21:00 UTC on the 8th, winds will be 9
knots from 70°, there will be 6 statute miles or more of visibility,
and scattered clouds at 25,000 feet.
There isn't one here, but you may also see a PROB
line.
For instance, PROB30 0817/0819 02015KT 1SM TSRA BKN015CB
would mean that between 17:00 and 19:00 UTC, there's a 30% chance of
thunderstorms with corresponding conditions (low visibility, clouds).
Also not shown here, you might see a RMK line, as with METAR.
So, then, let's put all this together. Here's a METAR and TAF from around the time of publishing:
KGKY 091353Z 09004KT 4SM -SN BKN047 BKN055 OVC080 02/M04 A3026 RMK AO2 RAB1259E36SNB36 SLP249 P0000 T00171039
KGKY 091125Z 0912/1012 00000KT P6SM OVC060
FM091300 13003KT P6SM -RAPL OVC035
FM091600 13005KT 2SM -PLRA OVC008
FM091800 11005KT 1SM -RAPL OVC004
FM092300 03005KT 1SM -SN OVC003
FM100700 36008KT 2SM -SN OVC003
FM101000 35010KT 4SM -SN OVC004
Try to decode it, then click here for the decoding!
So, we have a METAR from Arlington Regional issued on 9 January 2025 at 13:53 UTC (7:53 CST). Winds are from the east at 4 knots. There's 4 statute miles of visibility and light snow. There are broken clouds (probably close to 7 oktas) at 4700 and 5500 feet and the sky is completely covered at 8000 feet. Temperature is 2°C with a dew point of -4°C. Pressure is 30.26 inHg.
This remarks section includes stuff we never addressed above, but we
can identify AO2
, so this was done by an automated
station with precipitation descriminator, SLP
, so sea
level pressure is 1249 hPa, and T
, telling us the
temperature is specifically 1.7°C with a dew point of -3.9°C. As for
the other two parts, RAB1259E36SNB36
tells us that rain
(RA
) began (B
) at 12:59 UTC (6:59 CST) and
ended (E
) at 13:36 UTC (7:36 CST), with snow
(SN
) beginning at 13:36 UTC and not yet ending. The other
part, P0000
means that no liquid-equivalent precipitation
has accumulated yet. If 2.53 inches had accumulated (which it just
might as of time of writing), it'd instead be P0253
.
Our TAF was issued at 11:25 UTC (5:25 CST) and is valid from 12:00 UTC
on the 9th to 12:00 UTC on the 10th (or 6:00 to 6:00 CST). At time of
issuing, there were no winds, more than 6 statute miles of visibility,
and it was overcast at 6000 feet. Starting at 13:00 UTC (7:00 CST),
there's going to be light (-
) rain (RA
) and
ice pellets (PL
), shifting to primarily ice pellets with
rain at 16:00 UTC (10:00 CST), then back to rain with ice pellets at
18:00 UTC (12:00 CST), followed by snow from 23:00 UTC (17:00 CST)
onwards. The cloud level will stay overcast but move downwards to a
minimun of 300 feet between 23:00 and 07:00 UTC (17:00 to 01:00 CST).
Winds will be from the southeast at first, but shift north between
18:00 UTC and 07:00 UTC, with wind speeds increasing from 3 knots at
13:00 UTC to 10 knots at 10:00 UTC (04:00 CST). Finally, visibility
will decrease to a minimum of 1 statute mile at around 18:00 UTC
it starts increasing again at 23:00 UTC up to a maximum of 4 statue
miles at 10:00 UTC.
So, there you go! Now you know how to read METAR and TAF. If you'd like to give your newfound skills a try, you can find METAR data for any airport at The US National Weather Service's Aviation Weather Center website. Why not give it a shot and see how things are at your local airport?
Keywords: Miscellany