| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
This is a Python module which decodes meteorological reports (e.g. SYNOPs) into a Python dictionary. It can also take a Python dictionary and encode a meteorological report from it.
The current version of the module supports the following (in most cases; see Known Issues below):
To decode a SYNOP:
from pymetdecoder import synop as s
synop = "AAXX 01004 88889 12782 61506 10094 20047 30111 40197 53007 60001 81541 333 81656 86070"
output = s.SYNOP().decode(synop)
print(output)This yields the following output (pretty-printed):
{
"station_type": {
"value": "AAXX"
},
"obs_time": {
"day": {
"value": 1
},
"hour": {
"value": 0
}
},
"wind_indicator": {
"value": 4,
"unit": "KT",
"estimated": false
},
"station_id": {
"value": "88889"
},
"region": {
"value": "III"
},
"precipitation_indicator": {
"value": 1,
"in_group_1": true,
"in_group_3": false
},
"weather_indicator": {
"value": 2,
"automatic": false
},
"lowest_cloud_base": {
"_table": "1600",
"min": 1500,
"max": 2000,
"quantifier": null,
"_code": 7,
"unit": "m"
},
"visibility": {
"_table": "4377",
"value": 40000,
"quantifier": null,
"use90": false,
"_code": 82,
"unit": "m"
},
"cloud_cover": {
"_table": "2700",
"value": 6,
"obscured": false,
"unit": "okta",
"_code": 6
},
"surface_wind": {
"direction": {
"_table": "0877",
"value": 150,
"varAllUnknown": false,
"calm": false,
"_code": 15,
"unit": "deg"
},
"speed": {
"value": 6,
"unit": "KT"
}
},
"air_temperature": {
"value": 9.4,
"unit": "Cel"
},
"dewpoint_temperature": {
"value": 4.7,
"unit": "Cel"
},
"station_pressure": {
"value": 1011.1,
"unit": "hPa"
},
"sea_level_pressure": {
"value": 1019.7,
"unit": "hPa"
},
"pressure_tendency": {
"tendency": {
"_table": "0200",
"value": 3
},
"change": {
"value": 0.7,
"unit": "hPa"
}
},
"precipitation_s1": {
"amount": {
"_table": "3590",
"value": 0,
"quantifier": null,
"trace": false,
"_code": 0,
"unit": "mm"
},
"time_before_obs": {
"_table": "4019",
"value": 6,
"unit": "h",
"_code": 1
}
},
"cloud_types": {
"low_cloud_type": {
"_table": "0513",
"value": 5
},
"middle_cloud_type": {
"_table": "0515",
"value": 4
},
"high_cloud_type": {
"_table": "0509",
"value": 1
},
"low_cloud_amount": {
"value": 1,
"unit": "okta"
}
},
"cloud_layer": [
{
"cloud_cover": {
"_table": "2700",
"value": 1,
"obscured": false,
"unit": "okta",
"_code": 1
},
"cloud_genus": {
"_table": "0500",
"value": "Sc",
"_code": 6
},
"cloud_height": {
"_table": "1677",
"value": 1800,
"quantifier": null,
"_code": 56,
"unit": "m"
}
},
{
"cloud_cover": {
"_table": "2700",
"value": 6,
"obscured": false,
"unit": "okta",
"_code": 6
},
"cloud_genus": {
"_table": "0500",
"value": "Ci",
"_code": 0
},
"cloud_height": {
"_table": "1677",
"value": 6000,
"quantifier": null,
"_code": 70,
"unit": "m"
}
}
]
}Re-encoding this dict gets back the original SYNOP:
from pymetdecoder import synop as s
original = "AAXX 01004 88889 12782 61506 10094 20047 30111 40197 53007 60001 81541 333 81656 86070"
synop = s.SYNOP()
output = synop.decode(synop)
msg = synop.encode(output)
print(msg)
# Returns AAXX 01004 88889 12782 61506 10094 20047 30111 40197 53007 60001 81541 333 81656 86070Commonly seen attributes in the output dict are as follows:
The module will try to decode as much of a report as it can. Non-fatal problems (e.g. invalid codes) will emit a warning message and continue. Fatal problems will emit a DecodeError exception, which can be caught in a try...except block.
Introduced in version 0.2.0, you can decode/encode reports directly from the command line. The following command decodes the same SYNOP as in the example above:
$ python3 -m pymetdecoder decode --synop="AAXX 01004 88889 12782 61506 10094 20047 30111 40197 53007 60001 81541 333 81656 86070"
It can also read reports in from standard input by specifying --synop=-:
$ echo "AAXX 01004 88889 12782 61506 10094 20047 30111 40197 53007 60001 81541 333 81656 86070" | python3 -m pymetdecoder decode --synop=-
Encoding reports works in the same way. The --synop switch can be specified multiple times if multiple SYNOPs are to be decoded/encoded. Similarly, a --metar switch can be used to decode/encode METARs.
See CHANGELOG.md for the list of changes
This version is 0.2.1. There may be some uncaught bugs/issues or other problems that have not been found yet. The following is a list of known issues which are still to be addressed:
Feel free to raise any additional issues/bugs in the issue tracker
In future, it is intended that the module will support the following:
If you would like to contribute to this module by adding in the functionality to support any of these reports (or other reports), then feel free to do so!
(c) UK Research and Innovation (UKRI), 2021 - 2026, British Antarctic Survey. You may use and re-use this software and associated documentation files free of charge in any format or medium, under the terms of the Open Government Licence v3.0. You may obtain a copy of the Open Government Licence at http://www.nationalarchives.gov.uk/doc/open-government-licence/
| Back | FazBrowse Home | New Git URL |