forked from cayetanobv/python-metar
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_metar_decode.py
163 lines (139 loc) · 6.59 KB
/
test_metar_decode.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/usr/bin/env python
#
# This is a minimal sample script showing how the individual data
# are accessed from the decoded report. To produce the standard text
# summary of a report, the string() method of the Metar object.
#
# The parsed data are stored as attributes of a Metar object.
# Individual attributes are either strings. instances of one of the
# metar.Datatypes classes, or lists of tuples of these scalars.
# Here's a summary, adapted from the comments in the Metar.Metar.__init__()
# method:
#
# Attribute Comments [data type]
# -------------- --------------------
# code original METAR code [string]
# type METAR (routine) or SPECI (special) [string]
# mod AUTO (automatic) or COR (corrected) [string]
# station_id 4-character ICAO station code [string]
# time observation time [datetime]
# cycle observation cycle (0-23) [int]
# wind_dir wind direction [direction]
# wind_speed wind speed [speed]
# wind_gust wind gust speed [speed]
# wind_dir_from beginning of range for win dir [direction]
# wind_dir_to end of range for wind dir [direction]
# vis visibility [distance]
# vis_dir visibility direction [direction]
# max_vis visibility [distance]
# max_vis_dir visibility direction [direction]
# temp temperature (C) [temperature]
# dewpt dew point (C) [temperature]
# press barometric pressure [pressure]
# runway runway visibility [list of tuples...]
# name [string]
# low [distance]
# high [distance]
# weather present weather [list of tuples...]
# intensity [string]
# description [string]
# precipitation [string]
# obscuration [string]
# other [string]
# recent recent weather [list of tuples...]
# sky sky conditions [list of tuples...]
# cover [string]
# height [distance]
# cloud [string]
# windshear runways w/ wind shear [list of strings]
#
# press_sea_level sea-level pressure [pressure]
# wind_speed_peak peak wind speed in last hour [speed]
# wind_dir_peak direction of peak wind speed in last hour [direction]
# max_temp_6hr max temp in last 6 hours [temperature]
# min_temp_6hr min temp in last 6 hours [temperature]
# max_temp_24hr max temp in last 24 hours [temperature]
# min_temp_24hr min temp in last 24 hours [temperature]
# precip_1hr precipitation over the last hour [precipitation]
# precip_3hr precipitation over the last 3 hours [precipitation]
# precip_6hr precipitation over the last 6 hours [precipitation]
# precip_24hr precipitation over the last 24 hours [precipitation]
#
# _remarks remarks [list of strings]
# _unparsed unparsed remarks [list of strings]
#
# The metar.Datatypes classes (temperature, pressure, precipitation,
# speed, direction) describe an observation and its units. They provide
# value() and string() methods to that return numerical and string
# representations of the data in any of a number of supported units.
#
# (You're going to have to study the source code for more details,
# like the available methods and supported unit conversions for the
# metar.Datatypes objects, etc..)
# In particular, look at the Metar.string()
# method, and the functions it calls.
#
# Feb 4, 2005
# Tom Pollard
#
from metar.Metar import Metar
# A sample METAR report
#code = "METAR KEWR 111851Z VRB03G19KT 2SM R04R/3000VP6000FT TSRA BR FEW015 BKN040CB BKN065 OVC200 22/22 A2987 RMK AO2 PK WND 29028/1817 WSHFT 1812 TSB05RAB22 SLP114 FRQ LTGICCCCG TS OHD AND NW-N-E MOV NE P0013 T02270215"
#code = 'METAR TFFF 151430Z AUTO 08016KT 050V110 9999 SCT032 BKN038 BKN044'
#code = 'METAR SVVA 092200Z 36004KT 9999 -DZ BKN016'
#code = 'LEMD 111230Z 35006KT 250V030 CAVOK 28/03 Q1019 NOSIG'
#code='METAR SVVA 092200Z 36004KT 9999 -DZ BKN016 30/21 Q1011'
#code = 'METAR CBBC 120000Z AUTO 32005KT 9SM OVC060 19/05 A3032 RMK SLP269'
#code = 'KMMU 112345Z 25007KT 10SM SKC 24/21 A2986'
code = 'METAR CYLK 120000Z 25008KT 15SM BKN080 08/01 A2995 RMK AC5 9.0/3.5/0/NIL/LAST OBS/NXT 121400Z SLP152'
print "-----------------------------------------------------------------------"
print "METAR: ",code
print "-----------------------------------------------------------------------"
# Initialize a Metar object with the coded report
obs = Metar(code)
# Print the individual data
# The 'station_id' attribute is a string.
print "station: %s" % obs.station_id
if obs.type:
print "type: %s" % obs.report_type()
# The 'time' attribute is a datetime object
if obs.time:
print "time: %s" % obs.time.ctime()
# The 'temp' and 'dewpt' attributes are temperature objects
if obs.temp:
print "temperature: %s" % obs.temp.string("C")
if obs.dewpt:
print "dew point: %s" % obs.dewpt.string("C")
# The wind() method returns a string describing wind observations
# which may include speed, direction, variability and gusts.
if obs.wind_speed:
print "wind: %s" % obs.wind()
# The peak_wind() method returns a string describing the peak wind
# speed and direction.
if obs.wind_speed_peak:
print "wind: %s" % obs.peak_wind()
# The visibility() method summarizes the visibility observation.
if obs.vis:
print "visibility: %s" % obs.visibility()
# The runway_visual_range() method summarizes the runway visibility
# observations.
if obs.runway:
print "visual range: %s" % obs.runway_visual_range()
# The 'press' attribute is a pressure object.
if obs.press:
print "pressure: %s" % obs.press.string("mb")
# The 'precip_1hr' attribute is a precipitation object.
if obs.precip_1hr:
print "precipitation: %s" % obs.precip_1hr.string("in")
# The present_weather() method summarizes the weather description (rain, etc.)
print "weather: %s" % obs.present_weather()
# The sky_conditions() method summarizes the cloud-cover observations.
print "sky: %s" % obs.sky_conditions("\n ")
# The remarks() method describes the remark groups that were parsed, but
# are not available directly as Metar attributes. The precipitation,
# min/max temperature and peak wind remarks, for instance, are stored as
# attributes and won't be listed here.
if obs._remarks:
print "remarks:"
print "- "+obs.remarks("\n- ")
print "-----------------------------------------------------------------------\n"