Repository files navigation

Maven verifySonar verifyQuality Gate StatusCoverageGitHub licenseMaven Central

MetarParser

This java lib provides a Metar and TAF decoder.

Table of content

  1. Adding dependency
  2. Model
    1. Enumerations
    2. Classes
  3. Examples
    1. Parse a metar
    2. Retrieve a metar
    3. Parse a taf
    4. Retrieve a taf
  4. 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 :

<dependency>
<groupId>io.github.mivek</groupId>
<artifactId>metarParser-services</artifactId>
<version>latest</version>
</dependency>

Or check here 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. class diagram

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

trends diagram

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
  • getInters

Trends 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 It is possible to provide your own source of airports via spi. See spi module for details.

Examples

Parse a metar

Instantiate the metarFacade and use its method parse.

Stringcode = "LFPG 131830Z 19005KT 170V250 9999 -SHRA FEW040TCU SCT086 16/08 Q1011";
MetarServiceservice = MetarService.getInstance();
Metarmetar = 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.

Stringicao = "LFPG";
MetarServiceservice = MetarService.getInstance();
Metarmetar = service.retrieveFromAirport(icao);

Parse a taf

Use the TAFFacade to decode the taf.

Stringmessage = "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";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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.

Stringicao = "LFPG";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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

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.

About

A java program decoding metar and taf

Resources

Contributing

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Maven verifySonar verifyQuality Gate StatusCoverageGitHub licenseMaven Central

MetarParser

This java lib provides a Metar and TAF decoder.

Table of content

  1. Adding dependency
  2. Model
    1. Enumerations
    2. Classes
  3. Examples
    1. Parse a metar
    2. Retrieve a metar
    3. Parse a taf
    4. Retrieve a taf
  4. 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 :

<dependency>
<groupId>io.github.mivek</groupId>
<artifactId>metarParser-services</artifactId>
<version>latest</version>
</dependency>

Or check here 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. class diagram

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

trends diagram

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
  • getInters

Trends 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 It is possible to provide your own source of airports via spi. See spi module for details.

Examples

Parse a metar

Instantiate the metarFacade and use its method parse.

Stringcode = "LFPG 131830Z 19005KT 170V250 9999 -SHRA FEW040TCU SCT086 16/08 Q1011";
MetarServiceservice = MetarService.getInstance();
Metarmetar = 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.

Stringicao = "LFPG";
MetarServiceservice = MetarService.getInstance();
Metarmetar = service.retrieveFromAirport(icao);

Parse a taf

Use the TAFFacade to decode the taf.

Stringmessage = "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";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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.

Stringicao = "LFPG";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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

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.

About

A java program decoding metar and taf

Resources

Contributing

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Maven verifySonar verifyQuality Gate StatusCoverageGitHub licenseMaven Central

MetarParser

This java lib provides a Metar and TAF decoder.

Table of content

  1. Adding dependency
  2. Model
    1. Enumerations
    2. Classes
  3. Examples
    1. Parse a metar
    2. Retrieve a metar
    3. Parse a taf
    4. Retrieve a taf
  4. 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 :

<dependency>
<groupId>io.github.mivek</groupId>
<artifactId>metarParser-services</artifactId>
<version>latest</version>
</dependency>

Or check here 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. class diagram

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

trends diagram

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
  • getInters

Trends 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 It is possible to provide your own source of airports via spi. See spi module for details.

Examples

Parse a metar

Instantiate the metarFacade and use its method parse.

Stringcode = "LFPG 131830Z 19005KT 170V250 9999 -SHRA FEW040TCU SCT086 16/08 Q1011";
MetarServiceservice = MetarService.getInstance();
Metarmetar = 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.

Stringicao = "LFPG";
MetarServiceservice = MetarService.getInstance();
Metarmetar = service.retrieveFromAirport(icao);

Parse a taf

Use the TAFFacade to decode the taf.

Stringmessage = "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";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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.

Stringicao = "LFPG";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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

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.

About

A java program decoding metar and taf

Resources

Contributing

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Maven verifySonar verifyQuality Gate StatusCoverageGitHub licenseMaven Central

MetarParser

This java lib provides a Metar and TAF decoder.

Table of content

  1. Adding dependency
  2. Model
    1. Enumerations
    2. Classes
  3. Examples
    1. Parse a metar
    2. Retrieve a metar
    3. Parse a taf
    4. Retrieve a taf
  4. 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 :

<dependency>
<groupId>io.github.mivek</groupId>
<artifactId>metarParser-services</artifactId>
<version>latest</version>
</dependency>

Or check here 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. class diagram

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

trends diagram

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
  • getInters

Trends 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 It is possible to provide your own source of airports via spi. See spi module for details.

Examples

Parse a metar

Instantiate the metarFacade and use its method parse.

Stringcode = "LFPG 131830Z 19005KT 170V250 9999 -SHRA FEW040TCU SCT086 16/08 Q1011";
MetarServiceservice = MetarService.getInstance();
Metarmetar = 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.

Stringicao = "LFPG";
MetarServiceservice = MetarService.getInstance();
Metarmetar = service.retrieveFromAirport(icao);

Parse a taf

Use the TAFFacade to decode the taf.

Stringmessage = "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";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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.

Stringicao = "LFPG";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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

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.

About

A java program decoding metar and taf

Resources

Contributing

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Maven verifySonar verifyQuality Gate StatusCoverageGitHub licenseMaven Central

MetarParser

This java lib provides a Metar and TAF decoder.

Table of content

  1. Adding dependency
  2. Model
    1. Enumerations
    2. Classes
  3. Examples
    1. Parse a metar
    2. Retrieve a metar
    3. Parse a taf
    4. Retrieve a taf
  4. 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 :

<dependency>
<groupId>io.github.mivek</groupId>
<artifactId>metarParser-services</artifactId>
<version>latest</version>
</dependency>

Or check here 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. class diagram

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

trends diagram

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
  • getInters

Trends 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 It is possible to provide your own source of airports via spi. See spi module for details.

Examples

Parse a metar

Instantiate the metarFacade and use its method parse.

Stringcode = "LFPG 131830Z 19005KT 170V250 9999 -SHRA FEW040TCU SCT086 16/08 Q1011";
MetarServiceservice = MetarService.getInstance();
Metarmetar = 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.

Stringicao = "LFPG";
MetarServiceservice = MetarService.getInstance();
Metarmetar = service.retrieveFromAirport(icao);

Parse a taf

Use the TAFFacade to decode the taf.

Stringmessage = "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";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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.

Stringicao = "LFPG";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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

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.

About

A java program decoding metar and taf

Resources

Contributing

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Maven verifySonar verifyQuality Gate StatusCoverageGitHub licenseMaven Central

MetarParser

This java lib provides a Metar and TAF decoder.

Table of content

  1. Adding dependency
  2. Model
    1. Enumerations
    2. Classes
  3. Examples
    1. Parse a metar
    2. Retrieve a metar
    3. Parse a taf
    4. Retrieve a taf
  4. 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 :

<dependency>
<groupId>io.github.mivek</groupId>
<artifactId>metarParser-services</artifactId>
<version>latest</version>
</dependency>

Or check here 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. class diagram

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

trends diagram

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
  • getInters

Trends 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 It is possible to provide your own source of airports via spi. See spi module for details.

Examples

Parse a metar

Instantiate the metarFacade and use its method parse.

Stringcode = "LFPG 131830Z 19005KT 170V250 9999 -SHRA FEW040TCU SCT086 16/08 Q1011";
MetarServiceservice = MetarService.getInstance();
Metarmetar = 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.

Stringicao = "LFPG";
MetarServiceservice = MetarService.getInstance();
Metarmetar = service.retrieveFromAirport(icao);

Parse a taf

Use the TAFFacade to decode the taf.

Stringmessage = "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";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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.

Stringicao = "LFPG";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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

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.

About

A java program decoding metar and taf

Resources

Contributing

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Maven verifySonar verifyQuality Gate StatusCoverageGitHub licenseMaven Central

MetarParser

This java lib provides a Metar and TAF decoder.

Table of content

  1. Adding dependency
  2. Model
    1. Enumerations
    2. Classes
  3. Examples
    1. Parse a metar
    2. Retrieve a metar
    3. Parse a taf
    4. Retrieve a taf
  4. 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 :

<dependency>
<groupId>io.github.mivek</groupId>
<artifactId>metarParser-services</artifactId>
<version>latest</version>
</dependency>

Or check here 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. class diagram

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

trends diagram

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
  • getInters

Trends 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 It is possible to provide your own source of airports via spi. See spi module for details.

Examples

Parse a metar

Instantiate the metarFacade and use its method parse.

Stringcode = "LFPG 131830Z 19005KT 170V250 9999 -SHRA FEW040TCU SCT086 16/08 Q1011";
MetarServiceservice = MetarService.getInstance();
Metarmetar = 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.

Stringicao = "LFPG";
MetarServiceservice = MetarService.getInstance();
Metarmetar = service.retrieveFromAirport(icao);

Parse a taf

Use the TAFFacade to decode the taf.

Stringmessage = "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";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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.

Stringicao = "LFPG";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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

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.

About

A java program decoding metar and taf

Resources

Contributing

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Maven verifySonar verifyQuality Gate StatusCoverageGitHub licenseMaven Central

MetarParser

This java lib provides a Metar and TAF decoder.

Table of content

  1. Adding dependency
  2. Model
    1. Enumerations
    2. Classes
  3. Examples
    1. Parse a metar
    2. Retrieve a metar
    3. Parse a taf
    4. Retrieve a taf
  4. 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 :

<dependency>
<groupId>io.github.mivek</groupId>
<artifactId>metarParser-services</artifactId>
<version>latest</version>
</dependency>

Or check here 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. class diagram

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

trends diagram

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
  • getInters

Trends 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 It is possible to provide your own source of airports via spi. See spi module for details.

Examples

Parse a metar

Instantiate the metarFacade and use its method parse.

Stringcode = "LFPG 131830Z 19005KT 170V250 9999 -SHRA FEW040TCU SCT086 16/08 Q1011";
MetarServiceservice = MetarService.getInstance();
Metarmetar = 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.

Stringicao = "LFPG";
MetarServiceservice = MetarService.getInstance();
Metarmetar = service.retrieveFromAirport(icao);

Parse a taf

Use the TAFFacade to decode the taf.

Stringmessage = "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";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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.

Stringicao = "LFPG";
TAFServiceservice = TAFService.getInstance();
TAFtaf = 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

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.

About

A java program decoding metar and taf

Resources

Contributing

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages