https://github.com/mivek/metarparser
A java program decoding metar and taf
https://github.com/mivek/metarparser
aeronautics airport hacktoberfest icao java metar metar-decoder taf weather
Last synced: 7 months ago
JSON representation
A java program decoding metar and taf
- Host: GitHub
- URL: https://github.com/mivek/metarparser
- Owner: mivek
- License: mit
- Created: 2017-12-17T20:42:00.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2024-09-05T02:55:47.000Z (about 1 year ago)
- Last Synced: 2024-09-06T09:57:46.815Z (about 1 year ago)
- Topics: aeronautics, airport, hacktoberfest, icao, java, metar, metar-decoder, taf, weather
- Language: Java
- Homepage: https://www.metar-taf-decoder.com/
- Size: 6.03 MB
- Stars: 43
- Watchers: 6
- Forks: 31
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
[](https://github.com/mivek/MetarParser/actions/workflows/maven-verify.yml)
[](https://github.com/mivek/MetarParser/actions/workflows/build_sonar_verify.yml)[](https://sonarcloud.io/dashboard?id=io.github.mivek%3AmetarParser)
[](https://sonarcloud.io/dashboard?id=io.github.mivek%3AmetarParser)
[](https://github.com/mivek/MetarParser/blob/master/LICENSE)
[](https://search.maven.org/artifact/io.github.mivek/metarParser/)
# MetarParser
This java lib provides a Metar and TAF decoder.
## Table of content
1. [Adding dependency](#adding-the-dependency)
2. [Model](#model)
1. [Enumerations](#enumerations)
2. [Classes](#classes)
3. [Examples](#examples)
1. [Parse a metar](#parse-a-metar)
2. [Retrieve a metar](#retrieve-the-metar-of-an-airport)
3. [Parse a taf](#parse-a-taf)
4. [Retrieve a taf](#retrieve-a-taf)
4. [Internationalization](#internationalization)## Architecture of the project
This project is divided into multiple maven module
- metarParser-entities: Contains the model and the enumerations
- metarParser-parsers: Contains the parsers and the commands
- metarParser-services: Contains a service allowing you to parse or retrieve METAR and TAF
- metarParser-spi: Contains the SPI
- metarParser-commons: Contains utility and internationalization classes## Adding the dependency
To add the service module :
```xml
io.github.mivek
metarParser-services
latest```
Or check [here](https://search.maven.org/artifact/io.github.mivek/metarParser/) if you are not using maven.
## Model
The class diagrams are generated by IntelliJ
When updating classes, regenerate the diagrams and save the images in the project.
### Enumerations
The application contains numerous enumerations to represent data.
- CloudType: Represents the type of cloud.
- CloudQuantity: Represents the amount of clouds.
- DepositBrakingCapacity: Represents the breaking capacity on a runway.
- DepositCoverage: Represents the percentage of a runway covered by deposit.
- DepositThickness: Represents the thickness of a deposit on a runway.
- DepositType: Represents the type of deposit on a runway.
- DepositType: Represents the type of deposit on a runway.
- Descriptive: Represents the description of a meteorological phenomenon.
- Flag: Represents a flag applied to a METAR or TAF: AMD, AUTO, CNL, COR or NIL.
- IcingIntensity: Represents the intensity of an icing element.
- Intensity: Represents the intensity of a meteorological phenomenon.
- Phenomenon: Represents a phenomenon.
- RunwayInfoIndicator: Represents the indicator on a runway.
- RunwayInfoTrend: Represents the visibility trend on a runway.
- TimeIndicator: Represents the time of the trend.
- TurbulenceIntensity: Represents the intensity of a turbulence
- WeatherChangeType: Represents a type of trend.### Classes
#### Airport
The airport class is composed of
- Name
- City
- Country
- IATA code
- ICAO code
- latitude
- longitude
- altitude
- timezone
Note: Depending on the source for the airports, fields can be null#### Cloud
In this application a cloud is composed of
- CloudQuantity
- CloudType (optional)
- height (optional)#### Country
A country is represented by its name.
#### Icing
The icing are only available in TAF and in TAFTrends.
It is composed of- The icing intensity
- The base height
- The layer's depth#### Runway information
The runway information can represent either a visual range or a deposit.
If the object represents a visual range the field `minRange` is non-null.
The runway information is composed of
- The name of the runway
- The minimal visibility on the runway (optional)
- The indicator of the visual range. Either "greater than", "less than" or empty. (optional)
- The maximal visibility on the runway (optional)
- The trend of the visibility (optional)
- The type of deposit (optional)
- The percentage of coverage on the runway
- The thickness of the deposit.
- The braking capacity on the runway.#### Turbulence
The turbulence are only available in TAF and in TAFTrends.
It is composed of:- The turbulence intensity
- The base height
- The layer's depth#### Visibility
The visibility class is composed of
- The main visibility
- The minimal visibility (optional)
- The direction of the minimal visibility (optional)#### WeatherCondition
The weather condition is class to represent a meteorological phenomenon.
A weather condition is composed of- an intensity (optional)
- a descriptive (optional)
- a list of phenomenon#### Wind
The wind class is composed of
- the speed
- the direction
- the speed of the gust
- the minimal wind variation in degrees
- the maximal wind variation in degrees
- the unit of the wind's speed#### WindShear
This class is a subclass of Wind.
It is composed of- the height of the wind shear.
### Trends

Both METAR and TAF objects have a list of `trends`.
For the METAR object the `MetarTrend` represents the trend.
For TAF object the trends can be `FMTafTrend`, `TafTrend` and `TafProbTrend`.
It is possible to get a specific type of Trend for TAF with methods:
- getBECMGs
- getFMs
- getProbs
- getTempos
- getIntersTrends inherit from `AbstractWeatherContainer` so they have the following fields:
- a wind
- a windshear
- a visibility and vertical visibility
- a list of clouds
- a list of weather conditions
- a Remark## Airports loading
By default, airports are loaded from the temporary file [airport.dat](metarParser-spi/src/main/resources/data/airports.dat)
It is possible to provide your own source of airports via spi.
See [spi](metarParser-spi/README.md) module for details.## Examples
### Parse a metar
Instantiate the metarFacade and use its method parse.
```java
String code = "LFPG 131830Z 19005KT 170V250 9999 -SHRA FEW040TCU SCT086 16/08 Q1011";
MetarService service = MetarService.getInstance();
Metar metar = service.decode(code);
```### Retrieve the metar of an airport
Instantiate the metarFacade.
Use the MetarService and its method retrieveFromAirport with the ICAO code of the airport.```java
String icao = "LFPG";
MetarService service = MetarService.getInstance();
Metar metar = service.retrieveFromAirport(icao);
```### Parse a taf
Use the TAFFacade to decode the taf.
```java
String message = "TAF LFPG 150500Z 1506/1612 17005KT 6000 SCT012 \n"
+"TEMPO 1506/1509 3000 BR BKN006 PROB40 \n"
+"TEMPO 1506/1508 0400 BCFG BKN002 PROB40 \n"
+"TEMPO 1512/1516 4000 -SHRA FEW030TCU BKN040 \n"
+"BECMG 1520/1522 CAVOK \n"
+"TEMPO 1603/1608 3000 BR BKN006 PROB40 \n"
+"TEMPO 1604/1607 0400 BCFG BKN002 TX17/1512Z TN07/1605Z";
TAFService service = TAFService.getInstance();
TAF taf = service.decode(message);
```Lines of the message have to be separated by a "\\n" character.
### Retrieve a taf
Use the TAFFacade and the method retrieveFromAirport with the ICAO code of the airport.
```java
String icao = "LFPG";
TAFService service = TAFService.getInstance();
TAF taf = service.retrieveFromAirport(icao);
```### Internationalization
The default locale is english.
The following locales are also available in the project but may not be fully translated:
- French
- German
- Italian
- Polish
- Russian
- simplified chinese
- Spanish
- Turkish#### Change the locale and contributing
To change the locale use the method `setLocale(Locale)` of the class `Messages.java`
```(java)
Messages.getInstance().setLocale(Locale.FRENCH); // Changes the locale to french.
```If you are willing to add a new locale or contribute to the project please see [Contributing.md file](CONTRIBUTING.md).
[Jetbrains](https://www.jetbrains.com/?from=metarParser) open source project.