5 releases
0.2.2 | Jan 29, 2024 |
---|---|
0.2.1 | Jan 2, 2024 |
0.2.0 | Dec 20, 2023 |
0.1.1 | May 15, 2023 |
0.1.0 | May 9, 2023 |
#790 in Parser implementations
75KB
1.5K
SLoC
rweather-decoder
Decoders of various weather reports.
The decoders are command-line interface (CLI) applications that store decoded reports in JSON files, which are suitable for further machine processing.
Roadmap
- METAR / SPECI
- header, wind, visibility, clouds, temperature, dew point, pressure
- runway visual range, present and recent weather, wind shear, sea
- TREND
- REMARK
- TAF
- SYNOP
- ACARS
- ISD
Installation
To use this crate, you need to have Rust and Cargo installed on your machine. To install Rust, visit the official Rust website at https://www.rust-lang.org/learn/get-started and follow the installation instructions for the given operating system. Rust provides an installer that will install both Rust and Cargo.
After, run the following command:
[filip@fractal ~]$ cargo install rweather-decoder
Cargo will download the crate from the Rust package repository and compile it on your system. After the installation is complete, you can start using the CLI decoders.
Usage
To decode METAR reports, use the decode-metar
CLI application, see the help:
[filip@fractal ~]$ decode-metar --help
rweather-decoder 0.2.2
CLI decoder of METAR reports
USAGE:
decode-metar [FLAGS] [OPTIONS] <input-globs>... <output>
FLAGS:
-h, --help Prints help information
-p, --pretty-print Enable pretty-printing of output JSON file
-q, --quiet Quiet
-V, --version Prints version information
OPTIONS:
-a, --anchor-time <anchor-time> Anchor time (YYYY-MM-DD) for the plain file format. Specifies a datetime that is
ideally close to that one when the report was actually published. If given, the
decoded METAR day and time will be converted to a full datetime
-f, --file-format <file-format> METAR file format (noaa-metar-cycles, plain) [default: noaa-metar-cycles]
ARGS:
<input-globs>... Input files (glob patterns separated by space)
<output> Output JSON file. Same input reports will be deduplicated
The decode-metar
tool supports right now two METAR file formats:
- noaa-metar-cycles (default) - METAR reports stored in text files downloaded from the NOAA METAR cycles page located at https://tgftp.nws.noaa.gov/data/observations/metar/cycles/.
- plain - METAR reports stored in text files with one report per row.
The decoded METAR reports will be saved to the output JSON file as an array of objects. For further details on the structure of the output, please check the "Examples" section below and refer to the documentation available at https://docs.rs/rweather-decoder which also includes differences between Rust data types and the JSON output.
Examples
To check for the latest METAR reports, visit https://tgftp.nws.noaa.gov/data/observations/metar/cycles/. From there you can download a specific file, for example 16Z.TXT
(cycle 16Z), and use the decode-metar
CLI tool as follows:
[filip@fractal ~]$ decode-metar -p 16Z.TXT 16Z.json
The decoded METAR reports were saved to the JSON file 16Z.json
. The -p
option enabled pretty-printing of the output for improved readability. Here is an example of a decoded METAR report for the LFBD airport (Bordeaux–Mérignac Airport):
[
{
"station_id": "LFBD",
"observation_time": {
"value_type": "date_time",
"value": "2023-05-12T16:00:00Z"
},
"is_corrected": false,
"is_automated": true,
"wind_from_direction": {
"value_type": "exact",
"value": 330.0,
"units": "degT"
},
"wind_from_direction_range": {
"value_type": "range",
"value": [
{
"value_type": "exact",
"value": 270.0
},
{
"value_type": "exact",
"value": 40.0
}
],
"units": "degT"
},
"wind_speed": {
"value_type": "exact",
"value": 16.0,
"units": "kt"
},
"wind_gust": {
"value_type": "exact",
"value": 32.0,
"units": "kt"
},
"prevailing_visibility": {
"value_type": "above",
"value": 10000.0,
"units": "m"
},
"minimum_visibility": {
"value_type": "exact",
"value": 600.0,
"units": "m"
},
"directional_visibilites": [],
"runway_visual_ranges": [
{
"runway": "23",
"visual_range": {
"value_type": "exact",
"value": 1100.0,
"units": "m"
},
"trend": "decreasing"
},
{
"runway": "05",
"visual_range": {
"value_type": "above",
"value": 2300.0,
"units": "m"
},
"trend": null
},
{
"runway": "29",
"visual_range": {
"value_type": "exact",
"value": 1800.0,
"units": "m"
},
"trend": "decreasing"
}
],
"present_weather": [
{
"intensity": "heavy",
"is_in_vicinity": false,
"descriptors": [
"thunderstorm"
],
"phenomena": [
"rain"
]
},
{
"intensity": "moderate",
"is_in_vicinity": false,
"descriptors": [
"patches"
],
"phenomena": [
"fog"
]
}
],
"clouds": [
{
"cover": "few",
"height": {
"value_type": "exact",
"value": 2400.0,
"units": "ft"
},
"cloud_type": null
},
{
"cover": "broken",
"height": {
"value_type": "exact",
"value": 3800.0,
"units": "ft"
},
"cloud_type": null
},
{
"cover": "broken",
"height": {
"value_type": "exact",
"value": 4400.0,
"units": "ft"
},
"cloud_type": null
},
{
"cover": null,
"height": null,
"cloud_type": "cumulonimbus"
}
],
"temperature": {
"value_type": "exact",
"value": 15.0,
"units": "degC"
},
"dew_point": {
"value_type": "exact",
"value": 11.0,
"units": "degC"
},
"pressure": {
"value_type": "exact",
"value": 1018.0,
"units": "hPa"
},
"recent_weather": [],
"wind_shears": [],
"sea_temperature": null,
"sea_state": null,
"wave_height": null,
"trend_changes": [
{
"indicator": "temporary",
"from_time": null,
"to_time": null,
"at_time": null,
"wind_from_direction": null,
"wind_from_direction_range": null,
"wind_speed": null,
"wind_gust": null,
"prevailing_visibility": {
"value_type": "exact",
"value": 3000.0,
"units": "m"
},
"minimum_visibility": null,
"directional_visibilites": [],
"weather": [
{
"intensity": "moderate",
"is_in_vicinity": false,
"descriptors": [
"shower"
],
"phenomena": [
"rain"
]
}
],
"clouds": [
{
"cover": "broken",
"height": {
"value_type": "exact",
"value": 1000.0,
"units": "ft"
},
"cloud_type": null
},
{
"cover": "scattered",
"height": {
"value_type": "exact",
"value": 2000.0,
"units": "ft"
},
"cloud_type": "cumulonimbus"
},
{
"cover": "broken",
"height": {
"value_type": "exact",
"value": 3000.0,
"units": "ft"
},
"cloud_type": "towering_cumulus"
}
]
}
],
"report": "LFBD 121600Z AUTO 33016G32KT 270V040 9999 0600 R23/1100D R05/P2300 R29/1800D +TSRA BCFG FEW024/// BKN038/// BKN044/// //////CB 15/11 Q1018 TEMPO 3000 SHRA BKN010 SCT020CB BKN030TCU"
}
]
Dependencies
~13MB
~274K SLoC