NASA/TM—2014–218385 

Complete Decoding and Reporting of 

Aviation Routine Weather Reports 

(METARs) 

Max Lui 

Intrinsyx Technologies Corporation 

Ames Research Center, Moffett Field, California 

 Click here: Press F1 key (Windows) or Help key (Mac) for help 

October 2014
NASA STI Program ... in Profile 

Since its founding, NASA has been dedicated 

to the advancement of aeronautics and space 

science. The NASA scientific and technical 

information (STI) program plays a key part in 

helping NASA maintain this important role. 

The NASA STI program operates under the 

auspices of the Agency Chief Information Officer. 

It collects, organizes, provides for archiving, and 

disseminates NASA’s STI. The NASA STI 

program provides access to the NTRS Registered 

and its public interface, the NASA Technical 

Reports Server, thus providing one of the largest 

collections of aeronautical and space science STI 

in the world. Results are published in both nonNASA channels and by NASA in the NASA STI 

Report Series, which includes the following report 

types: 

• TECHNICAL PUBLICATION. Reports of 

completed research or a major significant 

phase of research that present the results of 

NASA Programs and include extensive data 

or theoretical analysis. Includes compilations of significant scientific and technical 

data and information deemed to be of 

continuing reference value. NASA counterpart of peer-reviewed formal professional 

papers but has less stringent limitations on 

manuscript length and extent of graphic 

presentations. 

• TECHNICAL MEMORANDUM. 

Scientific and technical findings that are 

preliminary or of specialized interest, 

e.g., quick release reports, working 

papers, and bibliographies that contain 

minimal annotation. Does not contain 

extensive analysis. 

• CONTRACTOR REPORT. Scientific and 

technical findings by NASA-sponsored 

contractors and grantees. 

• CONFERENCE PUBLICATION. 

Collected papers from scientific and 

technical conferences, symposia, seminars, 

or other meetings sponsored or 

co-sponsored by NASA. 

• SPECIAL PUBLICATION. Scientific, 

technical, or historical information from 

NASA programs, projects, and missions, 

often concerned with subjects having 

substantial public interest. 

• TECHNICAL TRANSLATION. 

English-language translations of foreign 

scientific and technical material pertinent to 

NASA’s mission. 

Specialized services also include organizing 

and publishing research results, distributing 

specialized research announcements and 

feeds, providing information desk and personal 

search support, and enabling data exchange 

services. 

For more information about the NASA STI 

program, see the following: 

• Access the NASA STI program home page 

at http://www.sti.nasa.gov

• E-mail your question to help@sti.nasa.gov

• Phone the NASA STI Information Desk at 

757-864-9658 

• Write to: 

NASA STI Information Desk 

Mail Stop 148 

NASA Langley Research Center 

Hampton, VA 23681-2199 

 

This page is required and contains approved text that cannot be changed. 
NASA/TM—2014–218385 

 

Complete Decoding and Reporting of 

Aviation Routine Weather Reports 

(METARs) 

Max Lui 

Intrinsyx Technologies Corporation 

Ames Research Center, Moffett Field, California 

 Insert conference information, if applicable; otherwise delete 

 Click here: Press F1 key (Windows) or Help key (Mac) for help 

National Aeronautics and 

Space Administration 

Ames Research Center 

Moffett Field, CA 94035-1000 

October 2014
Acknowledgments

A special acknowledgement to William Chan, Branch Chief of Code AFO at NASA Ames 

Research Center, for his input in identifying important weather observations that needed to 

be decoded at the early part of this project.

 Click here: Press F1 key (Windows) or Help key (Mac) for help 

Available from: 

 Click here: Press F1 key (Windows) or Help key (Mac) for help 

This report is also available in electronic form at 

http://www.sti.nasa.gov/

NASA Center for AeroSpace Information National Technical Information Service

7115 Standard Drive 5301 Shawnee Road

Hanover, MD 21076-1320 Alexandria, VA 22312

443-757-5802 703-605-6000
iii 

Table of Contents 

Summary ....................................................................................................................................... 1 

1 Introduction ............................................................................................................................ 2

2 Current METAR Decoding Tools ........................................................................................... 3

3 Collecting METAR Data ......................................................................................................... 3

4 Coding Format Overview ....................................................................................................... 4

4.1 Observations Described Only in Remarks Section ......................................................... 4

4.2 Blank Space as a Delimiter ............................................................................................ 6

4.3 Coding Missing Data ...................................................................................................... 6

5 Undocumented Groups .......................................................................................................... 7

5.1 Depth of New Snow (931nnn) ........................................................................................ 7

5.2 Ice Accretion (IHnnn) ...................................................................................................... 7

5.3 Significant Cloud Type Cumulus (CU_LOC) .................................................................. 7

5.4 Low-Level Wind Shear (LLWS) [Plain Language] .......................................................... 7

5.5 Pilot Report (PIREP) [Plain Language] ........................................................................... 7

6 Deviations From Group Coding Format ................................................................................. 8

6.1 Groups Not Reported in Suggested Order ..................................................................... 8

6.2 Standard Coding Format Not Followed .......................................................................... 9

6.3 Combining Multiple Groups Into One Group ................................................................ 10

6.4 Single Group is Split Into Multiple Groups .................................................................... 10

6.5 Missing Separator RMK ................................................................................................ 11

6.6 Wrong Order Within Group Coding Format .................................................................. 12

6.7 Unexpected Descriptors in Groups ............................................................................... 12

6.8 Use of FEW as Descriptor and Cloud Cover Layer ...................................................... 13

6.9 Using Nonstandard Contractions .................................................................................. 14

6.10 Use of NO in Remarks .................................................................................................. 14

6.11 Typographical Errors in Use of 0 (Zero) and O ("Oh") .................................................. 16

6.12 Misspelling of Contractions ........................................................................................... 16

6.13 Inserting Extra Blank Spaces ....................................................................................... 17

6.14 Missing Blank Space .................................................................................................... 17

6.15 Missing or Wrong Units of Measure ............................................................................. 18

6.16 Missing Leading or Trailing Zeroes .............................................................................. 19

 
iv

Table of Contents (cont.) 

7 Algorithm for Decoding Body and Remarks Sections .......................................................... 21

7.1 Using Regular Expressions for Text Pattern Matching ................................................. 21

7.2 Groups Containing Plain Text ....................................................................................... 23

7.3 Metadata Structure to Identify Group ........................................................................... 24

7.4 Steps in Decoding METAR ........................................................................................... 25

7.4.1 Identify All Candidate Tokens ................................................................................ 25

7.4.2 Body Groups Are Not Supposed to Be in the Remarks Section of a Report ......... 26

7.4.3 Copy Qualified Tokens From candidateGroups to qualifiedGroups .......... 26

7.4.4 Fill in Any Unmatched Text ................................................................................... 26

7.4.5 Copy Unique Tokens From qualifiedGroups to uniqueGroups .................. 26

7.4.6 Set Output Fields ................................................................................................... 27

8 Software Implementation ..................................................................................................... 28

9 Storing Decoded METARs Into a Relational Database ....................................................... 30

10 Aggregating Daily Decoded METARs .................................................................................. 31

11 Reporting on Decoded METARs ......................................................................................... 32

12 Case Study of Dust Storm and Ground Stop at Phoenix Airport ......................................... 34

12.1 Ground Stop Advisory # 4 on July 6, 2011, UTC .......................................................... 35

12.2 Ground Stop Advisory # 17 on August 19, 2011, UTC ................................................. 35

12.3 Ground Stop Advisory # 74 on May 9, 2012, UTC ....................................................... 36

12.4 Ground Stop Advisory # 4 on August 27, 2013, UTC ................................................... 36

12.5 Significance of Blowing Widespread Dust Referenced in the Remarks Section .......... 37

13 Further Potential Works ....................................................................................................... 39

14 Conclusions ......................................................................................................................... 39

References .................................................................................................................................. 40

Appendix A: Groups in METAR .................................................................................................. 41

Appendix B: Database Schema Storing Decoded METARs ....................................................... 43
v 

List of Figures 

Figure 1. Number of METARs by airports: thunderstorms referenced in the Remarks 

section only. ................................................................................................................ 5

Figure 2. Number of METARs by airports: lightning referenced in the Remarks section 

only. ............................................................................................................................. 5

Figure 3. METAR decoding and subsequent storage into database implemented using 

Pentaho Data Integration. ......................................................................................... 28

Figure 4. Relational database schema design to store METARs. Partial list of the 200+ 

METAR columns are shown. ..................................................................................... 30

Figure 5. Star Schema dimensional model to store aggregated daily METARs. ...................... 31

Figure 6. METAR daily summary report from ATM NextGen Data Warehouse. ...................... 32

Figure 7. METAR details report from ATM NextGen Data Warehouse. ................................... 33

Figure 8. Sample charts displaying number of windy days measured by wind speed and 

wind gusts at selected airports. ................................................................................. 33

Figure 9. Number of METARs that reported blowing widespread dust. ................................... 38

Figure 10. Number of METARs that reported blowing widespread dust by year. ....................... 38
vi

List of Tables 

Table 1. Groups containing blank space characters. ................................................................ 6

Table 2. Groups not reported in standard order. ....................................................................... 8

Table 3. Coded texts not following the standard coding format of the Peak Wind group. ......... 9

Table 4. Coded texts not following the standard coding format of the Temperature and 

Dew Point group. ......................................................................................................... 9

Table 5. Coded texts not following the standard coding formats of Pressure Rising 

Rapidly and Pressure Falling Rapidly groups. .......................................................... 10

Table 6. Coded texts combined from multiple groups into one group. .................................... 10

Table 7. Coded texts split from one group into multiple groups. ............................................. 11

Table 8. Coded texts with missing Remarks (RMK) separator. ............................................... 11

Table 9. Coded texts not following the order in the Lightning group. ...................................... 12

Table 10. Coded texts with unexpected descriptors. ................................................................. 12

Table 11. Coded texts with FEW as descriptor and cloud cover layer. ..................................... 13

Table 12. Coded texts with nonstandard contractions. ............................................................. 14

Table 13. Coded text with NO to negate previous observations. .............................................. 14

Table 14. Coded texts with NO to describe the absence of observations. ................................ 15

Table 15. Coded text with NO to indicate problems with transmitting reports. .......................... 16

Table 16. Coded texts with misspelling of 0 (zero) and O ("Oh"). ............................................. 16

Table 17. Coded texts with misspelling of contractions. ............................................................ 17

Table 18. Coded texts with extra blank space characters. ........................................................ 17

Table 19. Coded texts with missing blank space characters. .................................................... 18

Table 20. Coded texts with missing or wrong unit of measure. ................................................. 19

Table 21. Coded texts with missing leading or trailing zeroes. ................................................. 20

Table 22. Partial list of regular expression syntax. .................................................................... 22

Table 23. Decoded values in a Wind group. ............................................................................. 22

Table 24. Coded text with plain text from the Thunderstorm Location group. ........................... 23

Table 25. Metadata structure to identify a METAR group. ........................................................ 25

Table 26. Ground Stop advisories related to dust storms at KPHX. ......................................... 34

Table 27. METARs submitted around when Ground Stop advisory # 4 was issued on 

July 6, 2011, UTC at KPHX. ...................................................................................... 35

Table 28. METARs submitted around when Ground Stop advisory # 17 was issued on 

August 19, 2011, UTC at KPHX. ............................................................................... 35

Table 29. METARs submitted around when Ground Stop advisory # 74 was issued on 

May 9, 2012, UTC at KPHX. ..................................................................................... 36

Table 30. METARs submitted around when Ground Stop advisory # 4 was issued on 

August 27, 2013, UTC at KPHX. ............................................................................... 36
1 

Summary 

Aviation Routine Weather Reports (METARs) provide surface weather information at and 

around observation stations, including airport terminals. These weather observations are used 

by pilots for flight planning and by air traffic service providers for managing departure and arrival 

flights. METARs are also an important source of weather data for Air Traffic Management (ATM) 

analysts and researchers at NASA and elsewhere. These researchers use METAR to correlate 

severe weather events with local or national air traffic actions that restrict air traffic, as one 

example. A METAR is made up of multiple groups of coded text, each with a specific standard 

coding format. These groups of coded text are located in two sections of a report: Body and 

Remarks. The coded text groups in a U.S. METAR are intended to follow the coding standards 

set by the National Oceanic and Atmospheric Administration (NOAA). However, manual data 

entry and edits made by a human report observer may result in coded text elements that do not 

follow the standards, especially in the Remarks section. And contrary to the standards, some 

significant weather observations are noted only in the Remarks section and not in the Body 

section of the reports. While human readers can infer the intended meaning of nonstandard 

coding of weather conditions, doing so with a computer program is far more challenging. 

However such programmatic preprocessing is necessary to enable efficient and faster database 

query when researchers need to perform any significant historical weather analysis. Therefore, 

to support such analysis, a computer algorithm was developed to identify groups of coded text 

anywhere in a report and to perform subsequent decoding in software. The algorithm considers 

common deviations from the standards and data entry mistakes made by observers. 

The implemented software code was tested to decode 12 million reports that had been collected 

from 267 airports over 1,575 days. The decoding process was completed in about 20 minutes, 

which translates to a sustained rate of about 10,000 reports per second. Of the 12 million 

reports, the decoding process was able to completely interpret 99.93 percent of the reports. The 

remaining reports (0.07 percent) were partially interpreted and any un-decodable texts within 

each report were identified. 

This document presents the deviations from the standards and the decoding algorithm. Storing 

all decoded data in a database allows users to quickly query a large amount of data and to 

perform data mining on the data. Users can specify complex query criteria not only on date or 

airport but also on weather condition. This document also describes the design of a database 

schema for storing the decoded data, and a Data Warehouse web application that allows users 

to perform reporting and analysis on the decoded data. Finally, this document presents a case 

study correlating dust storms reported in METARs from the Phoenix Sky Harbor International 

Airport with Ground Stops issued by the Air Traffic Control System Command Center 

(ATCSCC). Blowing widespread dust is one of the weather conditions when dust storm occurs. 

By querying the database, 294 METARs were found to report blowing widespread dust at the 

Phoenix airport and 41 percent of them reported such condition only in the Remarks section of 

the reports. When METAR is a data source for an ATM research, it is important to include 

weather conditions not only from the Body section but also from the Remarks section of 

METARs. 
2

1 Introduction 

Aviation Routine Weather Reports (METARs) contain surface weather information collected 

from a weather observation station. These reports are vital to pilots during flight planning, as 

well as to air traffic service providers who must determine the capacity of airspace or an airport 

in the presence of various weather phenomena. The reports are also of use to analysts seeking 

to study weather impacts on Air Traffic Management (ATM) decision making. Therefore they 

represent a valuable source of data to be mined if they can be interpreted by software. 

A METAR reporting station can be either automated or manual. In general, a report is scheduled 

to be disseminated on an hourly basis. When there is a significant weather change, an 

unscheduled Aviation Selected Special Weather Report (SPECI) is disseminated. Each report 

has two sections: Body and Remarks. The text in the report follows standard coding formats as 

documented in the Federal Meteorological Handbook No. 1 (FMH1) [1] by NOAA. Contractions 

are also used throughout a METAR. In the Body section of a report, there are 11 basic 

measurements and present weather observations. Fifty-eight types of possible coded remarks 

such as detailed observations may be appended to a METAR. A blank space is used as the 

delimiter between each group of coded text. Each group of coded text may include free-form 

text that may also include blank spaces. The lack of using a distinct character to separate 

groups of coded text, and the deviations from the coding standards in each group, pose 

significant challenges to a software-based METAR decoding. Focusing on decoding the coded 

text only in the Body section risks the chance of missing important observations reported in the 

Remarks section. Thus, decoding all the coded text in a METAR is essential to getting a full 

picture of all the conditions at an observation station. 

This document describes the results of analyzing deviations from standard coding formats 

identified in 12 million METARs collected from 267 airports over 1,575 days. From these 12 

million reports, all significant deviations were identified and categorized. These deviations are 

also described here because they are critical to understanding reports that don’t follow the 

standard coding formats. Of the 12 million reports, 99.93 percent of them can be completely 

interpreted after the deviations were taken into account. The remaining reports were partially 

interpreted and any un-decodable texts within each report were identified for future analysis. 

This document presents an algorithm for identifying and decoding all groups within a METAR so 

that all of the report content may be used. The decoded METAR data are stored in the NASA 

Ames Aviation Systems Division ATM NextGen Data Warehouse to allow ad-hoc user query 

and data mining. The design of the database schema for storing the decoded METAR data is 

also presented in this document. This document describes the capability of the Data Warehouse 

web application for reporting and analyzing METAR data. 

Finally this document presents a case study of correlating dust storms reported in METARs from 

the Phoenix Sky Harbor International Airport and Ground Stop advisories issued by the Air 

Traffic Control System Command Center (ATCSCC). The case study emphasizes the 

importance of including weather conditions not only from the Body section but also from the 

Remarks section of METARs when conducting ATM research involving METAR as a data 

source. 
3 

2 Current METAR Decoding Tools 

There are many METAR decoding tools that are available to the public, and they are written in 

different programming languages. One of them is the "Python METAR parser" open-source 

project [2], and it is written in Python. This tool decodes about 20 out of 69 METAR observations 

and remarks. It can only decode well-formatted coded text. When mal-formatted coded text is 

encountered, the tool aborts immediately. As will be described later, the tool documented in this 

paper decodes all METAR observations and remarks, and mal-formatted coded text is identified 

and processed accordingly. 

3 Collecting METAR Data 

There are three main data sources that provide METARs: 

1. NOAA's METAR files from the last 24 hours are stored at NOAA's file transfer protocol 

(FTP) site: ftp://tgftp.nws.noaa.gov/data/observations/metar/cycles/

2. Historical METARs are available from the Weather Underground web site: 

http://www.wunderground.com

3. NOAA's Aviation Digital Data Service (ADDS) provides a Web Services interface to get 

the last 141 hours of METARs: http://www.aviationweather.gov/adds/dataserver

ADDS provides decoded METAR but not all the groups in a METAR are decoded. Only 31 fields 

are available [3]. Many groups from the Remarks section such as Lightning and Thunderstorm 

Location are not decoded and made available. Furthermore, ADDS can only decode groups that 

conform to the standard coding format described in FMH1. ADDS also imposes a limit of 1,000 

reports per Web Services call. 

Because NOAA's FTP site imposes no such limit, it is chosen to be the primary data source. In 

case any files cannot be downloaded from the FTP site because of problems on the client side, 

the Weather Underground web site is used as the alternative source; it does not have any date 

range limit when compared to the last-141-hour limit imposed by ADDS. 

METARs from the NOAA's FTP site contain reports from over 4,000 observation stations. Of 

these observation stations, only those corresponding to 267 airports are analyzed and decoded. 

The 267 airports are from a superset of 264 Federal Aviation Administration (FAA) staffed 

facilities [4], 35 FAA Operational Evolution Partnership (OEP) airports [5], and 77 FAA Aviation 

System Performance Metrics (ASPM) airports [6]. 

The daily archiving of the historical METARs commenced on October 15, 2009, and continues 

today. METARs up to February 4, 2014, are used in this document. There are 12,046,057 

METARs collected from 267 airports over 1,575 days. This translates to an average of 28.65 

reports per airport per day. Because METARs are disseminated on a regular hourly schedule, 

the extra 4.65 reports can be explained by the dissemination of unscheduled special METARs. 
4

4 Coding Format Overview 

In order to decode a METAR, one needs to first understand the METAR coding format. Weather 

observations and other information reported in a METAR are divided into "groups" of coded text. 

Each group has its own unique coding format. There are two sections in a METAR: Body and 

Remarks. The Body section contains 11 groups (e.g., Weather Station ID, Wind, and Visibility). 

The Remarks section contains groups that are further classified in two categories: 36 groups in 

the "Automated, Manual, and Plain Language" category, and 22 groups in the "Additive and 

Maintenance Data" category. See Appendix A for complete details. A sample decoded METAR 

is described later in section 0. 

Often observations reported in the Body section may be described with further details in the 

Remarks section (e.g., start time, end time, frequency, intensity, and location and direction of 

thunderstorms). The Remarks section is the portion of the METAR where an observer can enter 

plain text to describe weather phenomena qualitatively. It should be noted that some 

observations are only reported in the Remarks section (e.g., lightning). 

The coding format for each group in a METAR is described in NOAA's FMH1 [1] and in FAA 

Advisory Circulars 00-45G, Aviation Weather Services (AWS) [7]. FMH1 is the definitive source 

on the METAR coding format. AWS compliments the FMH1 by describing METAR information 

as well as other weather products but leaves out information that has no direct impact on the 

aviation community. It also includes photographs of significant clouds and examples of decoded 

METARs. 

Contractions are referenced throughout in a METAR. Standard contractions are described in the 

Aviation Weather Contractions document [8]. 

4.1 Observations Described Only in Remarks Section 

Of the 12 million METARs analyzed, 97.66 percent of reports have Remarks. One example of 

observations that are noted in both the Body and Remarks sections is thunderstorms. Of those 

METARs, there are 100,203 having thunderstorms referenced only in the Remarks section and 

not in the Body section. Normally, thunderstorm observations are first noted in the Body section 

and details are noted in the Remarks section. Details include the beginning and/or ending time 

of thunderstorms, and the location and moving direction. Among those 100,203 reports, 23,437 

reports have locations and/or movement directions of the thunderstorms, and 2,010 of those 

(2 percent) have thunderstorms occurring within 5 statute miles of airports. In other words, a 

reader of those 2,010 reports can only be aware of thunderstorms at the airports by reading the 

Remarks section, because they are completely missing in the Body section. Figure 1 shows the 

number of those 23,437 reports broken down by airport (OEP 35 vs. non-OEP 35 airports) and 

thunderstorm locations. 

Lightning at an airport can affect ramp operations due to safety concerns to the ground 

personnel and may cause or worsen departure and arrival delays. Of the 12 million METARs 

analyzed, 263,685 reports have lightning observations in the Remarks section. In FMH1, 

lightning is not described in the Body section at all. 89,590 reports (34 percent) have lightning 

occurring within 5 statute miles of airport. Figure 2 shows the number of those 263,685 reports 

broken down by airport (OEP 35 vs. non-OEP 35 airports) and lightning locations. 
5 

Figure 1. Number of METARs by airports: thunderstorms referenced in the Remarks 

section only. 

Figure 2. Number of METARs by airports: lightning referenced in the Remarks 

section only. 

OEP35 TS OVHD

0.90% OEP35 TS VC

0.09%

OEP35 TS DSNT

17.31%

OEP35 TS 

DSIPTD

4.40%

Non-OEP35 TS 

OVHD

7.68%

Non-OEP35 TS VC

0.99%

Non-OEP35 TS 

DSNT

54.10%

Non-OEP35 TS 

DSIPTD

14.53%

OEP 35 Airports

Non-OEP 35 Airports

23,437 total number of 

METARs

Thunderstorm (TS) location:

OVHD = Overhead, within 5 SM

VC = Vicinity, between 5 to 10 SM

DSNT = Distant, beyond 10 SM

DSIPTD = Disipitated or Disipitating

OEP35 LTG OVHD

8.27% OEP35 LTG VC

1.11%

OEP35 LTG DSNT

4.30%

Non-OEP35 LTG 

OVHD

25.70%

Non-OEP35 LTG 

VC

3.48%

Non-OEP35 LTG 

DSNT

150,646

263,685 total number of 

METARs

OEP 35 Airports

Non-OEP 35 Airports

Lightnging (LTG) location:

OVHD = Overhead, within 5 SM

VC = Vicinity, between 5 to 10 SM

DSNT = Distant, beyond 10 SM
6

4.2 Blank Space as a Delimiter 

In FMH1, each group has its own unique coding format that may include a blank space 

character. A blank space character is not only used as a delimiter between groups, it is also 

used as a delimiter within the text of a group. Therefore one cannot assume that any text 

between two blank spaces is automatically a group. Table 1 shows a sample METAR from 

AWS. The "Present Weather", "Sky Condition", "Peak Wind", and "Lightning" groups contain 

one or more blank spaces within the respective group, as indicated with the grey background. 

Table 1. Groups containing blank space characters. 

SPECI KCOT 292020Z AUTO 13009KT 3SM TSRA BR SCT011 BKN028 OVC043 23/21 

A2991 RMK AO2 PK WND 13029/2000 LTG DSNT ALQDS P0020 

Group Name Coded Translation

Type of Report SPECI Aviation Selected Special Weather Report 

Station Identifier KCOT United States Cotulla, Texas 

Date and Time of 

Report 

292020Z 29th day of the month, 2020 Coordinated Universal 

Time (UTC) 

Report Modifier AUTO Automated observation with no human augmentation

Wind 13009KT Wind from 130 degrees (the southeast) at 9 knots 

(10 mph, 4.7 m/s) 

Visibility 3SM Visibility 3 statute miles (5 kilometers) 

Runway Visual Range [omitted] 

Present Weather TSRA BR Thunderstorm, moderate rain, mist 

Sky Condition SCT011 

BKN028 

OVC043 

Scattered at 11,000 feet above ground level (AGL), 

Ceiling broken at 2,800 feet AGL, Overcast at 4,300 

feet AGL 

Temperature/ 

Dew Point 

23/21 Temperature 23C (73F), dewpoint 21C (70F) 

Altimeter A2991 29.91 inches of mercury (1013.0 millibars, 1013.0 

hectopascals) 

Remarks RMK Remarks section designator 

Automated, Manual, 

and Plain Language 

AO2 Automated station with a precipitation discriminator 

PK WND 

13029/2000 

Peak wind from 130 degrees (the southeast) at 29 

knots (33 mph, 14.9 m/s) occurred at 2000 UTC 

LTG DSNT 

ALQDS 

Lightning distant all quadrants 

Additive and Automated 

Maintenance Data 

P0020 0.20 inches of precipitation fell in the past hour 

4.3 Coding Missing Data 

According to FMH1, Section 12.5, "When an element does not occur, or cannot be observed, 

the corresponding group and preceding space are omitted from that particular report." In other 

words, the number of groups in a report is not constant. When a group has no data to report in a 

METAR, it is simply skipped in the report. No special placeholder text such as "-NS-" is used. 
7 

5 Undocumented Groups 

Both the FMH1 and AWS publications lack documentation on some groups found in the 

Remarks section of many historical METARs. After thorough analysis of historical METARs, 

these undocumented groups were identified. These groups and their respective coding formats 

are described below. 

5.1 Depth of New Snow (931nnn) 

Depth of new snow (snowfall) is reported every 6 hours at 0000, 0600, 1200, and 1800 UTC, 

when any amount of snow has fallen in the past 6 hours. 931 is the group indicator and nnn

represents the depth of new snow in the past 6 hours reported in tens, units, and tenths of 

inches, using three digits. The new snow includes snow pellets, snow grains, ice pellets, ice 

crystals, and hail. For example, during the 6-hour period it snows two times. After the first snow 

there are 2.3 inches of new snow. Before the second snow, 0.5 inches of the new snow melts. 

The second snow adds another l.4 inches of new snow. The new snow depth is the sum of 2.3 

and 1.4 inches, or 3.7 inches. The reported value of new snow does not include melted snow so 

the group "931nnn" would be coded "931037". Further details are described in the NOAA's 

Supplementary Climatological Data [9]. 

5.2 Ice Accretion (IHnnn) 

Amount of ice accreting is measured on a flat surface (planar icing) as estimated by the data 

from a freezing rain sensor. IH is the group indicator where H can be 1, 3, or 6. When H is 1, the 

measurement is reported hourly for the past hour. When H is 3, the measurement is reported at 

0300, 0900, 1500, and 2100 UTC for the past 3 hours. When H is 6, the measurement is 

reported at 0000, 0600, 1200, and 1800 UTC and covers the past 6 hours. nnn represents the 

thickness accumulated to the nearest one-hundredth of an inch. A trace amount is encoded as 

"000". For example, an ice accretion of 0.04 inch in the past hour and an ice accretion of 0.11 

inch at 1500 UTC would be coded "I1004 I3011". Further details are described in the Automated 

Surface Observing System (ASOS) Release Note [10]. 

5.3 Significant Cloud Type Cumulus (CU_LOC) 

Cumulus cloud is coded in the format CU_LOC where CU is the cloud type and LOC is the 

direction from the station. The cloud type and location entries are separated from each other 

with a space. For example, cumulus clouds beyond 10 but less than 30 nautical miles of the 

station in the direction of north through north-east through south-east would be coded 

"CU DSNT N-NE-SE". 

5.4 Low-Level Wind Shear (LLWS) [Plain Language] 

Low-level wind shear should be coded as LLWS followed by optional descriptive text. For 

example, “LLWS +/- 15KT". 

5.5 Pilot Report (PIREP) [Plain Language] 

Pilot report maybe coded as PIREP followed by observations from a pilot. For example, “PIREP 

2118Z ON FINAL RWY 36L LGT RIME ICG AT 030MSL TEMP -4C BY E-135". 
8

6 Deviations From Group Coding Format 

Because blank spaces cannot be solely used to identify each group in a report, and because 

groups can be omitted from a report when there are no data to report, identifying all groups in a 

report is the first step in decoding a METAR. The text in a METAR needs to be divided into 

separate groups by matching up each group's coding format. 

Twelve million historical METARs were analyzed to check if groups can be identified by their 

coding formats. The METARs from the analysis show that the reports contain groups that do not 

conform to the coding formats as specified in FMH1. Deviations from the coding format are 

likely due to manual data entry or editing by a human observer. Major deviations were identified 

in the following 16 subsections. 

6.1 Groups Not Reported in Suggested Order 

The order of the groups reported in a METAR is usually the same order as listed in Appendix A. 

However, this is not true in every report. Some reports have groups that do not follow the 

suggested order documented in FMH1, especially in the Remarks section. Hence, it is incorrect 

to assume that groups in a report are always in the suggested order. Table 2 shows some such 

examples in highlighted text with misplaced groups in bold. 

Table 2. Groups not reported in standard order. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2011-04-05 08:54 KCRW ... SLP016 PRESRR ... PRESRR SLP016 

(Pressure Rapidly Rising 

group should precede Sea 

Level Pressure group) 

2012-05-07 23:13 KCVG ... TSB13 WSHFT 2310 ... WSHFT 2310 TSB13 

(Wind Shift group should 

precede Beginning of 

Thunderstorms group) 

2013-06-18 04:52 KABI ... SLP144 FRQ LTGICCG 

DSNT NW ... 

FRQ LTGICCG DSNT NW

SLP144 (Lightning group 

should precede Sea Level 

Pressure group) 

2013-07-27 12:52 KATL ... SLP152 SFC VIS 5 ... SFC VIS 5 SLP152 

(Surface Visibility group 

should precede Sea Level 

Pressure group) 

2013-12-21 14:15 KADS ... LTGICCG TSB15 VIS1V2 VIS 1V2 LTGICCG TSB15 

(Variable Prevailing 

Visibility group should 

precede Lightning group) 
9 

6.2 Standard Coding Format Not Followed 

Some METARs do not follow the coding format of a group. The result from the analysis of the 

12 million METARs shows that 31 of the 69 groups deviate from their respective standard 

coding formats. Without knowing what those deviations are, groups that do not conform to the 

standard coding formats will not be identified correctly in a report. 

For example, the Peak Wind group has the coding format of PK WND dddff(f)/(hh)mm where 

ddd is the direction of the peak wind, ff(f) is the 2- or 3-digit peak wind speed in knots since the 

last METAR, and (hh)mm is the time of occurrence. A peak wind of 39 knots from 100 degrees 

that occurred at 0746Z would be coded "PK WND 10039/0746". Table 3 shows examples of 

deviations found in the Peak Wind group. 

Temperature and Dew Point, and Altimeter groups are commonly reported in the METARs. 

Their coding formats are T'T'/T'dT'd and APHPHPHPH respectively. T'T' is a two-digit number 

temperature in Celsius and T'dT'd is a two-digit number dew point in Celsius. A is the Altimeter 

group indicator and PHPHPHPH is a four-digit number indicating the altimeter setting of tens, 

units, tenths, and hundredths of inches of mercury. Table 4 shows some deviations from 

standard coding formats. 

Table 3. Coded texts not following the standard coding format of the Peak Wind group. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2010-12-05 20:54 KSBN ... PK WNO 31026/2006 ... PK WND 31026/2006 

2011-08-28 05:51 KLGA ... PKW09036/0550 ... PK WND 09036/0550 

2011-08-28 08:01 KEWR ... PKWIND 10039/0746 ... PK WND 10039/0746

2011-11-05 21:53 KDFW ... PK WIND 15026/2121 ... PK WND 15026/2121 

2013-07-14 22:53 KLBB ... PEAK WIND 08033/2253 ... PK WND 08033/2253 

Table 4. Coded texts not following the standard coding format of the Temperature and 

Dew Point group. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2010-02-09 07:53 KTUL ... -07/-13 ... M07/M13 (sub-zero temperature and dew 

point should be prefixed with M) 

2013-01-02 12:52 KCID ... -14/-17 30.09 M14/M17 A3009 (sub-zero temperature 

and dew point should be prefixed with M, 

and altimeter setting should be prefixed 

with A and without decimal point) 

2013-08-09 21:42 KADW ... 32 21 ... 32/21 (temperature and dew point should 

be separated by "/") 

2013-10-15 19:47 KADS ... 171/15 ... 17/15 (temperature and dew point should 

each be two-digits long; a value with 

higher precision should be reported as 

T17101500 in the Remarks section) 

2013-11-30 23:15 TIST ... A29 94 ... A2994 (altimeter value should be a 

contiguous four-digit number) 

 
10

Table 5 shows two more examples of groups that do not follow standard coding formats. 

Table 5. Coded texts not following the standard coding formats of Pressure Rising Rapidly and 

Pressure Falling Rapidly groups. 

Group Name Standard Coding Format Variations 

Pressure Rising Rapidly PRESRR PRESSRR 

PRES RR 

PRESS RR 

PRESSURE RISING RAPIDLY 

Pressure Falling Rapidly PRESFR PRESSFR 

PRES FR 

PRESS FR 

PRESRF 

PRESFF 

PRESSURE RAPIDLY FALLING 

PRESSURE FALLING RAPIDLY 

PRESSURE DROPPING RAPIDLY 

6.3 Combining Multiple Groups Into One Group 

Sometimes an observer may, for convenience, combine two separate or similar groups that 

share the same condition by using "/" and "AND". Table 6 shows some examples of combined 

groups in highlighted text. 

Table 6. Coded texts combined from multiple groups into one group. 

Observation Time 

(UTC) 

Observation 

Station Report Text 

2010-12-17 22:56 KLAS ... CIG AND VIS LWR NW-N ... 

2011-11-22 20:55 KRNO ... CCSL/ACSL DSNT N NE ... 

2013-05-18 02:55 KRNO ... ACSL/CCSL ALQDS ... 

2013-07-26 16:53 PAMR ... CEILING AND VIS LOW EAST ... 

2013-08-24 15:57 PANC ... CIG AND VIS LWR NE-SE ... 

6.4 Single Group is Split Into Multiple Groups 

If a group has multiple observations, the observations should be reported adjacent to each other 

to form a single group. Some METARs have a group being split into multiple non-adjacent parts 

of the report. Table 7 shows some examples of these cases, with repeated groups in highlighted 

text. 

 
11 

Table 7. Coded texts split from one group into multiple groups. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2010-06-17 12:53 PANC ... RAB52 SLP171 

RAE46 ... 

RAE46 RAB52 SLP171 or 

RAE46B52 SLP171 (rain ended 

at 46 minutes past the hour and 

began at 52 minutes past the 

hour) 

2011-09-05 20:52 KATL ... CB OHD OCNL 

LTGCG CB MOV N ... 

CB OHD CB MOV N OCNL 

LTGCG ... or CB OHD MOV N 

OCNL LTGCG ... (cumulonimbus 

cloud overhead moving north) 

2012-05-14 20:07 KAGS ... LTG DSNT NE TSB01 

LTG S 

LTG DSNT NE LTG S TSB01 

(lightning in the distant north east 

and in the south) 

2012-05-29 22:45 KSWF ... TS NW ONCL LGT TS 

MOVG SSE 

TS NW TS MOVG SSE ONCL 

LGT or TS NW MOVG SSE ONCL 

LGT (thunderstorms in the 

northwest moving southsoutheast) 

2014-01-05 14:53 KDEN ... SNE43 SLP265 

SNB44 

SNE43 SNB44 SLP265 or 

SNE43B44 SLP265 (snow ended 

at 43 minutes past the hour and 

began at 44 minutes past the 

hour)

6.5 Missing Separator RMK 

A proper METAR should have a "RMK" separator to separate the Body section from the 

Remarks section. Some reports miss the "RMK" separator. Table 8 shows some examples in 

highlighted text with the missing "RMK" in bold. 

Table 8. Coded texts with missing Remarks (RMK) separator. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2009-12-19 14:54 KRIC ... A2957 TWR VIS 1 ... A2957 RMK TWR VIS 1 

2010-03-24 12:45 KMMU ... A2979 PRESRR A2979 RMK PRESRR 

2010-09-22 12:51 KFFZ ... A2966 CB N-S A2966 RMK CB N-S 

2011-07-19 20:50 KBJC ... A3004 LTG DSNT SW A3004 RMK LTG DSNT SW 

2011-08-14 10:53 KBGM ... A2993 CIG 004V009 A2993 RMK CIG 004V009 
12

6.6 Wrong Order Within Group Coding Format 

Some coding formats have a specific order of codes within a group. For example, the Lightning 

group has the format of Frequency_LTG(type)_[LOC], where there is an optional frequency 

contraction, followed by a space, followed by LTG and a lightning type ("CG" (cloud-to-ground), 

"IC" (in cloud), "CC" (cloud-to-cloud), and "CA" (cloud-to-air)), and followed by an optional space 

and lightning location in plain text. Table 9 shows some examples where this format is not 

followed, with errors in highlighted text and misplaced codes in bold. 

Table 9. Coded texts not following the order in the Lightning group. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2010-02-24 20:08 KFPR ... LTG OCNL CC ... OCNL LTGCC (occasional 

lightning from cloud to cloud) 

2010-03-10 16:32 KADS ... LTG CONS ... CONS LTG (continuous lightning) 

2010-09-08 16:44 KACK ... LTG FREQ CG ... FRQ LTGCG (frequent lightning 

from cloud to ground) 

2011-04-28 17:33 KTEB ... VC LTGICCCCG LTGICCCCG VC (lightning within 

cloud, from one cloud to another, 

and from cloud to ground, in 

vicinity 5 to 10 nautical miles) 

2012-06-07 13:25 KABI ... CCCGLGT ... LGTCCCG (lightning from cloud to 

cloud and from cloud to ground) 

6.7 Unexpected Descriptors in Groups 

Some groups do not specify a descriptor (e.g., shape, intensity, frequency) as part of their 

coding formats, yet some reports show such descriptors. Table 10 shows some examples in 

highlighted text with the unexpected descriptors in bold. 

Table 10. Coded texts with unexpected descriptors. 

Observation Time 

(UTC) 

Observation 

Station Report Text 

2010-05-28 22:52 KCLT ... LINE TS MOVD N ... 

2010-10-19 21:53 KDAL ... LRG CB DSNT N MOV SE ... 

2011-08-06 17:35 KCRW ... OCNL TS SW MOV E ... 

2011-08-12 22:53 KDFW ... LN CB DSNT SW-W NW-N MOV NE ... 

2012-04-21 12:53 KDEN ... MULT ACSL SW-W ... 

2013-07-27 12:52 KDFW ... OCNL TCU DSNT SW-NW ... 

2014-01-10 22:53 KDAL ... LN TCU DSNT NW ... 
13 

6.8 Use of FEW as Descriptor and Cloud Cover Layer 

In a METAR, the contraction FEW can be used as an optional descriptor of weather phenomena 

(e.g., cloud or obscuration) and as a cloud cover type. When there is a contraction FEW in a report, 

it is necessary to examine the preceding and the following coded text to determine to which side 

FEW belongs. Table 11 shows some examples in highlighted text and the corresponding groups. 

Table 11. Coded texts with FEW as descriptor and cloud cover layer. 

Observation Time 

(UTC) 

Observation 

Station Report Text Comments 

2010-07-18 11:51 KALB ... RMK ... 

SCT V FEW 70053 ...

SCT V FEW (sky cover was varying 

between scattered and few clouds) is 

a Variable Sky Condition group. 

2010-11-29 16:54 KBOS ... RMK ... SLP338 

FEW CU DSNT NE ...

FEW CU DSNT NE (few 

cumulonimbus clouds in the distant 

north-east) is a Significant Cloud 

Type: Cumulonimbus group. 

2011-02-27 22:53 KAMA ... RMK ... SLP968 

FEW FU N ... 

FEW FU N (few smoke in the north) 

is an Other Significant Information 

group because it does not meet the 

coding format of any groups. 

2011-07-11 18:54 KRFD ...10SM FEW 038 

SCT 150 ... RMK ... 

FEW038 (extra space removed; few 

cloud cover layer at 3,800 feet) is a 

Sky Condition group. 

2011-08-01 17:51 KALB ... RMK ... SCT035 V 

FEW CB DSNT S ... 

SCT035 V FEW (sky cover at 3,500 

feet was varying between scattered 

and few clouds) is a Variable Sky 

Condition group. FEW is not a 

descriptor to the following 

cumulonimbus cloud group.

2011-11-06 23:53 KSAT ... RMK ... SLP128 

FEW SHRA VC ... 

FEW SHRA VC (few rain showers in 

the vicinity) is an Other Significant 

Information group because it does 

not meet the coding format of any 

groups. 

2012-10-10 21:53 KDAL ... RMK ... SLP182 

FEW BRKS IN OVC 

... 

FEW BRKS IN OVC (few breaks in 

overcast; standard contraction of 

breaks in overcast is BINOVC) is an 

Other Significant Information group 

because it does not meet the coding 

format of any groups.

2013-06-23 09:53 KADW ... RMK ... 

BKN018 V FEW PNO 

... 

BKN018 V FEW (sky cover at 1,800 

feet was varying between broken and 

few clouds) is a Variable Sky 

Condition group. 

2014-01-18 18:53 KTLH ... RMK ... 

FU FEW 030 

FU S-SW 

FU FEW030 (extra space removed; a 

few sky cover layer at 3,000 feet 

composed of smoke) is an 

Obscurations group. 
14

6.9 Using Nonstandard Contractions 

In some METARs, some groups do not use standard contractions. Table 12 shows some 

examples from the Beginning and Ending of Precipitation group in highlighted text, and 

nonstandard contractions in bold. 

Table 12. Coded texts with nonstandard contractions. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2010-02-02 13:22 KROA ... SB17PLB20 ... SNB17PLB20 (SN = Snow) 

2010-02-27 12:25 KBED ... SB08 ... SNB08 (SN = Snow) 

2011-05-20 21:47 KBJC ... TB47 ... TSB47 (TS = Thunderstorm) 

2012-12-26 12:46 KBWI ... IPB44 ... PLB44 (PL = Ice Pellet) 

2013-01-08 17:57 KADS ... RB57 ... RAB57 (RA = Rain) 

6.10 Use of NO in Remarks 

Though occurring rarely and being nonstandard according to FMH1, a remark may negate an 

earlier remark within the same METAR. For example, instead of removing an erroneous remark, 

"SNB1455E1458" (snow began at 1455Z and ended at 1458Z), from a report, an observer may 

choose to insert a negating remark "NO SN" to correct the erroneous one in the same report. 

When a report user reads the coded text of such a METAR from the left to the right, the first 

encounter of "SN" can lead to the premature conclusion of the presence of snow only to find out 

that it is negated later on. After detailed analysis was performed on these rare reports, it is 

confirmed that these corrections are made only to the erroneous remarks within the same 

reports and not to the earlier transmitted reports. Table 13 shows some examples in highlighted 

text and negating remarks in bold. 

Table 13. Coded text with NO to negate previous observations. 

Observation Time 

(UTC) 

Observation 

Station Report Text Comments 

2010-04-26 20:53 KBPT ... RMK AO2 WSHFT 2032 

RAB47E50 SLP081 NO RAIN 

OBSERVED ... 

Rain from 2047Z to 2050Z 

was reported in error. 

2010-10-25 11:53 KBNA ... RMK AO2 PK WND 

33036/1139 SLP095 PK WND 

INOPP NO GUST ... 

If peak wind sensor is 

inoperable PK WND 

33036/1139 should have 

been removed entirely. 

2010-12-16 17:24 KBNA ... RMK AO2 SFC VIS 2 

RAB09FZRAB1655E1656 CIG 

004V009 NO FZRA ... 

Freezing rain from 1655Z to 

1656Z was reported in error.

2012-07-06 22:17 KBNA ... RMK AO2 WSHFT 2140 

TSE11 TS SW MOV SW TCU 

ALQDS NO WSHFT 

Wind shift at 2140Z was 

reported in error. 

2013-02-13 15:53 KBNA ... RMK AO2 SNB1455E1458 

SLP114 NO SN ... 

Snow from 1455Z to 1458Z 

was reported in error. 

 
15 

Table 13. Continued. 

Observation Time 

(UTC) 

Observation 

Station Report Text Comments 

2013-07-11 00:00 KDFW ... 10SM FEW001 38/14 

A2990 RMK AO2 T03780144 

CNL SPECI ASOS 

REPORTED IN ERROR NO 

FEW001

FEW001 (few clouds at 100 

feet) should have been 

removed because 

Automated Surface 

Observing System (ASOS) 

reported in error. 

2013-11-04 15:56 KCAE ... RMK AO2 RAB05E35 

SLP324 NO RAIN ASOS 

MISREPRESENTATIVE ... 

Rain from 1505Z to 1535Z 

was reported in error. 

In some other METARs, "NO" is used to describe the absence of an observation. When there is 

nothing to be reported, it should be omitted from the report in general. Otherwise, a METAR 

would be very long just to note the absence of everything possible. Table 14 shows some 

examples where groups are in highlighted text and the absence remarks are in bold. 

Table 14. Coded texts with NO to describe the absence of observations. 

Observation Time 

(UTC) 

Observation 

Station Report Text Comments 

2010-02-16 11:53 KPTK ... 2SM ... A02 NO SFC 

VSBY 4/004 ... 

NO SFC VSBY should not be 

added if there is no surface 

visibility to be reported. But if there 

is low surface visibility of say one 

statute mile to be reported, the 

coded text of SFC VIS 1 should be 

used. 

2010-06-27 21:53 KBHM ... OCNL LTGCG OHD 

TS OHD NO MOV ... 

NO MOV should not be added if 

there is no thunderstorm 

movement. 

2011-07-07 19:53 KBNA ... CB S NO MOV ... NO MOV should not be added if 

there is no cumulonimbus cloud 

movement. 

2013-06-15 16:50 KOKC ... TSB26E27B50 NO 

LTG OBS TS DSNT S 

MOV N ... 

NO LTG OBS should not be 

added if no lightning was 

observed. 

2013-12-08 06:15 KAUS ... RMK AO2 

SNB0559E15 NO SN 

ACCUM ... 

There was snow but no snow was 

accumulated on the ground. If the 

coded text is NO SN, it would be 

treated as a negating remark. 

 
16

In some rare METARs, "NO" is used to describe problems with transmitting the METARs, and 

they have remarks unrelated to weather observations. Table 15 shows some examples where 

groups are in highlighted text and the NO indicators are in bold. 

Table 15. Coded text with NO to indicate problems with transmitting reports. 

Observation Time 

(UTC) 

Observation 

Station Report Text Comments 

2010-11-17 17:54 KROA ... NO AUTO 

TRANSMISSION 

This remark is seemingly an 

artifact from a phone modem 

transmission error, and it has 

nothing to do with weather 

observation. 

2011-02-10 22:53 KFAR ... NO CARRIER RING 

+MCR 

Same as above. 

2011-07-17 10:51 KSAN ... NO CARRIER RING 

CONNECT 1200 

PDXMTRREO ALL 

TTAA00 

Same as above. 

6.11 Typographical Errors in Use of 0 (Zero) and O ("Oh") 

In some METARs, there are some mistaken uses of the letter O (capital letter "Oh") and 0 (digit 

zero). Table 16 shows some examples where groups are in highlighted text and typographical 

errors are in bold. 

Table 16. Coded texts with misspelling of 0 (zero) and O ("Oh"). 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2009-10-28 08:53 PAFA ... RVRN0 RVRNO ("Oh") 

2010-03-23 14:39 KTPA ... 1OSM ... 10SM (zero) 

2010-12-10 02:47 KRHV ... FEW01O BKN080 ... FEW010 BKN080 (zero) 

2011-10-03 10:27 KBUF ... FEW001 0VC003 ... FEW001 OVC003 ("Oh") 

2013-05-27 09:24 KCVG ... 0CNL LTGIC W ... OCNL LTGIC W ("Oh") 

6.12 Misspelling of Contractions 

In some METARs, some contractions do not follow the standards. Table 17 shows some 

examples where groups are in highlighted text and misspellings are in bold. 

 
17 

Table 17. Coded texts with misspelling of contractions. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2010-01-28 15:52 KABI ... OCCNL LTGCG ... OCNL LTGCG 

2010-09-08 01:53 KAGC ... FQNT LTG CCCG ... FRQ LTG CCCG 

2011-04-22 00:52 KABI ... FREQ LTGCTG ... FRQ LTGCTG 

2011-12-15 21:55 KADS ... LTNG DSNT W-N ... LTG DSNT W-N 

2013-07-20 19:30 KABQ ... ONCL LTGICCG E ... OCNL LTGICCG E 

6.13 Inserting Extra Blank Spaces 

In some METARs, extra blank spaces are inserted into the coded text. Table 18 shows some 

examples where groups are in highlighted text and extra blank spaces are underscored. 

Table 18. Coded texts with extra blank space characters. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2010-08-07 01:22 KCHS ... FRO_PA ... FROPA (contraction of frontal 

passage) 

2011-06-15 20:53 KMEM ... SLP_NO ... SLPNO (sea level pressure not 

available) 

2012-02-09 03:45 KSWF ... 25006_KT 10_SM ... 25006KT 10SM (wind of 6 knots in 

the direction of 250° and visibility 

of 10 statute miles) 

2012-11-20 07:51 KEWR ... SLP_230 ... SLP230 (sea level pressure) 

2013-06-21 19:04 KPIA ... LTG_CG DIST W ... LTGCG DIST W (lightning from 

cloud to ground in distance west) 

2013-09-17 16:09 TIST ... TS_NO ... TSNO (sensor of lightning 

detection system is not operating) 

6.14 Missing Blank Space 

Many coding formats of groups have a blank space within the formats. Yet many METARs do 

not insert those required blank spaces. For example, when 1.5 statute miles of visibility is coded 

as "11/2SM" instead of "1 1/2SM", it would be interpreted as 5.5 statute miles. According to 

FMH1, all the expected fractions are from "1/16", ..., "1/2", ..., to "3/4". Each allowed fraction 

always has a numerator smaller than the denominator. Even though "11/2" is a legitimate 

fraction, an experienced reader would interpret it as "1 1/2" instead. 

Blank space is also a delimiter between two groups, but many METARs miss these blank 

spaces or use different characters. Table 19 shows some examples where groups are in 

highlighted text and missing blank spaces are underscored. 

 
18

Table 19. Coded texts with missing blank space characters. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2009-12-25 12:53 KTPA ... RMK/RB45 ... RMK_RAB45 (rain began at 45 

minutes past the hour; "/" is not a 

standard group separator) 

2010-02-10 16:52 KCVG ... VIS S11/2 ... VIS S_1_1/2 (sector visibility of 

1.5 statute miles in the south; 11/2 

is a typo because the smallest 

fraction is 3/4) 

2010-02-26 19:47 KADS ... 11/2SM ... 1_1/2SM (visibility of 1.5 statute 

miles; 11/2 is a typo because the 

smallest fraction is 3/4) 

2010-05-31 19:47 KGYY ... LTGVC ... LTG_VC (lightning in the vicinity, 

i.e., between 5 and 10 statute 

miles from airport) 

2011-04-24 19:53 KTPA ... VCSH/VIS LWR W ... VCSH_VIS LWR W (showers in 

the vicinity and visibility lower to 

the west; "/" is not a standard 

group separator) 

2013-05-16 12:17 KLBB ... RMKAO2 ... RMK_AO2 (type of automation 

station is AO2) 

6.15 Missing or Wrong Units of Measure 

In the Body section, three groups require units of measure as part of the coding format: Wind 

group is in KT (knots), Visibility group is in SM (statute miles), and Runway Visual Range group 

is in FT (feet). All temperate-related groups do not require an explicit statement of the units 

because they are always reported in degrees Celsius implicitly. 

Take the example of a five-digit number "11009". Without a unit of measure in the coded text, 

and without knowing the position of the coded text in the report, "11009" should technically be 

a 6-Hourly Maximum Temperature of –0.9°C because it matches the coding format of the 

6-Hourly Maximum Temperature group. In the group format, the first digit "1" is the group 

indicator, the second digit "1" indicates a negative value ("0" means zero or positive 

temperature value), and the last three digits express temperature in tenths of degrees Celsius. 

But if "11009" is located within the Body section, it is more likely to be a Wind group despite the 

missing unit of measure "KT". In other words, "11009" should be decoded as a 6-hourly 

maximum temperature of –0.9°C instead of 11 knots wind from the direction of 9 degrees, but at 

times the Wind value is what is intended. When there is a "KT" suffix to the five-digit number, 

then there is no ambiguity. Such cases of missing units of measure exist in METARs. Table 20 

shows some examples where groups are in highlighted text and missing units of measure are in 

bold. 

 
19 

Table 20. Coded texts with missing or wrong unit of measure. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2010-01-25 19:45 KADS ... 10 ... 10SM (visibility of 10 statute miles)

2010-08-10 09:53 KDTW ... 04R/1400V3000FTFT 

... 

R04R/1400V3000FT ("FTFT" is a 

typo and missing "R" for runway 

04R) 

2011-05-17 01:52 KDCA ... 11009 ... 11009KT (wind speed of 9 knots 

with a wind direction of 110°) 

2011-06-14 04:53 KMEM ... 00000KT 10FT SKC 

... 

00000KT 10SM SKC (visibility is in 

statute miles and not in feet; 

METARs before and after 2011-

06-14 04:53 reported 10 statute 

miles of visibility) 

2012-03-20 16:53 KCMI ... 18020G33 ... 18020G33KT (wind speed of 20 

knots with a wind direction of 180° 

and gusts at 33 knots) 

2012-05-31 06:56 KISP ... R06/1600V4000 ... R06/1600V4000FT (runway 06 

has a visual range from1,600 to 

4,000 feet) 

2013-04-29 21:51 KMDW ... 18013G26 130V250 ... 18013G26KT 130V250 (wind 

speed of 13 knots with a wind 

direction of 180° and varying from 

130° to 250° and gusts at 13 

knots) 

6.16 Missing Leading or Trailing Zeroes 

Many groups require a fixed number of digits in their coding formats. Leading or trailing zeroes 

are often required to meet the coding formats and to avoid mistaking them for other groups. 

Without correct leading or trailing zeroes, a coded text requires an educated guess to interpret 

it. 

For example, the Temperature and Dew Point group requires the format T'T'/T'dT'd where T'T' is 

a two-digit temperature in Celsius and T'dT'd is a two-digit dew point in Celsius. A value of "9/3" 

can be reasonably interpreted as temperature 9°C and dew point 3°C, instead of 90°C and 30°C 

respectively, but it does not meet the standard. Another example is the Sky Condition group. It 

has a coding format of NNNhhh where NNN is a contraction of sky layer and hhh is the layer's 

3-digit height in hundreds of feet. When hhh is a two-digit number, there can be a missing 

leading zero or trailing zero. Because multiple sky layers can be in a Sky Condition group, and 

each sky layer can be followed by a higher sky layer, examination of adjacent layers can give a 

hint as to whether the missing digit is a leading zero or a trailing zero. 

 
20

But some coded text cannot be decoded at all. For example, consider the Wind group. In the 

simplest format, it has a coding format of a three-digit wind direction in degrees followed by a 

two- or three-digit wind speed in knots. That is a total of five or six digits, depending on whether 

the wind speed is less than 100 or over 100 knots. A value of "2005KT" has a missing digit. Let 

us assume that the missing digit is a zero. But without knowing where the missing zero is, it is 

impossible to know whether it is 02005KT (20 degrees with 5 knots), or 20005KT (200 degrees 

with 5 knots). Table 21 shows some examples where decoding was possible based on other 

knowledge; groups are in highlighted text, and missing leading or trailing zeroes are in bold. 

Table 21. Coded texts with missing leading or trailing zeroes. 

Observation Time 

(UTC) 

Observation 

Station Report Text Correct Code Should Be 

2009-11-02 11:54 KBWI ... 9/3 ... 09/03 (temperature 9°C and dew 

point 3°C) 

2010-06-19 16:47 KADS ... A30 A3000 (altimeter setting of 3.00 

inches of mercury) 

2011-09-24 11:53 KMCI ... FEW80 SCT180 ... FEW080 SCT180 (FEW cloud 

layer has a height of 8,000 feet; it 

cannot be 80,000 feet because the 

next higher SCT (scattered) layer 

is 18,000 feet) 

2011-09-26 10:45 KSWF ... R09/800FT... R09/0800FT (runway R09 has a 

visibility of 800 feet; it cannot be 

8,000 feet because visual range is 

only reported when it is less than 

6,000 feet) 

2011-09-27 09:45 KSWF ... R9/1600FT ... R09/1600FT (runway R09 has 

visibility of 1600 feet; there is no 

runway R90 at KSWF) 

2013-10-29 08:00 TIST ... SCT038 BKN070 

BKN09 ... 

SCT038 BKN070 BKN090 (BKN 

(broken) cloud layer has a height 

of 9,000 feet; it cannot be 900 feet 

because the previously lower BKN 

layer is 7,000 feet) 
21 

7 Algorithm for Decoding Body and Remarks Sections 

This section presents the algorithms developed to extract the maximum possible information 

from METARs in light of the format deviations presented in section 0. As illustrated in section 5, 

an algorithm relying solely on the standard coding formats from FMH1 to identify groups and 

group content would certainly fail in a significant number of cases where the formatting is not 

followed. This section describes the algorithm for identifying groups and decoding them. The 

algorithm was developed to address the following major issues found among the 12 million 

METARs: 

• There is no unique separator character between each group. Even though there is 

supposed to be a blank space character, a blank space character is often also found 

within the text of a group, especially in groups containing plain text. And some groups 

are adjacent to each other without any separators. The missing separators are likely 

caused by manual edits of the reports prior to report submission. 

• Groups are not always reported in the standard group order as described in FMH1. 

Manual edits of some reports may insert groups that do not follow the standard group 

order. 

• Multiple contiguous texts of the same group type may be found in a correctly coded 

METAR. However cases were found where they are not adjacent as they should be. 

Manual edits may append additional observations to the end of the report instead of 

editing existing observations. 

7.1 Using Regular Expressions for Text Pattern Matching 

Central to the algorithm is the use of regular expression [11] processing to perform text pattern 

matching. There are two main reasons for using regular expressions. First, a regular expression 

can be used to find whether a piece of text in a report matches the coding format of a group. If a 

match is found, there is a "group-marker", and the piece of corresponding text in the report can 

be located. Second, regular expressions’ "capturing group" feature can also be used to capture, 

within a group, one or more pieces of text that match additional patterns. This nested pattern 

capability is used to extract multiple pieces of data from within a group. 

A regular expression is a text string that is made up of normal characters and special metacharacters. Table 22 shows a partial list of regular expression syntax. 

For example, the Wind group in the Body part of a METAR has the standard coding format of 

dddff(f)Gfmfm(fm)KT_dndndnVdxdxdx where: 

• ddd is wind direction expressed as a three-digit value in degrees, while the value is VRB

when describing a variable wind direction with a wind speeds of six knots or less. 

• ff(f) is wind speed expressed in two- or three-digit knots. 

• Gfmfm(fm) is the optional gust wind speed expressed with the letter G followed by two- or 

three-digit knots. 

• KT is the wind speed unit of measure. 

• _dndndnVdxdxdx is the variable wind direction range with wind speeds greater than six 

knots. _ is a blank space, dndndn is the lower range three-digit degrees, V is an indicator 

of variable wind direction, and dxdxdx is the upper range three-digit degrees. 

 
22

Table 22. Partial list of regular expression syntax. 

Syntax Feature 

\x Matches any meta-character where x is one of the characters: [\^$.|?*+(){}

\d Matches any digit-character. 

. Matches any character except the newline character. 

| An OR operator to match either side of the | meta-character. The evaluation order 

is from the left to the right. 

(regex) Specify a capturing group based on a regular expression regex. 

(?:regex) Specify a non-capturing group based on a regular expression regex. 

{i} Matches a preceding character or group exactly i times. 

{i,j} Matches a preceding character or group at least i times, but not more than j

times. 

? Matches a preceding character or group zero or one times. 

* Matches a preceding character or group zero or more times. 

+ Matches a preceding character or group one or more times. 

There are five pieces of data that can be coded in a Wind group. If the coded text strictly follows 

the above standard coding formats, the regular expression to identify the Wind group and to 

capture the five pieces of data is: 

(\d{3}|VRB)(\d{2,3})(?:G(\d{2,3}))?KT(?: (\d{3})V(\d{3}))? 

When deviations from the standard coding format are taken into account (e.g., insertion of a 

backslash character "/" between wind direction and wind speed, and a blank space before the 

text string "KT"), the enhanced regular expression is: 

(\d{3}|VRB)\/?(\d{2,3})(?:G(\d{2,3}))? ?KT(?: (\d{3})V(\d{3}))? 

Table 23 shows the texts matching the enhanced regular expression and the corresponding 

capturing group in both standard and nonstandard formats. To identify all possible 68 groups 

found in a METAR, one regular expression needs to be defined for each group. For brevity, the 

rest of regular expressions are not included in this document. 

Table 23. Decoded values in a Wind group. 

Text 

Capturing 

Group #1: 

Wind 

Direction 

Capturing 

Group #2: 

Wind 

Speed 

Capturing 

Group #3: 

Wind Gust 

Speed 

Capturing Group 

#4: Variable Wind 

Direction, Lower 

Range 

Capturing Group 

#5: Variable Wind 

Direction, Upper 

Range 

27020G35KT 270 20 35 null null 

27020G35 KT 270 20 35 null null 

120/08G18KT 120 08 18 null null 

VRB03KT VRB 03 null null null 

21010KT 180V240 210 10 null 180 240 

00000KT 000 00 null null null 
23 

7.2 Groups Containing Plain Text 

About 30 Remarks groups may contain plain text to describe locations, moving directions, 

and/or general remarks about weather observations. Plain text does not have any recognizable 

text patterns in the content. Plain text may contain contractions, blank space characters (which 

are also used for separating groups), and even typos. However, with the exception of the Other 

Significant Information group, all these Remarks groups do have unique group-markers based 

on their unique text patterns. Only the Other Significant Information group is composed of plain 

text entirely, and it can be placed anywhere within a METAR. Any plain text that does not match 

any of the 58 Remarks groups is categorized as the Other Significant Information group. 

The Thunderstorm Location group is a good example of a group containing plain text. Its coding 

format is TS_LOC_(MOV_DIR) where TS is the group indicator, _ is a blank space, LOC is the 

location of the thunderstorm(s) from the observation station, MOV_DIR is the optional 

movement with direction, MOV is an indicator, and DIR is the direction. Both LOC and DIR are 

in plain text. In practice, MOV_DIR may actually is a coded text to describe no or little 

movement, e.g., "NO MOV", "LTL MOVT", "STATIONARY", or "STNRY". The following regular 

expression uses its capturing group feature to identify the location and the optional movement 

with direction: 

TS (?:(.+) (MOV .+|LTL MOVT|NO MOV|STATIONARY|STNRY)|(.+)) 

Table 24 shows some examples of the Thunderstorm Location group, where highlighted text 

belongs to a Thunderstorm Location group, group indicators after the Thunderstorm Location 

groups are in bold italics, and corresponding capturing groups show locations and movement 

with directions. 

Table 24. Coded text with plain text from the Thunderstorm Location group. 

Observation 

Time (UTC) 

Observation 

Station Report Text 

Capturing 

Group # 1: 

Location 

Capturing 

Group # 2: 

Movement 

with 

Direction 

Capturing

Group # 3: 

Location 

Only 

2009-11-02 

11:54 

KCHS ... TS ALL QDTS MOV 

SW P0002 ... 

ALL QDTS MOV SW 

2010-11-22 

20:54 

KRFD ... TS S-SW AND_N MOV 

NE P0000 ... 

S-SW 

AND_N 

MOV NE 

2011-07-28 

20:41 

KHOU ... TS SE LTL MOVT 

P0004

SE LTL MOVT 

2011-07-31 

19:14 

KGPT ... TS NW TO NE 

LTGCCGC ... 

 NW TO NE

2011-07-31 

22:53 

KSAV ... TS SW-NW 

STATIONARY TS OVH ...

SW-NW STATIONARY 

2011-09-24 

11:53 

KCLT ... TS OHD E SIDE 

AIRPORT STNRY 

OHD E SIDE 

AIRPORT 

STNRY 

 
24

When one of these 30 Remarks groups is identified in a METAR and it has plain text, the 

group's plain text is always sandwiched between the group-marker and the next group-marker 

(or the end of the report). The text between two group-markers is called a "gap" piece of text. 

That "gap" piece of text usually contains plain text related to the group, but it may also contain 

information unrelated to the group. For example, consider the report text "... TS ALQDS MOV S 

MICRO BURST N ... ". "ALQDS MOV S MICRO BURST N" is a "gap" piece of text after the 

Thunderstorm Location group (indicated by the group-marker "TS"). "ALQDS MOV S" is a part 

of the Thunderstorm Location group because it follows the expected coding format of 

LOC_(MOV_DIR). A human reader would be able to identify "MICRO BURST N" as a separate 

weather condition because it is unrelated to the movement of the thunderstorm direction. 

Furthermore, because it is not a part of any documented group, it should be categorized as the 

Other Significant Information group instead. For a software-based decoding solution, it would 

need to be programmed to identify text that describes direction so that unrelated text would not 

be included. 

In some actual reports, instead of reporting a movement with direction alone in a Thunderstorm 

Location group, speed was added (e.g., speed in bold, "TS W-NW MOV SLOLY S", "TS VC NES MOV SE SLO"). Thus, in order to decode all plain-text-containing Remarks groups correctly, 

some analysis on the actual reports is required to determine if there is any "extended" coding 

format for each group. 

One possible choice is to use a semantic-based text-recognition engine to determine which part 

of a "gap" piece of text is related to a group of a given coding format. This requires building a 

rich set of vocabulary for each type of description by reading historical reports. The vocabulary 

needs to include contractions as well as typos. For simplicity and performance reasons, this 

document applies a rule-based regular expression to determine which part of the "gap" piece of 

text is related to a group. 

7.3 Metadata Structure to Identify Group 

A METAR is American Standard Code for Information Interchange (ASCII) text that is made up 

of multiple groups separated (ideally) by a blank space character. To identify a group without 

referencing a semantic library of contractions and sound-alike text, the algorithm presented in 

this document relies on the use of regular expressions to perform text pattern matching and 

capturing. Each group in the Body and Remarks sections of a METAR has been assigned a 

corresponding token as part of the algorithm development. This group token, metarGroupsi, 

has the structure shown in Table 25. 

To represent all the possible groups in a METAR, an array of the preceding structure is defined 

as metarGroups. The array includes a special group token to identify the Remarks indicator in 

a report. This is necessary because there are deviations in coding Remarks (RMK). Examples 

are /RMK, RMK/, RMK:, RMKS, R_MK, and RM_K where _ is a blank space character. 

A piece of coded text in a METAR may match multiple candidate groups. For each candidate 

group, the selection criteria for finding the correctly matched group are: 

1. the position of the matched text in the report. 

2. the matched index to the metarGroups. 

3. the position of the matched text relative to a RMK indicator in the report. 

 
25 

Table 25. Metadata structure to identify a METAR group. 

Element Name Data Type Description 

tokenName String Regular expression name assigned to a group. 

tokenRegexpT Regular 

Expression

Text pattern to match a group and to extract subtext 

from within a group. 

tokenRegexpTGlobal Boolean Indicates whether tokenRegexpT should be evaluated 

multiple times until none is found. Otherwise, 

tokenRegexpT should be evaluated just once. 

tokenRegexpE Regular 

Expression 

Text pattern to match any text between the indicator of a 

plain-text-containing group and the indicator of a 

subsequent group (or end of a report). Optional. 

tokenRegexpD Regular 

Expression

Text pattern to extract subtext from within a plain-textcontaining group. Optional. 

For example, if TS (thunderstorm) is found in a METAR, it may be part of either the Present 

Weather group or the Thunderstorm Location group. If there is no RMK indicator in the report, it 

is part of the Present Weather group. If there is a RMK indicator in the report and TS is located 

to the left of RMK, it is part of the Present Weather group. Otherwise, it is part of the 

Thunderstorm Location group. 

In some situations, there may be multiple candidate groups found at the same position in a 

report, and the arbitration rule is determined by the matched index to the metarGroups. The 

lower the matched index value, the higher the precedence order of the group. For example, if 

FZFG BKN010 is found to be located to the right of RMK in a METAR, FZFG BKN010 matches 

the Obscurations group and FZFG also matches the Other Significant Information group. When 

the Obscurations group is placed in a higher precedence order over the Other Significant 

Information group in metarGroups, the longer text string FZFG BKN010 is matched to the 

Obscurations group. 

7.4 Steps in Decoding METAR 

The minimum desired results of decoding a METAR are a) to identify the groups, and b) to 

extract the measured values or observation text from each group. Additional derived data can 

be obtained from these outputs; for example, the ceiling height calculated from a set of sky 

cover layers and the presences of 43 different weather phenomena in the Body and Remarks 

section of a report. There are multiple steps in decoding the text of a METAR. Here are the 

major steps: 

7.4.1 Identify All Candidate Tokens 

For each metarGroupsi in metarGroups, use regular expression tokenRegexpT to search 

in the original METAR text string and find any matched text. Store each of the matched text (the 

position in the original METAR text string and the length of the matched text), and the matched 

index to the metarGroups, matchedMetarGroupsIndex, into an array candidateGroups. 

The candidateGroups array stores all possible group-marker candidates that will be 

evaluated in subsequent processing steps. In addition, if the Remarks group is found, the 

position of the Remarks indicator is saved as remarksFirstIndex. 
26

7.4.2 Body Groups Are Not Supposed to Be in the Remarks Section of a Report 

To apply this rule, for each candidate token, candidateGroupsi, if the candidate group is one 

of the Body groups but the matched text is found to the right of Remarks indicator, special 

reassignment needs to be made. If the candidate token is one of the tokens that have 

tokenRegexpTGlobal set to be true (e.g., Sky Condition group) and the matched text 

contains " CB" or " TCU", it is reclassified as Other Significant Information group. Otherwise, the 

candidate token needs to be removed from the array candidateGroups. 

7.4.3 Copy Qualified Tokens From candidateGroups to qualifiedGroups

To select only the qualified tokens from multiple tokens, first sort the array candidateGroups

by the position in the original METAR text string and by matchedMetarGroupsIndex. For 

each of the sorted candidate tokens in candidateGroups, working from the left to the right of 

original METAR, a token is qualified if its matched text does not overlap with the previous 

qualified token. If it is qualified, it is copied to a new array qualifiedGroups. The 

qualifiedGroups array stores only the qualified group-markers. 

7.4.4 Fill in Any Unmatched Text 

At the end of the previous step, in the original METAR text string, there may be pieces of texts 

that do not get assigned to any of the tokens in qualifiedGroups. These "gap" pieces of text, 

sandwiched between two group-markers, may not match any of the groups or they may be part 

of the groups containing plain text. For the latter case, each of the group's tokenRegexpE is 

needed to identify the "extended" text that belongs to the part of the group as described in 

section 7.3. Depending on how tokenRegexpE is written, the "extended" text may accidentally 

contain coded text from groups that do not follow their coding formats or from undocumented 

groups (see section 7.2). 

For each of the tokens in qualifiedGroups, if the token's tokenRegexpE is defined, the 

"gap" piece of text immediately after the group's matched text should be evaluated. Any 

successfully matched text is added to the existing group's matched text. And if the token's 

tokenRegexpD is defined, the extended matched text will be evaluated to extract any 

additional information. Any remaining "gap" pieces of text are assigned to the array 

unknownBodyGroups if they are located to the left of the Remarks indicator, or assigned to the 

array unknownRemarksGroups if they are located to the right of the Remarks indicator. 

7.4.5 Copy Unique Tokens From qualifiedGroups to uniqueGroups

A group may have multiple pieces of matched text that are not contiguous in the original 

METAR text string (see section 6.4). In order to group all the matched text of a given group, the 

processing will first sort the array qualifiedGroups by matchedMetarGroupsIndex and by 

the position in the original METAR text string. For each of the sorted qualified tokens in 

qualifiedGroups, if two adjacent tokens share the same matchedMetarGroupsIndex,

the matched text need to be concatenated and copied to a new array uniqueGroups. 
27 

7.4.6 Set Output Fields 

At the end of the previous step, there are three arrays: 

1. uniqueGroups is an array of unique groups (Body and Remarks) containing 

corresponding matched text and any extracted subtext from the matched text. 

2. unknownBodyGroups is an array of "gap" pieces of text not matching any groups from 

the Body section of a report. 

3. unknownRemarksGroups is an array of "gap" pieces of text not matching any groups 

from the Remarks section of a report. 

In this step, any desirable output fields can be set by going through the appropriate arrays. 

Additional derived data can be computed. For example, a ceiling height can be computed by 

selecting the height of the lowest layer from the Sky Condition group. A Sky Condition group of 

"FEW 038 SCT 150" has a ceiling height of 3,800 feet. 
28

8 Software Implementation 

The previous section describes the metadata structure and algorithm for decoding a METAR. 

This section describes the implementation of the algorithm, which was performed by using 

Pentaho Data Integration (PDI), an open-source data extraction, transformation, and loading 

application tool. The core logic of the implementation is written in JavaScript. Within PDI, the 

JavaScript code is automatically compiled to byte-code by using an embedded Java-based 

JavaScript engine, Rhino, another open-source Mozilla project. The compilation of the 

JavaScript code to byte-code is set at the highest optimization of 9. 

This implementation also calculates the local time of a report given its UTC time, the UTC time 

zone offset of the airport where the report is submitted, and whether daylight savings time is 

observed at the airport. For example, KDFW has a time zone offset of –7, and it observes 

daylight savings time. A METAR from KDFW at 2009-10-25 04:53 UTC has a local time of 

2009-10-24 23:53. 

Decoded METARs are saved into an Oracle database. This database is part of the ATM 

NextGen Data Warehouse at NASA Ames [12]. The schema of the database table for METARs 

is described in the section 9. Figure 3 shows the PDI implementation, which includes the step of 

saving the decoded data into an Oracle database. 

Figure 3. METAR decoding and subsequent storage into database implemented using 

Pentaho Data Integration. 
29 

A test was performed to see how well the decoding algorithm performs. The test was performed 

on a server with the following hardware specifications: 

• Dual 12-core Xenon processors 

• 94 GB memory; maximum memory allocation of 4 GB is set for PDI 

To perform the test, 12 million METARs, from 267 airports over 1,575 days, were fed into this 

METAR decoding step without the saving-data-to-database step. The METAR decoding step 

was configured to run in 14 concurrent threads. The decoding of the entire 12 million reports 

finished in about 20 minutes, which translates to a sustained rate of about 10,000 reports per 

second. In other words, the 267 hourly METARs submitted from the 267 airports can be 

decoded in about 27 milliseconds. 
30

9 Storing Decoded METARs Into a Relational Database 

In a METAR, there are 69 groups. Some of the groups can be further normalized from a 

relational database modeling standpoint. For example, in the Body section, these groups can be 

normalized: 

• Runway Visual Range group: for each runway, the visual range. 

• Present Weather group: for each weather phenomenon, the respective intensity, 

proximity, and descriptor. 

• Sky Condition group: for each layer, the sky cover and respective altitude. 

In the Remarks section, the text of many groups can be normalized. In the current design, no 

normalization is made, and only the raw text of each group is saved to the database. When 

there are multiple observations coded in a group, only the first observation is further decoded. 

For example, the Lightning group may contain multiple lightning observations. The frequency, 

lightning type, and location of only the first lightning observation from the group are decoded 

and saved into the database. Future enhancements to the current design can include further 

normalizations. 

Figure 4 illustrates the relational model of the METAR table (ODS_METAR_REPORTS) and the 

Airport table (ODS_AIRPORTS). ODS_AIRPORTS stores information about an airport per row 

and its primary key is AIRPORT_ID. ODS_METAR_REPORTS stores one METAR per row and 

its composite primary key is REPORT_DATE_TIME_UTC and STATION_ID. The column 

STATION_ID from ODS_METAR_REPORTS is a foreign key to ODS_AIRPORTS. The 

relationship between these two tables is "Each METAR must reference one and only airport." 

To facilitate a faster search of data in the database, ODS_METAR_REPORTS also contains 

Boolean type of data indicating the presence of 43 weather phenomena in the Body section and 

in the Remarks section. 

Figure 4. Relational database schema design to store METARs. Partial list of the 200+ 

METAR columns are shown. 
31 

10 Aggregating Daily Decoded METARs 

Both weather and air traffic at an airport have a 24-hour cycle pattern. To facilitate search and 

reporting of weather aggregated to a daily level, METARs at each airport are aggregated from 

the respective local time instead of the UTC time of their reports. Star Schema Dimensional 

Modeling [13] is also used to model the daily aggregated observations. See Figure 5. All 

quantitative measurements from METARs are stored in the Fact table called 

F_METAR_REPORT_DAILY_AGG. The dimensional key LTZ_DATE_ID is the date (local time) 

reference to the Dimensional table D_Date; the dimensional key AIRPORT_ID is the airport 

reference to the Dimension table D_AIRPORT; and the dimensional key WX_PHENOMENA_ID 

is the aggregated weather reference to the Dimensional table D_WX_PHENOMENA. Each row 

in D_WX_PHENOMENA is a combination of weather phenomena reported in a 24-hour period. 

A typical characteristic to Star Schema Dimensional Modeling is the large ratio of the number of 

rows in the Fact table to the number of rows from any of the related dimensional tables. This 

dimensional modeling approach is optimal for querying a large amount of data in the shortest 

amount of time. This simple model also allows a user to understand the relationships. There is 

one, and only one, simple join from a dimension to a fact table. By using any ad-hoc query tools, 

a user can specify any descriptive columns from any dimensional tables and any quantitative 

columns from a fact table to filter or to report in a query. 

Figure 5. Star Schema dimensional model to store aggregated daily METARs. 
32

11 Reporting on Decoded METARs 

For the users of the ATM NextGen Data Warehouse at NASA Ames, a web-based reporting 

system was built to access the data in the Oracle database. The reporting system was built 

using the Oracle Application Express application. A user can specify basic search criteria to 

create a report. Built-in features of the Oracle Application Express allow a user to further filter, 

sort, and format data. 

Figure 6 shows a sample of a METAR daily summary report. The search criteria are: a list of 

airports, a list of weather phenomena observed during the day, minimum wind gust, minimum 

wind speed, average wind speed, lowest ceiling height, lowest visibility, and date range or a set 

of dates. A user can click on a link to drill down to the detailed METARs on any given day at an 

airport. Figure 7 shows a sample of a METAR details report. The search criteria are a list of 

airports and a date range or a set of dates. A user can further filter, sort, and download the data 

by using built-in action menu options. Charts can also be created. Figure 8 shows charts of the 

number of days in which there were wind gusts and wind speeds exceeding 25 knots at 

selected airports. 

Figure 6. METAR daily summary report from ATM NextGen Data Warehouse. 
33 

Figure 7. METAR details report from ATM NextGen Data Warehouse. 

Figure 8. Sample charts displaying number of windy days measured by wind speed 

and wind gusts at selected airports. 
34

12 Case Study of Dust Storm and Ground Stop at Phoenix Airport 

A dust storm is a meteorological phenomenon common in arid and semi-arid regions. High 

winds and very low visibility caused by dust storms have significant impact on air traffic 

operations such as departures and arrivals. It is of interest to investigate how METARs can 

predict restrictions in air traffic operations, to perhaps develop predictive models of operational 

impacts. METARs between October 2009 and January 2014 show four dust storms at the 

Phoenix Sky Harbor International Airport in Arizona (KPHX). Each one of the reported dust 

storms had subsequent Ground Stop advisories issued by the ATCSCC. Departure flights from 

affected Centers to KPHX were halted as a result. Table 26 shows these Ground Stop 

advisories. 

Table 26. Ground Stop advisories related to dust storms at KPHX. 

Ground Stop (GS) Advisory Ground Stop Cancellation (GSX) 

Advisory 

Date 

UTC 

ADVZY 

# 

GS Begin 

(UTC) 

GS End 

(UTC) 

Departure

Facilities 

Included 

GS 

Message

Sent (UTC)

Advisory

Date 

UTC 

ADVZY 

# GSX (UTC) 

GSX 

Message

Sent (UTC)

2011-07-06 4 2011-07-06 

02:44 

2011-07-06 

04:00 

ZAB ZLA 2011-07-06 

02:57 

2011-07-06 5 2011-07-06 

03:47 

2011-07-06 

03:52 

2011-08-19 17* 2011-08-19 

00:47 

2011-08-19 

02:00 

ZAB ZLA 2011-08-19 

01:05 

Ground Stop advisory # 17 was extended by 

the subsequent advisory # 30 

2011-08-19 30* 2011-08-19 

00:47 

2011-08-19 

03:00 

ZAB ZLA 

ZDV 

2011-08-19 

01:45 

2011-08-19 31 2011-08-19 

01:50 

2011-08-19 

01:52 

2012-05-09 74 2012-05-09 

23:37 

2012-05-10 

00:45 

ZAB ZLA 2012-05-09 

23:38 

2012-05-10 2 2012-05-10 

00:29 

2012-05-10 

00:31 

2013-08-27 4 2013-08-27 

01:39 

2013-08-27 

02:45 

ZAB ZLA 

ZOA 

2013-08-27 

01:56 

2013-08-27 5 2013-08-27 

02:22 

2013-08-27 

02:24 

Note that Ground Stop advisory # 30 on August 19, 2011, was an extension to advisory # 17. 

Even though there were two physical advisories issued, they were related, so they were 

counted as one logical Ground Stop advisory. METARs submitted around the same time as 

these advisories were issued are described in this section. These METARs contain contractions 

and corresponding descriptions as follows: 

Contraction Description 

ALQDS All Quadrants 

DS Dust Storm 

BLDU Blowing Widespread Dust 

HZ Haze 

RA Rain 

TS Thunderstorm 

VC Vicinity (5 to 10 statute miles) 

+ Heavy 

- Light 
35 

12.1 Ground Stop Advisory # 4 on July 6, 2011, UTC 

Table 27 shows the detailed observations made at the Phoenix airport relative to when the 

Ground Stop advisory began and when the Ground Stop message was sent. 

Table 27. METARs submitted around when Ground Stop advisory # 4 was issued on 

July 6, 2011, UTC at KPHX. 

METAR 

Report Date 

(UTC) 

Flight 

Rules 

Category 

Wind 

Direction

Wind

Speed

(kn) 

Wind

Gust

(kn)

Visibility

(smi) 

Ceiling

Height

AGL

(ft) 

Body 

Present 

Weather 

Group 

Remarks 

Other 

Significant 

Information 

2011-07-06 01:51 VFR WSW 7 10 8000 

Ground Stop advisory # 4 affecting departures from ZAB and ZLA began at 02:44Z.

2011-07-06 02:51 Marginal VFR S 17 21 3 8000 HZ DS VC NE-SW

2011-07-06 02:53 Low IFR S 17 24 0.75 8000 BLDU DS VC NE-SW

2011-07-06 02:55 Low IFR S 27 38 0.25 200 +DS DS ALQDS 

Ground Stop advisory # 4 message was sent from ATCSCC at 02:57Z.

2011-07-06 03:05 Low IFR SSW 19 46 0.125 300 -RA +DS DS ALQDS 

2011-07-06 03:12 Low IFR S 16 33 0.125 100 -RA +DS DS ALQDS 

2011-07-06 03:16 Low IFR S 17 27 0.25 200 -RA +DS DS ALQDS 

Note that at 02:51Z and 0253Z, dust storms at vicinity were already observed and were reported 

in the Remarks section. 

12.2 Ground Stop Advisory # 17 on August 19, 2011, UTC 

Table 28 shows the detailed observations made at the Phoenix airport relative to when the 

Ground Stop advisory began and when the Ground Stop message was sent. 

Table 28. METARs submitted around when Ground Stop advisory # 17 was issued on 

August 19, 2011, UTC at KPHX. 

METAR 

Report Date 

(UTC) 

Flight 

Rules 

Category 

Wind 

Direction

Wind

Speed

(kn) 

Wind

Gust

(kn)

Visibility

(smi) 

Ceiling 

Height 

AGL 

(ft) 

Body 

Present 

Weather 

Group 

Remarks

Other 

Significant

Information

2011-08-18 23:51 VFR W 8 16 10 9000 

Ground Stop advisory # 17 affecting departures from ZAB and ZLA began at 00:47Z. 

2011-08-19 00:51 VFR W 7 10 9000 DS VC E-S

2011-08-19 01:00 IFR SSE 19 29 1.25 9000 BLDU DS VC E-S

2011-08-19 01:04 Low IFR SSE 21 30 0.5 600 BLDU DS VC E-S

Ground Stop advisory # 17 message was sent from ATCSCC at 01:05Z. 

2011-08-19 01:12 Low IFR S 20 28 0.5 600 DS 

2011-08-19 01:35 IFR SE 24 34 1 1000 BLDU 

2011-08-19 01:40 IFR SE 18 33 2 1000 BLDU 

2011-08-19 01:48 IFR SE 22 33 2 2000 BLDU 

2011-08-19 01:51 Marginal VFR SE 19 33 4 2000 BLDU 
36

12.3 Ground Stop Advisory # 74 on May 9, 2012, UTC 

Table 29 shows the detailed observations made at the Phoenix airport relative to when the 

Ground Stop advisory began and when the Ground Stop message was sent. 

Table 29. METARs submitted around when Ground Stop advisory # 74 was issued on 

May 9, 2012, UTC at KPHX. 

METAR 

Report Date 

(UTC) 

Flight 

Rules 

Category 

Wind 

Direction

Wind

Speed

(kn) 

Wind

Gust

(kn)

Visibility

(smi) 

Ceiling

Height

AGL

(ft) 

Body 

Present 

Weather 

Group 

Remarks

Other 

Significant

Information

2012-05-09 22:51 VFR S 14 17 10 8000 

2012-05-09 23:33 IFR E 35 41 1.75 8000 BLDU 

Ground Stop advisory # 74 affecting departures from ZAB and ZLA began at 23:37Z.

Ground Stop advisory # 74 message was sent from ATCSCC at 23:38Z.

2012-05-09 23:41 Low IFR ENE 33 47 0.5 8000 TS DS 

2012-05-09 23:46 IFR ENE 27 40 1.75 800 -TSRA BLDU 

2012-05-09 23:51 IFR ENE 29 38 5 800 -TSRA BLDU 

2012-05-10 00:33 VFR N 4 6 7000 +TSRA 

2012-05-10 00:51 Marginal VFR SSE 22 32 5 8000 -TSRA 

12.4 Ground Stop Advisory # 4 on August 27, 2013, UTC 

Table 30 shows the detailed observations made at the Phoenix airport relative to when the 

Ground Stop advisory began and when the Ground Stop message was sent. 

Table 30. METARs submitted around when Ground Stop advisory # 4 was issued on 

August 27, 2013, UTC at KPHX. 

METAR 

Report Date 

(UTC) 

Flight 

Rules 

Category 

Wind 

Direction

Wind

Speed

(kn) 

Wind

Gust

(kn)

Visibility

(smi) 

Ceiling

Height

AGL

(ft) 

Body 

Present 

Weather 

Group 

Remarks 

Obscuration

Group 

2013-08-27 00:51 VFR N 0 10 8000 

2013-08-27 01:22 IFR N 0 7 900 BLDU FEW009

2013-08-27 01:34 IFR SSE 29 44 2 900 BLDU BLDU SCT009

2013-08-27 01:37 IFR S 23 44 1.25 900 BLDU BLDU SCT009

2013-08-27 01:38 IFR S 25 44 1.25 900 BLDU BLDU BKN009

Ground Stop advisory # 4 affecting departures from ZAB and ZLA and ZOA began at 01:39Z.

2013-08-27 01:40 Low IFR S 28 44 .75 900 BLDU BLDU BKN009

2013-08-27 01:42 Low IFR S 21 44 .5 900 BLDU BLDU BKN009

2013-08-27 01:48 Low IFR S 28 41 .5 900 -TSRA BLDU BLDU BKN009

2013-08-27 01:51 Low IFR S 40 48 .5 900 -TSRA BLDU BLDU BKN009

2013-08-27 01:56 Low IFR SSW 20 48 .25 900 TSRA DS DU BKN009 

Ground Stop advisory # 4 message was sent from ATCSCC at 01:56Z.
37 

Table 30. Continued. 

METAR 

Report Date 

(UTC) 

Flight 

Rules 

Category 

Wind 

Direction

Wind

Speed

(kn) 

Wind

Gust

(kn)

Visibility

(smi) 

Ceiling

Height

AGL

(ft) 

Body 

Present 

Weather 

Group 

Remarks 

Obscuration 

Group 

2013-08-27 01:58 IFR S 16 48 1.5 900 TSRA BLDU DU BKN009 

2013-08-27 02:01 IFR SSE 16 48 2 2000 TSRA BLDU 

2013-08-27 02:10 Marginal VFR WSW 4 5 2000 +TSRA 

2013-08-27 02:16 Marginal VFR W 4 5 3200 -TSRA 

2013-08-27 00:51 VFR N 0 10 8000 

2013-08-27 01:22 IFR N 0 7 900 - BLDU FEW009 

Note that for Ground Stop advisories # 4 on July 6, 2011, UTC and # 17 on August 19, 2011, 

UTC, dust storms between 5 to 10 statute miles from KPHX were first described in the Remarks 

section of METARs. For Ground Stop advisory # 4 on August 27, 2013, UTC, blowing 

widespread dust was first described in the Remarks section of METARs. 

12.5 Significance of Blowing Widespread Dust Referenced in the 

Remarks Section 

From these four sets of METARs, one can notice that a dust storm at the airport may be 

preceded by a dust storm between 5 to 10 statute miles from KPHX, blowing widespread dust 

(BLDU), and/or a wind speed of 20 or more knots. There are other observations such as 

temperature and humidity in the reports that are not listed in the preceding tables. To develop a 

predictive model of whether a Ground Stop advisory (or Ground Delay Program) will be issued, 

all candidate input parameters should be fed into the model. If the model is reliable, it can prune 

the parameters and identify the influential ones. The input parameters in this case should 

include information from the METARs, Terminal Area Forecast (TAF) reports, and air traffic 

operational data. The construction of this predictive model is a separate research project and it 

is not covered in this document. But if the predictive model should ever be constructed, 

information from the METARs should obviously include BLDU. 

There are three possible groups in which BLDU can be reported in a METAR, and BLDU may 

be reported in multiple groups within a METAR: 

• Present Weather group in the Body section, e.g., "BLDU". 

• Obscuration group in the Remarks section, an obscuration code followed by a sky cover 

amount, e.g., "BLDU FEW023". 

• Other Significant Information group in the Remarks section, an obscuration code not 

followed by a sky cover amount, e.g., "BLDU ALQDS". 

METARs that had BLDU reported between October 2009 and January 2014 at the Phoenix 

airport were analyzed. Figure 9 describes, via a Venn diagram, the number of METARs 

categorized by the three groups that had BLDU reported. There are 294 reports referencing 

BLDU in total. Among them, 174 reports (59 percent) have BLDU referenced in the Body 

section only and in both Body and Remarks sections; 120 reports (41percent) have BLDU 

referenced in the Remarks section only. Figure 10 shows these two sets of reports broken down 

by years. The annual percentage of reports that have BLDU referenced in the Remarks section 

only ranges from 29 percent in 2012 to 58 percent in 2013. This shows that reporting BLDU in 

the Remarks section only is not an isolated case in some distant past. 
38

These two figures show that the Remarks section of a METAR is a significant source of weather 

conditions. In addition to BLDU, there are other qualitative and quantitative observations that 

can be extracted from the Remarks section. In conclusion, ignoring any of these observations 

located in the Remarks section can result in an incomplete or inaccurate model. 

Figure 9. Number of METARs that reported blowing widespread dust. 

Figure 10. Number of METARs that reported blowing widespread dust by year. 

9 6

65 71

7 23

52 29

32

0

20

40

60

80

100

120

140

2009 2010 2011 2012 2013

Number of METARs

Year

Body Section Remarks Section Only Section in which 

BLDU was reported

Remarks Section: 

Obscuration 

Remarks Section: 

Other Significant 

Information

Body Section:

Present 

Weather

15

104 108 

48 

18

1

0 120 reports (41%) that have 

BLDU referenced in the 

Remarks section only

174 reports (59%) that have 

BLDU referenced in the 

Body section
39 

13 Further Potential Works 

The completely decoded METARs in the ATM NextGen Data Warehouse are valuable to ATM 

research. Weather conditions that are described in the Body as well as the Remarks sections 

are now accessible to researchers. The study of adverse weather conditions at airports, weather 

forecasts, air traffic operation data, and the probability of subsequent Air Traffic Management 

Initiatives being issued by ATCSCC is a potential project. Results from the study may help to 

prove the significance of adverse weather conditions found only in the Remarks section. 

Because many of the deviations from the standard coding formats are likely to be caused by a 

human observer, a software tool should be developed to assist the observer before a METAR is 

disseminated. Mistakes such as a missing blank space character in a fraction could have been 

avoided if such a tool exists. As a minimum, the tool should validate a METAR so that any 

deviations are immediately identified to the observer prior to dissemination of the METAR. 

14 Conclusions 

Both the Body and Remarks sections of a METAR contain important surface weather 

observations at an airport. Some observations such as lightning are only available in the 

Remarks section of a report. Due to manual editing, an observer may enter some important 

observations in the Remarks section instead of the Body section of a METAR. Any analysis 

involving surface weather observations from the METARs should not rely solely on the 

information from the Body section of the reports; ignoring information from the Remarks section 

may lead to incomplete or inaccurate results. 

This document identifies major deviations from the group coding formats found in 12 million 

METARs. The algorithm for decoding 11 groups from the Body section and 58 groups from the 

Remarks section accounts for these deviations. The algorithm uses regular expressions to 

perform text pattern matching to identify all the groups in a METAR. 

Because there is no unique character separating groups in a METAR, the algorithm for 

decoding METARs is by no means perfect. Because no semantic analysis is used in the 

algorithm, when decoding groups that can contain plain text, in special circumstances, the 

algorithm can treat some unknown coded text as plain text of an identified group instead. Only a 

sophisticated semantic analysis of plain text can decipher and determine which part of the plain 

text describes an observation (e.g., detailed description, location, and moving direction of a 

weather phenomenon). 

When the implemented software was used to decode 12 million METARs, a sustained rate of 

about 10,000 reports per second was achieved. Thus, any real-time system can also use this 

algorithm to decode a METAR and to extract the specific information it needs. Daily METARs 

are decoded and stored in the ATM NextGen Data Warehouse database at NASA Ames. A 

web-based report system allows users of the Data Warehouse to search, report, and analyze all 

METAR data from October 2009 to present. This enables users to perform fast ad-hoc data 

queries and to perform data mining over large amounts of data directly in the database. 
40

References 

[1] NOAA Federal Meteorological Handbook No. 1 (FCM-H1-2005), Sept. 2005. 

Retrieved from http://www.ofcm.gov/fmh-1/fmh1.htm 

[2] T. Pollard: Python METAR parser. Retrieved from http://python-metar.sourceforge.net/ 

[3] NOAA National Weather Service, Aviation Weather Center, METAR Field Description. 

Retrieved from 

http://www.aviationweather.gov/adds/dataserver/metars/MetarFieldDescription.php 

[4] FAA Operations Network (OPSNET) Airport Operations. 

Retrieved from https://aspm.faa.gov/opsnet/sys/Airport.asp 

[5] FAA OEP 35 Airports. Retrieved from http://aspmhelp.faa.gov/index.php/OEP_35 

[6] FAA ASPM 77 Airports. Retrieved from http://aspmhelp.faa.gov/index.php/ASPM_Airports

[7] FAA Advisory Circulars, AC 00-45G, Change 1, Aviation Weather Services. July 29, 2010. 

Retrieved from https://www.faa.gov/regulations_policies/advisory_circulars/index.cfm/go/ 

document.information/documentID/215166 

[8] FAA Aviation Weather Center (AWC) Contractions. 2002. 

Retrieved from http://aviationweather.gov/static/docs/awc-contractions-contsort.pdf 

[9] NOAA Supplementary Climatological Data (SCD), Depth of New Snow. 

Retrieved from http://www.ncdc.noaa.gov/gw/scddoc.html#dsnow 

[10] NOAA Surface Observations Program, Automated Surface Observing System (ASOS) 

Release Notes, Software Version 3.10. May 7, 2013. 

Retrieved from http://www.nws.noaa.gov/ops2/Surface/asosimplementation.htm 

[11] A. Watt: Beginning Regular Expressions. John Wiley & Sons, Inc., 2005. 

[12] M. Eshow, M. Lui, and S. Ranjan: Architecture and Capabilities of a Data Warehouse for 

ATM Research. 33rd Digital Avionics Systems Conference, Colorado Springs, CO, 

Oct. 5–9, 2014. 

[13] R. Kimball and M. Ross: The Data Warehouse Toolkit: The Complete Guide to 

Dimensional Modeling. 2nd ed., John Wiley & Sons, Inc., April 2002. 
41 

Appendix A: Groups in METAR 

Observations and other information in a METAR are categorized in groups. The following list is 

a combination of groups documented in FMH1; groups that are not documented in FHMH1 are 

marked in bold. 

Groups in the Body section: 

1. Type of Report 

2. Station Identifier 

3. Date and Time of Report 

4. Report Modifier 

5. Wind 

6. Visibility 

7. Runway Visual Range 

8. Present Weather 

9. Sky Condition 

10. Temperature and Dew Point 

11. Altimeter 

Groups in the Remarks section "Automated, Manual, and Plain Language" category: 

1. Volcanic Eruptions 

2. Funnel Cloud 

3. Type of Automated Station 

4. Peak Wind 

5. Wind Shift 

6. Tower or Surface Visibility 

7. Variable Prevailing Visibility 

8. Sector Visibility 

9. Visibility at Second Location 

10. Lightning 

11. Beginning and Ending of Precipitation 

12. Beginning and Ending of Thunderstorms 

13. Thunderstorm Location 

14. Hailstone Size 

15. Virga 

16. Variable Ceiling Height 

17. Obscuration 

18. Variable Sky Condition 

19. Significant Cloud Type: Cumulonimbus 

20. Significant Cloud Type: Cumulonimbus Mammatus 

21. Significant Cloud Type: Towering Cumulus 

22. Significant Cloud Type: Altocumulus Castellanus 

23. Significant Cloud Type: Stratocumulus 

24. Significant Cloud Type: Altocumulus 

25. Significant Cloud Type: Cirrocumulus 

26. Significant Cloud Type: Rotor Cloud 

27. Significant Cloud Type: Cumulus 

 
42

28. Ceiling Height at Second Location 

29. Pressure Rising or Falling Rapidly 

30. Sea Level Pressure 

31. Aircraft Mishap 

32. No SPECI Reports Taken 

33. Snow Increasing Rapidly 

34. Other Significant Information 

35. Low-Level Wind Shear 

36. Pilot Report 

Groups in the Remarks section "Additive and Automated Maintenance Data" category: 

1. Hourly Precipitation Amount 

2. 3- and 6-Hour Precipitation Amount 

3. 24-Hour Precipitation Amount 

4. Snow Depth on Ground 

5. Water Equivalent of Snow on Ground 

6. Depth of New Snow 

7. Cloud Types 

8. Duration of Sunshine 

9. Hourly Temperature and Dew Point 

10. 6-Hourly Maximum Temperature 

11. 6-Hourly Minimum Temperature 

12. 24-Hour Maximum and Minimum Temperature 

13. 3-Hourly Pressure Tendency 

14. Hourly, 3- and 6-Hourly Ice Accretion 

15. Sensor Status Indicator: Runway Visual Range Not Reporting 

16. Sensor Status Indicator: Present Weather Sensor Not Operating 

17. Sensor Status Indicator: Tipping Bucket Rain Gauge Sensor Not Operating 

18. Sensor Status Indicator: Freezing Rain Sensor Not Operating 

19. Sensor Status Indicator: Lightning Detection System Sensor Not Operating 

20. Sensor Status Indicator: Second Visibility Sensor Not Operating 

21. Sensor Status Indicator: Second Ceiling Height Sensor Not Operating 

22. Automated System Maintenance Needed Indicator 
43 

Appendix B: Database Schema Storing Decoded METARs 

In the ATM NextGen Data Warehouse, decoded METARs are stored in the table 

ODS_METAR_REPORTS. Primary key: DATE_TIME_UTC and STATION_ID. Here is the 

column structure of that table: 

Column Name Data Type Nullable? Description 

REPORT_DATE_TIME_UTC DATE N FMH1 12.6.3: Date and time in UTC when the 

METAR was reported. 

STATION_ID CHAR (4) N FMH1 12.6.2: Station ID where the METAR 

observation was made. For example, the ICAO 

Airport ID, "KJFK". 

REPORT_RAW_TEXT VARCHAR 

(2000) 

N METAR raw text. 

REPORT_DATE_TIME_LTZ DATE N FMH1 12.6.3: Date and time in Local Time Zone 

when the METAR was reported at the station. For 

example, "2010-09-15 22:00Z" at KJFK is "2010-

09-15 17:00" at US/Eastern time zone. 

REPORT_TYPE VARCHAR 

(30) 

Y FMH1 12.6.1: METAR type. Either a) METAR: 

aviation routine weather report format or b) 

SPECI: aviation selected special weather report 

format. It is not provided in NOAA's raw 

METAR.txt. 

REPORT_MODIFIER VARCHAR 

(30) 

Y FMH1 12.6.4: Report modifier, AUTO, identifies 

the METAR/SPECI as a fully automated report 

with no human intervention or oversight. In the 

event of a corrected METAR or SPECI, the report 

modifier, COR, shall be substituted in place of 

AUTO. 

WIND_DRCTN_IS_VRB CHAR (1) Y FMH1 12.6.5.b: Wind direction is variable and 

speed is 6 knots or less. For example, if the wind 

is variable at 3 knots, it would be coded 

"VRB03KT".

WIND_DRCTN NUMBER Y FMH1 12.6.5: Wind direction in degrees. For 

example, a wind direction of 90° at 8 knots shall 

be coded "09008KT"; a wind speed of 112 knots 

shall be coded "090112KT". 

WIND_SPEED_KT NUMBER Y FMH1 12.6.5: Wind speed in knots. For example, 

a wind direction of 90° at 8 knots shall be coded 

"09008KT"; a wind speed of 112 knots shall be 

coded "090112KT". 

WIND_GUST_KT NUMBER Y FMH1 12.6.5.a: Wind gust in knots. For example, 

a wind from due west at 20 knots with gusts to 35 

knots would be coded "27020G35KT". 
44

Column Name Data Type Nullable? Description 

VRB_WIND_DRCTN_MIN NUMBER Y FMH1 12.6.5.c: The lower range of variable wind 

direction in degrees when speed is greater than 6 

knots. For example, if the wind is variable from 

180° to 240° at 10 knots, it would be coded 

"21010KT 180V240". 

VRB_WIND_DRCTN_MAX NUMBER Y FMH1 12.6.5.c: The upper range of variable wind 

direction in degrees when speed is greater than 6 

knots. For example, if the wind is variable from 

180° to 240° at 10 knots, it would be coded 

"21010KT 180V240". 

VISIBILITY_SM NUMBER Y FMH1 12.6.6: Visibility in statute miles. For 

example, a visibility of 1-1/2 statute miles would 

be coded "1 1/2SM"; "M1/4SM" means a visibility 

of less than 1/4 statute mile.

RWY_VISUAL_RANGE_GRP

_RAW_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.6.7: Runway visual range group in raw 

text. The standards for observing and reporting 

Runway Visual Range (RVR) are described in 

FMH1 Chapter 7. For example, an RVR value for 

runway 01L of 800 feet would be coded 

"R01L/0800FT". 

PRESENT_WX_GRP_RAW_T

EXT 

VARCHAR 

(2000) 

Y FMH1 12.6.8: Present weather group in raw text. 

The standards for observing and reporting present 

weather are described in FMH1 Chapter 8. For 

example, heavy rain shower(s) is coded as 

+SHRA. 

PRESENT_WX_DESC_HAS_

SH 

CHAR (1) Y FMH1 12.6.8: Present weather group descriptor 

has shower(s). 

PRESENT_WX_DESC_HAS_

TS 

CHAR (1) Y FMH1 12.6.8: Present weather group descriptor 

has thunderstorm. 

PRESENT_WX_DESC_HAS_

FZ 

CHAR (1) Y FMH1 12.6.8: Present weather group descriptor 

has freezing precipitation (drizzle or rain) or 

obscuration (fog). 

PRESENT_WX_PCPN_HAS_

DZ 

CHAR (1) Y FMH1 12.6.8: Present weather group precipitation 

has drizzle. 

PRESENT_WX_PCPN_HAS_

RA 

CHAR (1) Y FMH1 12.6.8: Present weather group precipitation 

has rain. 

PRESENT_WX_PCPN_HAS_

SN 

CHAR (1) Y FMH1 12.6.8: Present weather group precipitation 

has snow. 

PRESENT_WX_PCPN_HAS_

SG 

CHAR (1) Y FMH1 12.6.8: Present weather group precipitation 

has snow grains. 

PRESENT_WX_PCPN_HAS_I

C 

CHAR (1) Y FMH1 12.6.8: Present weather group precipitation 

has ice crystals. 

PRESENT_WX_PCPN_HAS_

PL 

CHAR (1) Y FMH1 12.6.8: Present weather group precipitation 

has ice pellets. 

PRESENT_WX_PCPN_HAS_

GR 

CHAR (1) Y FMH1 12.6.8: Present weather group precipitation 

has hail. 
45 

Column Name Data Type Nullable? Description 

PRESENT_WX_PCPN_HAS_

GS 

CHAR (1) Y FMH1 12.6.8: Present weather group precipitation 

has small hail and/or snow pellets. 

PRESENT_WX_PCPN_HAS_

UP 

CHAR (1) Y FMH1 12.6.8: Present weather group precipitation 

has unknown precipitation. 

PRESENT_WX_OBSC_HAS_

BR 

CHAR (1) Y FMH1 12.6.8: Present weather group obscuration 

has mist. 

PRESENT_WX_OBSC_HAS_

FG 

CHAR (1) Y FMH1 12.6.8: Present weather group obscuration 

has fog. 

PRESENT_WX_OBSC_HAS_

FU 

CHAR (1) Y FMH1 12.6.8: Present weather group obscuration 

has smoke. 

PRESENT_WX_OBSC_HAS_

VA 

CHAR (1) Y FMH1 12.6.8: Present weather group obscuration 

has volcanic ash. 

PRESENT_WX_OBSC_HAS_

DU 

CHAR (1) Y FMH1 12.6.8: Present weather group obscuration 

has widespread dust. 

PRESENT_WX_OBSC_HAS_

SA 

CHAR (1) Y FMH1 12.6.8: Present weather group obscuration 

has sand. 

PRESENT_WX_OBSC_HAS_

HZ 

CHAR (1) Y FMH1 12.6.8: Present weather group obscuration 

has haze. 

PRESENT_WX_OBSC_HAS_

PY 

CHAR (1) Y FMH1 12.6.8: Present weather group obscuration 

has spray. 

PRESENT_WX_OTR_HAS_P

O 

CHAR (1) Y FMH1 12.6.8: Present weather group other has 

well-developed dust/sand whirls. 

PRESENT_WX_OTR_HAS_S

Q 

CHAR (1) Y FMH1 12.6.8: Present weather group other has 

squalls. 

PRESENT_WX_OTR_HAS_F

C 

CHAR (1) Y FMH1 12.6.8: Present weather group other has 

funnel cloud. 

PRESENT_WX_OTR_HAS_T

W 

CHAR (1) Y FMH1 12.6.8: Present weather group other has 

tornado or waterspout. 

PRESENT_WX_OTR_HAS_S

S 

CHAR (1) Y FMH1 12.6.8: Present weather group other has 

sandstorm. 

PRESENT_WX_OTR_HAS_D

S 

CHAR (1) Y FMH1 12.6.8: Present weather group other has 

dust storm. 

SKY_CONDITION_GRP_RA

W_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.6.9: Sky condition group in raw text. For 

example, a scattered layer of towering cumulus at 

1,500 feet would be coded "SCT015TCU" and 

would be followed by a space if there were 

additional higher layers to code. 

SKY_CONDITION_GRP_HAS

_CB 

CHAR (1) Y FMH1 12.6.9: Sky condition group has 

cumulonimbus (CB) reference(s). 

SKY_CONDITION_GRP_HAS

_TCU 

CHAR (1) Y FMH1 12.6.9: Sky condition group has towering 

cumulus (TCU) reference(s). 

SKY_LOWEST_LAYER_ALT_

FT 

NUMBER Y FMH1 12.6.9: The lowest layer altitude in feet 

within the sky condition group. For example, the 

ceiling is 1,200 feet if the reported sky condition is 

"BKN012 BKN018 OVC024". 
46

Column Name Data Type Nullable? Description 

TEMPERATURE_C NUMBER Y FMH1 12.6.10: Temperature in °C. 

DEW_POINT_C NUMBER Y FMH1 12.6.10: Dew point in °C. 

ALTIMETER_HG NUMBER Y FMH1 12.6.10: Altimeter in inches of mercury. 

UNKNOWN_TOKENS_RAW_

TEXT 

VARCHAR 

(2000) 

Y Any undecodable text from the Body section of the 

METAR. 

RMK_VOLCANIC_ERPTNS_

RAW_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.a (remarks section): Volcanic 

eruptions in raw text. For example, "VA MOV 

NW", "VOLCANO 70 MILES SW ERUPTED 

231505 LARGE ASH CLOUD EXTENDING TO 

APRX 30000 FEET MOVING NE". 

RMK_HAS_VOLCANIC_ERP

TNS 

CHAR (1) Y FMH1 12.7.1.a (remarks section): Remarks has 

volcanic eruptions raw text. 

RMK_FUNNEL_CLD_RAW_T

EXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.b (remarks section): Funnel cloud in 

raw text. For example, "TORNADO B13 6 NE" 

would indicate that a tornado, which began at 13 

minutes past the hour, was 6 statute miles 

northeast of the station.

RMK_TYPE_OF_AUTOMATE

D_STATION 

VARCHAR 

(30) 

Y FMH1 12.7.1.c (remarks section): Type of 

automated station. Only the first code is decoded. 

For example, automated stations without a 

precipitation discriminator shall be identified as 

AO1; automated station with one shall be 

identified as AO2. 

RMK_PK_WND_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.d (remarks section): Remarks has 

peak wind raw text. For example, a peak wind of 

45 knots from 280 degrees that occurred at 15 

minutes past the hour would be coded "PK WND 

28045/15". 

RMK_PK_WND_DRCTN NUMBER Y FMH1 12.7.1.d (remarks section): Peak wind 

direction in degrees. 

RMK_PK_WND_SPEED_KT NUMBER Y FMH1 12.7.1.d (remarks section): Peak wind 

speed in knots. 

RMK_PK_WND_DATE_TIME

_UTC 

DATE Y FMH1 12.7.1.d (remarks section): Peak wind date 

and time in UTC. 

RMK_WSHFT_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.e (remarks section): Wind shift raw 

text. For example, a remark reporting a wind shift 

accompanied by a frontal passage that began at 

30 minutes after the hour would be coded as 

"WSHFT 30 FROPA". 

RMK_WSHFT_DATE_TIME_

UTC 

DATE Y FMH1 12.7.1.e (remarks section): Wind shift date 

and time in UTC. 

RMK_HAS_WSHFT CHAR (1) Y FMH1 12.7.1.e (remarks section): Remarks has 

wind shift references. 

RMK_WSHFT_HAS_FROPA CHAR (1) Y FMH1 12.7.1.e (remarks section): Has frontal 

passage reference(s) that are usually associated 

with wind shift. 
47 

Column Name Data Type Nullable? Description 

RMK_TWR_VIS_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.f (remarks section): Tower visibility 

raw text. For example, the control tower visibility 

of 1-1/2 statute miles would be coded "TWR VIS 1 

1/2". 

RMK_TWR_VIS_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.f (remarks section): Tower visibility 

in statute miles (in most cases). The distance may 

contain fractions and other text. For example, "2", 

"2 1/2", "GTR THAN FOUR", etc. 

RMK_SFC_VIS_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.f (remarks section): Surface visibility 

raw text. 

RMK_SFC_VIS_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.f (remarks section): Surface visibility 

expressed in statute miles (in most cases). The 

distance may contain fractions and other text. 

RMK_VRB_PRVL_VIS_RAW_

TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.g (remarks section): Variable 

prevailing visibility raw text. For example, a 

visibility that was varying between 1/2 and 2 

statute miles would be coded "VIS 1/2V2". 

RMK_VRB_PRVL_VIS_LOWE

ST_SM 

NUMBER Y FMH1 12.7.1.g (remarks section): Lowest 

prevailing visibility in statute miles. 

RMK_VRB_PRVL_VIS_HIGH

EST_SM 

NUMBER Y FMH1 12.7.1.g (remarks section): Highest 

prevailing visibility in statute miles. 

RMK_SCTR_VIS_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.h (remarks section): Sector visibility 

raw text. For example, a visibility of 2-1/2 statute 

miles in the northeastern octant would be coded 

"VIS NE 2 1/2". 

RMK_SCTR_VIS_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.h (remarks section): Sector visibility 

direction and distance in statute miles (in most 

cases). For example, "W 2", "LWR W", "LWR SE 

MTNS PRTLY OBSCD ALQDS", etc. 

RMK_VIS_SCND_LCTN_RA

W_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.i (remarks section): Visibility at 

second location raw text. For example, a visibility 

of 2-1/2 statute miles measured by a second 

sensor located at runway 11 would be coded "VIS 

2 1/2 RWY11". 

RMK_VIS_SCND_LCTN_SM NUMBER Y FMH1 12.7.1.i (remarks section): Visibility at 

second location in statute miles. 

RMK_VIS_SCND_LCTN_LOC VARCHAR 

(2000) 

Y FMH1 12.7.1.i (remarks section): Location of the 

observed visibility at second location. 

RMK_LTG_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.j (remarks section): Lightning raw 

text. For example, "OCNL LTGICCG OHD", “FRQ 

LTG VC", or "LTG DSNT W". 

RMK_HAS_LTG CHAR (1) Y FMH1 12.7.1.j (remarks section): Remarks has 

lightning references. 

RMK_LTG_FREQUENCY VARCHAR 

(30) 

Y FMH1 12.7.1.j (remarks section): Lightning 

frequency. 
48

Column Name Data Type Nullable? Description 

RMK_LTG_TYPE VARCHAR 

(30) 

Y FMH1 12.7.1.j (remarks section): Lightning type. 

RMK_LTG_LOC VARCHAR 

(2000) 

Y FMH1 12.7.1.j (remarks section): Lightning 

location. 

RMK_BE_PCPN_OR_TS_RA

W_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.k (remarks section): Beginning and 

ending of precipitation or thunderstorms raw text. 

For example, if rain began at 0005, ended at 

0030, and snow began at 0020, and ended at 

0055, the remarks would be coded 

"RAB05E30SNB20E55". 

RMK_BGN_TS_DATE_TIME_

UTC 

DATE Y FMH1 12.7.1.l (remarks section): Beginning of 

thunderstorm date and time in UTC. 

RMK_END_TS_DATE_TIME_

UTC 

DATE Y FMH1 12.7.1.l (remarks section): Ending of 

thunderstorm date and time in UTC. 

RMK_TS_LCTN_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.m (remarks section): Thunderstorm 

location raw text. For example, a thunderstorm 

southeast of the station and moving toward the 

northeast would be coded "TS SE MOV NE". 

RMK_TS_LCTN_LOC VARCHAR 

(2000) 

Y FMH1 12.7.1.m (remarks section): Location of 

thunderstorm. 

RMK_TS_LCTN_MVNG_DRC

TN 

VARCHAR 

(2000) 

Y FMH1 12.7.1.m (remarks section): Thunderstorm 

moving direction. 

RMK_GR_SIZE_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.n (remarks section): Hailstone size 

in raw text. For example, "GR 1 3/4" would 

indicate that the largest hailstones were 1-3/4 

inches in diameter. 

RMK_GR_SIZE_IN NUMBER Y FMH1 12.7.1.n (remarks section): Hailstone size 

in inches. 

RMK_VIRGA_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.o (remarks section): Virga raw text. 

For example, "VIRGA SW". 

RMK_HAS_VIRGA CHAR (1) Y FMH1 12.7.1.o (remarks section): Remarks has 

virga references. 

RMK_VIRGA_DRCTN VARCHAR 

(2000) 

Y FMH1 12.7.1.o (remarks section): Virga direction 

from the station. 

RMK_VRB_CIG_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.p (remarks section): Variable ceiling 

height raw text. For example, "CIG 005V010" 

would indicate a ceiling that was varying between 

500 and 1,000 feet. 

RMK_VRB_CIG_LOWEST_F

T 

NUMBER Y FMH1 12.7.1.p (remarks section): Lowest ceiling 

height in feet. 

RMK_VRB_CIG_HIGHEST_F

T 

NUMBER Y FMH1 12.7.1.p (remarks section): Highest ceiling 

height in feet. 
49 

Column Name Data Type Nullable? Description 

RMK_OBSC_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.q (remarks section): Obscurations 

raw text. For example, fog hiding 3-4 oktas of the 

sky would be coded "FG SCT000"; a broken layer 

at 2,000 feet composed of smoke would be coded 

“FU BKN020". 

RMK_OBSC_CAUSING_WX VARCHAR 

(30) 

Y FMH1 12.7.1.q (remarks section): Obscuration 

causing weather. 

RMK_OBSC_SKY_COVER VARCHAR 

(30) 

Y FMH1 12.7.1.q (remarks section): Obscuration sky 

cover. 

RMK_OBSC_HGT_FT NUMBER Y FMH1 12.7.1.q (remarks section): Obscuration 

height in feet. 

RMK_VRB_SKY_COND_RA

W_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.r (remarks section): Variable sky 

condition raw text. For example, a cloud layer at 

1,400 feet that is varying between broken and 

overcast would be coded "BKN014 V OVC". 

RMK_VRB_SKY_COND1 VARCHAR 

(30) 

Y FMH1 12.7.1.r (remarks section): First of two 

operationally significant sky conditions. 

RMK_VRB_SKY_COND1_LY

R_HGT_FT 

NUMBER Y FMH1 12.7.1.r (remarks section): First sky 

condition layer height in feet. 

RMK_VRB_SKY_COND2 VARCHAR 

(30) 

Y FMH1 12.7.1.r (remarks section): The second 

condition of two operationally significant sky 

conditions. 

RMK_SGFNT_CLD_CB_RAW

_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Significant 

cloud type cumulonimbus raw text. 

RMK_SGFNT_CLD_HAS_CB CHAR (1) Y FMH1 12.7.1.s (remarks section): Remarks has 

cumulonimbus cloud. 

RMK_SGFNT_CLD_CB_LOC VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Location of 

cumulonimbus cloud. 

RMK_SGFNT_CLD_CB_MVN

G_DRCTN 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Moving 

direction of cumulonimbus cloud. 

RMK_SGFNT_CLD_CBMAM_

RAW_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Significant 

cloud type cumulonimbus mammatus raw text. 

RMK_SGFNT_CLD_HAS_CB

MAM 

CHAR (1) Y FMH1 12.7.1.s (remarks section): Remarks has 

cumulonimbus mammatus cloud. 

RMK_SGFNT_CLD_CBMAM_

LOC 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Location of 

cumulonimbus mammatus cloud. 

RMK_SGFNT_CLD_CBMAM_

MVNG_DRCTN 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Moving 

direction of cumulonimbus mammatus cloud. 

RMK_SGFNT_CLD_TCU_RA

W_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Significant 

cloud type towering cumulus raw text. 

RMK_SGFNT_CLD_HAS_TC

U 

CHAR (1) Y FMH1 12.7.1.s (remarks section): Remarks has 

towering cumulus cloud. 

RMK_SGFNT_CLD_TCU_DR

CTN 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Direction of 

towering cumulus cloud. 
50

Column Name Data Type Nullable? Description 

RMK_SGFNT_CLD_ACC_RA

W_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Significant 

cloud type altocumulus castellanus raw text. 

RMK_SGFNT_CLD_HAS_AC

C 

CHAR (1) Y FMH1 12.7.1.s (remarks section): Remarks has 

altocumulus castellanus cloud. 

RMK_SGFNT_CLD_ACC_DR

CTN 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Direction of 

altocumulus castellanus cloud. 

RMK_SGFNT_CLD_SCSL_R

AW_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Significant 

cloud type stratocumulus raw text. 

RMK_SGFNT_CLD_HAS_SC

SL 

CHAR (1) Y FMH1 12.7.1.s (remarks section): Remarks has 

stratocumulus cloud. 

RMK_SGFNT_CLD_SCSL_D

RCTN 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Direction of 

stratocumulus cloud. 

RMK_SGFNT_CLD_ACSL_R

AW_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Significant 

cloud type altocumulus raw text. 

RMK_SGFNT_CLD_HAS_AC

SL 

CHAR (1) Y FMH1 12.7.1.s (remarks section): Remarks has 

altocumulus cloud. 

RMK_SGFNT_CLD_ACSL_D

RCTN 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Direction of 

altocumulus cloud. 

RMK_SGFNT_CLD_CCSL_R

AW_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Significant 

cloud type cirrocumulus raw text. 

RMK_SGFNT_CLD_HAS_CC

SL 

CHAR (1) Y FMH1 12.7.1.s (remarks section): Remarks has 

cirrocumulus cloud. 

RMK_SGFNT_CLD_CCSL_D

RCTN 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Direction of 

cirrocumulus cloud. 

RMK_SGFNT_CLD_ROTOR_

RAW_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Significant 

cloud type rotor clouds raw text. 

RMK_SGFNT_CLD_HAS_RO

TOR 

CHAR (1) Y FMH1 12.7.1.s (remarks section): Remarks has 

rotor clouds. 

RMK_SGFNT_CLD_ROTOR_

DRCTN 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Direction of 

rotor clouds. 

RMK_SGFNT_CLD_CU_RAW

_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Significant 

cloud type cumulus raw text. 

RMK_SGFNT_CLD_HAS_CU CHAR (1) Y FMH1 12.7.1.s (remarks section): Remarks has 

cumulus cloud. 

RMK_SGFNT_CLD_CU_LOC VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Location of 

cumulus cloud. 

RMK_SGFNT_CLD_CU_MVN

G_DRCTN 

VARCHAR 

(2000) 

Y FMH1 12.7.1.s (remarks section): Moving 

direction of cumulus cloud. 

RMK_CIG_SCND_LCTN_RA

W_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.t (remarks section): Ceiling height at 

second location raw text. For example, if the 

ceiling measured by a second sensor located at 

runway 11 is broken at 200 feet, the remark would 

be "CIG 002 RWY11". 
51 

Column Name Data Type Nullable? Description 

RMK_CIG_SCND_LCTN_FT NUMBER Y FMH1 12.7.1.t (remarks section): Ceiling height at 

second location in feet. 

RMK_CIG_SCND_LCTN_LO

C 

VARCHAR 

(2000) 

Y FMH1 12.7.1.t (remarks section): The second 

location of ceiling height. 

RMK_PRESRR CHAR (1) Y FMH1 12.7.1.u (remarks section): Pressure was 

rising rapidly at the time of observation. 

RMK_PRESFR CHAR (1) Y FMH1 12.7.1.u (remarks section): Pressure was 

falling rapidly at the time of observation. 

RMK_SLP_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.v (remarks section): Sea level 

pressure raw text. For example, a sea level 

pressure of 998.2 hectopascals would be coded 

as "SLP982". For a METAR, if sea level pressure 

is not available, it is coded as "SLPNO".

RMK_SLP_MB NUMBER Y FMH1 12.7.1.v (remarks section): Sea level 

pressure in millibar or hectopascals. 

RMK_ACFT_MSHP_RAW_TE

XT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.w (remarks section): Aircraft mishap 

raw text. 

RMK_HAS_ACFT_MSHP CHAR (1) Y FMH1 12.7.1.w (remarks section): Remarks has 

aircraft mishap references. 

RMK_NOSPECI_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.x (remarks section): No SPECI 

reports taken raw text. At manual stations where 

SPECIs are not taken, the remark NOSPECI shall 

be coded to indicate that no changes in weather 

conditions will be reported until the next METAR. 

RMK_NOSPECI CHAR (1) Y FMH1 12.7.1.x (remarks section): Remarks has 

no SPECI reports taken references. 

RMK_SNINCR_RAW_TEXT VARCHAR 

(2000) 

Y FMH1 12.7.1.y (remarks section): Snow was 

increasing rapidly raw text. For example, a snow 

depth increase of 2 inches in the past hour with a 

total depth on the ground of 10 inches would be 

coded "SNINCR 2/10". 

RMK_SNINCR_INHR NUMBER Y FMH1 12.7.1.y (remarks section): The snow depth 

increase in the past hour. 

RMK_SNINCR_ON_GROUND

_IN 

NUMBER Y FMH1 12.7.1.y (remarks section): The total snow 

depth in inches on the ground at the time of the 

report. 

RMK_OTHR_SGFNT_INFO_

RAW_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.1.z (remarks section): Other significant 

information raw text. Agencies may add to a report 

other information significant to their operations, 

such as information on fog dispersal operations, 

runway conditions, "FIRST" or "LAST" report from 

station, etc. It may also contain any undecodable 

text from the Remarks section of the METAR. 

RMK_HOURLY_PCPN_AMT_

IN 

NUMBER Y FMH1 12.7.2.a.3.a (remarks section): Hourly 

precipitation amount in inches. 
52

Column Name Data Type Nullable? Description 

RMK_3HOURLY_PCPN_AMT

_IN 

NUMBER Y FMH1 12.7.2.a.3.b (remarks section): The amount 

of precipitation in inches (water equivalent) 

accumulated in the past 3 hours shall be reported 

in a 3-hourly report when the observation hour is 

either 02, 03, 08, 09, 14, 15, 20, or 21. 

RMK_6HOURLY_PCPN_AMT

_IN 

NUMBER Y FMH1 12.7.2.a.3.b (remarks section): The amount 

of precipitation in inches (water equivalent) 

accumulated in the past 6 hours shall be reported 

in a 6-hourly report when the observation hour is 

either 00, 05, 06, 11, 12, 17, 18, or 23. 

RMK_24HOUR_PCPN_AMT_I

N 

NUMBER Y FMH1 12.7.2.a.3.c (remarks section): The amount 

of precipitation in inches in the past 24 hours. 

RMK_SN_DPTH_ON_GRD_I

N 

NUMBER Y FMH1 12.7.2.a.3.d (remarks section): The total 

snow depth on the ground in inches reported in 

the 0000, 0600, 1200, and 1800 UTC 

observations. 

RMK_WTR_EQVT_OF_SN_O

N_GND_IN 

NUMBER Y FMH1 12.7.2.a.3.e (remarks section): At 

designated stations, the water equivalent of snow 

on the ground in inches shall be coded each day, 

in the 1800 UTC report, if the average snow depth 

is 2 inches or more. 

RMK_DPTH_OF_NEW_SN_I

N 

NUMBER Y FMH1 12.7.2.a.3 (remarks section): Depth of new 

snow (snowfall) in inches in the last 6 hours. It 

includes all fallen snow even if some (or all) of it 

melted. This is not described in the Federal 

Meteorological Handbook. See 

http://www.ncdc.noaa.gov/gw/scddoc.html. 

RMK_PDMT_CLD_TYPES_R

AW_TEXT 

VARCHAR 

(2000) 

Y FMH1 12.7.2.b (remarks section): Predominant 

cloud types raw text. For example, a report of 

"8/6//" would indicate an overcast layer of stratus 

clouds; a report of "8/903" would indicate 

cumulonimbus type low clouds, no middle clouds, 

and dense cirrus high clouds. 

RMK_PDMT_LOW_CLD_CO

DE 

CHAR (1) Y FMH1 12.7.2.b (remarks section): Predominant 

low cloud code. See WMO International Cloud 

Atlas, Volumes I and II, or the WMO Abridged 

International Cloud Atlas or agency observing aids 

for cloud identification. 

RMK_PDMT_MED_CLD_CO

DE 

CHAR (1) Y FMH1 12.7.2.b (remarks section): Predominant 

middle cloud code. See WMO International Cloud 

Atlas, Volumes I and II, or the WMO Abridged 

International Cloud Atlas or agency observing aids 

for cloud identification. 
53 

Column Name Data Type Nullable? Description 

RMK_PDMT_HGH_CLD_CO

DE 

CHAR (1) Y FMH1 12.7.2.b (remarks section): Predominant 

high cloud code. See WMO International Cloud 

Atlas, Volumes I and II, or the WMO Abridged 

International Cloud Atlas or agency observing aids 

for cloud identification. 

RMK_DURN_OF_SUNSHINE

_MIN 

NUMBER Y FMH1 12.7.2.c (remarks section): The duration of 

sunshine in minutes that occurred the previous 

calendar day shall be coded in the 0800 UTC 

report. 

RMK_HOURLY_TEMPERATU

RE_C 

NUMBER Y FMH1 12.7.2.d (remarks section): Hourly 

temperature in °C. 

RMK_HOURLY_DEW_POINT

_C 

NUMBER Y FMH1 12.7.2.d (remarks section): Hourly dew 

point in °C. 

RMK_6HOURLY_MAX_TEMP

_C 

NUMBER Y FMH1 12.7.2.e (remarks section): 6-hourly 

maximum temperature in °C. 

RMK_6HOURLY_MIN_TEMP

_C 

NUMBER Y FMH1 12.7.2.f (remarks section): 6-hourly 

minimum temperature in °C. 

RMK_24HOUR_MAX_TEMP_

C 

NUMBER Y FMH1 12.7.2.g (remarks section): 24-hour 

maximum temperature in °C. 

RMK_24HOUR_MIN_TEMP_

C 

NUMBER Y FMH1 12.7.2.g (remarks section): 24-hour 

minimum temperature in °C. 

RMK_3HOURLY_PRES_TEN

DENCY_CODE 

CHAR (1) Y FMH1 12.7.2.h (remarks section): 3-hourly 

pressure tendency code. See Table 12-7 of FMH1 

for the list of codes. 

RMK_3HOURLY_PRES_TEN

DENCY_MB 

NUMBER Y FMH1 12.7.2.h (remarks section): 3-hourly 

pressure tendency, the amount of barometric 

change, in millibar or hectopascals. 

RMK_HOURLY_ICE_ACC_A

MT_IN 

NUMBER Y Hourly ice accretion amount in inches. This is not 

described in the Federal Meteorological Handbook 

but in Automated Surface Observing System 

(ASOS) Release Note Software Version 3.7 or 

later, 

http://www.nws.noaa.gov/ops2/Surface/document

s/release_notes_307_draft.pdf. 

RMK_3HOURLY_ICE_ACC_A

MT_IN 

NUMBER Y Ice accretion amount in inches in the past 3 hours 

shall be reported in a 3-hourly report when the 

observation hour is either 02, 03, 08, 09, 14, 15, 

20, or 21. This is not described in the Federal 

Meteorological Handbook but in Automated 

Surface Observing System (ASOS) Release Note 

Software Version 3.7 or later, 

http://www.nws.noaa.gov/ops2/Surface/document

s/release_notes_307_draft.pdf. 
54

Column Name Data Type Nullable? Description 

RMK_6HOURLY_ICE_ACC_A

MT_IN 

NUMBER Y Ice accretion amount in inches in the past 6 hours 

shall be reported in a 6-hourly report when the 

observation hour is either 00, 05, 06, 11, 12, 17, 

18, or 23. This is not described in the Federal 

Meteorological Handbook but in Automated 

Surface Observing System (ASOS) Release Note 

Software Version 3.7 or later, 

http://www.nws.noaa.gov/ops2/Surface/document

s/release_notes_307_draft.pdf. 

RMK_SENSOR_STATUS_RV

RNO 

CHAR (1) Y FMH1 12.7.2.i.1 (remarks section): Sensor status 

of runway visual range should be reported but is 

missing. 

RMK_SENSOR_STATUS_PW

INO 

CHAR (1) Y FMH1 12.7.2.i.2 (remarks section): Sensor status 

of present weather sensor is not operating. 

RMK_SENSOR_STATUS_PN

O 

CHAR (1) Y FMH1 12.7.2.i.3 (remarks section): Sensor status 

of tipping bucket rain gauge is not operating. 

RMK_SENSOR_STATUS_FZ

RANO 

CHAR (1) Y FMH1 12.7.2.i.4 (remarks section): Sensor status 

of freezing rain sensor is not operating. 

RMK_SENSOR_STATUS_TS

NO 

CHAR (1) Y FMH1 12.7.2.i.5 (remarks section): Sensor status 

of lightning detection sensor is not operating. 

RMK_SENSOR_STATUS_VIS

NO_LOC 

VARCHAR 

(30) 

Y FMH1 12.7.2.i.6 (remarks section): Sensor status 

of secondary visibility sensor is not operating. 

RMK_SENSOR_STATUS_CH

INO_LOC 

VARCHAR 

(30) 

Y FMH1 12.7.2.i.7 (remarks section): Sensor status 

of secondary ceiling height sensor is not 

operating. 

RMK_SENSOR_STATUS_MA

INT_NEEDED 

CHAR (1) Y FMH1 12.7.2.j (remarks section): Automated 

system detects that maintenance is needed on the 

system. 

RMK_HAS_SH CHAR (1) Y Remarks section has shower(s) reference(s). 

RMK_HAS_TS CHAR (1) Y Remarks section has thunderstorm reference(s). 

RMK_HAS_FZ CHAR (1) Y Remarks section has freezing reference(s) of 

precipitation (drizzle or rain) or obscuration (fog). 

RMK_HAS_DZ CHAR (1) Y Remarks section has drizzle reference(s). 

RMK_HAS_RA CHAR (1) Y Remarks section has rain reference(s). 

RMK_HAS_SN CHAR (1) Y Remarks section has snow reference(s). 

RMK_HAS_SG CHAR (1) Y Remarks section has snow grains reference(s). 

RMK_HAS_IC CHAR (1) Y Remarks section has ice crystals reference(s). 

RMK_HAS_PL CHAR (1) Y Remarks section has ice pellets reference(s). 

RMK_HAS_GR CHAR (1) Y Remarks section has hail reference(s). 

RMK_HAS_GS CHAR (1) Y Remarks section has small hail and/or snow 

pellets reference(s). 

RMK_HAS_UP CHAR (1) Y Remarks section has unknown precipitation 

reference(s). 

RMK_HAS_BR CHAR (1) Y Remarks section has mist reference(s). 
55 

Column Name Data Type Nullable? Description 

RMK_HAS_FG CHAR (1) Y Remarks section has fog reference(s). 

RMK_HAS_FU CHAR (1) Y Remarks section has smoke reference(s). 

RMK_HAS_VA CHAR (1) Y Remarks section has volcanic ash reference(s). 

RMK_HAS_DU CHAR (1) Y Remarks section has widespread dust 

reference(s). 

RMK_HAS_SA CHAR (1) Y Remarks section has sand reference(s). 

RMK_HAS_HZ CHAR (1) Y Remarks section has haze reference(s). 

RMK_HAS_PY CHAR (1) Y Remarks section has spray reference(s). 

RMK_HAS_PO CHAR (1) Y Remarks section has well-developed dust/sand 

whirls reference(s). 

RMK_HAS_SQ CHAR (1) Y Remarks section has squalls reference(s). 

RMK_HAS_FC CHAR (1) Y Remarks section has funnel cloud reference(s). 

RMK_HAS_TW CHAR (1) Y Remarks section has tornado or waterspout 

reference(s). 

RMK_HAS_SS CHAR (1) Y Remarks section has sandstorm reference(s). 

RMK_HAS_DS CHAR (1) Y Remarks section has dust storm reference(s). 

RMK_LLWS_RAW_TEXT VARCHAR 

(2000) 

Y Low-level wind shear raw text. This is not 

described in the Federal Meteorological 

Handbook. 

RMK_HAS_LLWS CHAR (1) Y Remarks has low-level wind shear references. 

RMK_PIREP_RAW_TEXT VARCHAR 

(2000) 

Y Pilot report raw text. This is not described in the 

Federal Meteorological Handbook. 

RMK_HAS_PIREP CHAR (1) Y Remarks has pilot report reference(s).