Skip to content

Conversation

@simonsteiner
Copy link

Hi Danilo,

Thanks for your work on this excellent library!

I've created a fork with Python bindings here: simonsteiner/openair-rs-py, and I've also adapted the airspace visualizer for Python: airspace-viewer.fly.dev.

While working with airspace files from the Palz Alsace Open 2025, I encountered an issue when parsing their OpenAir file:

Error: Failed to parse OpenAir file 'example_data/pao2025.txt': Invalid class: FFVL

It turns out that the French use an extended set of OpenAir classes. I have referenced BPascal-91/eAirspacesFormats and have added support for these additional airspace classes.

You can find extensive information about French airspace on Pascal Bazile's website.

Airspace class enhancements

  • Support has been added for the extended OpenAir classes in the Class enum: Notam, Zsm, Ffvl, Ffvp, Siv, Ras, Adiz, Ama, Part, Fir, Uir, Oca, Political, and NoFir.
  • The impl Class block has been extended to parse the new airspace classes.

Parsing tests for new airspace classes

  • Unit tests have been added to validate the parsing of real-world airspace examples for the new classes.

Other improvements

  • The Prohibited airspace class has been reordered within the Class enum for consistency with other class definitions.
  • The Palz Alsace Open 2025 airspace file has been added to the example_data folder.
  • A typo in FORMAT.txt has been fixed (replacing "begining" with "beginning").

Please let me know if you would like any changes to the PR.

Cheers,
Simon

Copilot AI review requested due to automatic review settings July 26, 2025 17:11
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds support for extended French OpenAir airspace classes to improve compatibility with French airspace files. The implementation follows the extended OpenAir format specification documented by BPascal-91.

  • Added 14 new airspace classes specific to French aviation (FFVL, FFVP, ZSM, etc.)
  • Implemented parsing logic for all new class identifiers with multiple format variations
  • Added comprehensive test coverage with real-world French airspace examples

Reviewed Changes

Copilot reviewed 2 out of 3 changed files in this pull request and generated 3 comments.

File Description
src/lib.rs Adds new French airspace classes to enum, implements parsing logic, and includes extensive test cases
FORMAT.txt Fixes typo "begining" → "beginning" in documentation

@simonsteiner
Copy link
Author

Another airspace was found that didn't parse: It's a class OTHER with a float altitude of AH 4500.0FT AMSL. The commit fdede8a fixes both issues.

AC OTHER
AY TRA
AN TRA 22C (MILOPS)
*AUID GUId=EPTR22C UId=400003114648138 Id=EPTR22C
*AAlt ["SFC/4500.0FT AMSL", "0m/1371m"]
*ADescr Current time:2025-04-08 14:50:07.707
AH 4500.0FT AMSL
AL SFC
DP 52:53:55 N 018:00:00 E
DP 52:55:41 N 018:14:53 E
DP 52:53:43 N 018:20:49 E
DP 52:53:02 N 018:17:28 E
DP 52:51:11 N 018:11:57 E
DP 52:47:18 N 018:12:17 E
DP 52:45:36 N 018:15:44 E
DP 52:38:50 N 018:11:00 E
DP 52:40:17 N 018:00:00 E
DP 52:53:55 N 018:00:00 E

@dbrgn
Copy link
Collaborator

dbrgn commented Jul 27, 2025

I've created a fork with Python bindings here: simonsteiner/openair-rs-py, and I've also adapted the airspace visualizer for Python: airspace-viewer.fly.dev.

Nice! 🙂 Your visualizer looks better than mine.

Regarding the changes: I'll try to review them soon-ish. If I forget about it, feel free to ping me!

(About Copilot: It's the first time I see a review like this. So far it doesn't look like a big help yet 😅)

Comment on lines +86 to +111
/// Zone Sensibilité Majeur
Zsm,
/// FFVL Protocole for PARAGLIDER
Ffvl,
/// FFVP Protocole for GLIDER
Ffvp,
/// Service d'Information en Vol
Siv,
/// Regulated Air Space
Ras,
/// Air Defense Identification Zone
Adiz,
/// Minimum Altitude Area
Ama,
/// PART of airspace
Part,
/// Flight Information Region
Fir,
/// Upper Flight Information Region
Uir,
/// Oceanic Control Area
Oca,
/// Political-administrative area
Political,
/// Airspace for which not even an FIR is defined
NoFir,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wouldn't it be easier to use something like Other(String) to cover all of these non-standard values?

side note: the Naviter folks are supporting these kinds of airspace types via AY instead (see https://github.com/naviter/seeyou_file_formats/blob/main/OpenAir_File_Format_Support.md#ay-airspace-type)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants