Alexandre 927b7eeea7 fix(routing): kill globe-spanning splices + strip computer-nav fixes
Two correctness fixes exposed by a coverage batch where "1 ROUTE130"
near-misses turned out to be catastrophically broken routes (Paris->
Frankfurt routed via Alaska) hidden by IFPS error-masking:

- airway_path now rejects a spliced sub-path that balloons past
  SPLICE_MAX_RATIO x the direct distance. At a fragmented FL the graph
  could route two nearby fixes the long way around the whole network; that
  garbage then showed only 1 (masked) error and beat sane routes in the
  monotonic best-tracking.
- route_item15 strips computer-navigation fixes (unnamed ARINC waypoints
  whose ident carries a digit, e.g. GT27A) proactively, collapsing
  same-airway legs, so IFPS never sees a ROUTE130 designator it would
  reject and stop evaluating at.

Net: coverage numbers are now honest (masked garbage no longer counts as a
near-miss); the real blocker is RAD PROF204/205 on upper/FRA routes.
49 tests green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 09:54:55 +02:00

flightplanner

Outil de flight planning local et offline pour la simulation de vol (MSFS / P3D / X-Plane), dans l'esprit de PFPX en plus simple. Aucune dépendance cloud : navdata X-Plane importée en base SQLite locale, routing par réseau d'airways, plan carburant, export .pln / .fms / OFP texte.

État : MVP en construction. Voir TODO.md pour l'avancement, et IDEAS.md pour la vision produit long terme (briefing complet type SkyNexus/SimBrief : météo, NOTAM, carte enroute, charts…).

Architecture

Workspace Cargo à deux crates :

Crate Rôle
flightplanner-core Logique métier : parsing navdata, base SQLite, routing, perf, export
flightplanner-cli Binaire flightplanner (interface clap)

Une interface web locale (Axum) pourra s'ajouter plus tard sans toucher au cœur.

Prérequis

  • Rust stable (toolchain MSVC sous Windows) — https://rustup.rs
  • Un compilateur C : rusqlite est utilisé en mode bundled (SQLite compilé depuis la source). Sous Windows, installer les Visual Studio Build Tools (workload « Développement Desktop en C++ »).

Récupérer la navdata X-Plane (gratuit)

L'outil lit le format texte X-Plane. La donnée par défaut, libre, est fournie avec X-Plane 11/12 dans :

<dossier X-Plane>/Resources/default data/

Fichiers utilisés :

Fichier Contenu
earth_fix.dat Waypoints / fixes
earth_nav.dat Navaids (VOR, DME, NDB, ILS...)
earth_awy.dat Airways (segments entre waypoints)

Copier ces fichiers dans un dossier local, p. ex. ./navdata/ (ignoré par git).

Pour une navdata à jour (cycle AIRAC courant), une souscription Navigraph est possible, mais hors périmètre du MVP : ici on part de la donnée X-Plane gratuite, importée manuellement.

Utilisation

# 1) Importer la navdata en base SQLite locale
flightplanner import-navdata --source ./navdata/ --db flightplanner.db

# 2) Router (FL-aware si --cruise-fl ou profil avion fourni)
flightplanner route --from LFPG --to EGLL --db flightplanner.db

# 3) Route + carburant + pré-check IFPS + exports
flightplanner route --from LFPG --to EGLL --db flightplanner.db \
    --aircraft A320 --cruise-fl 340 \
    --check-ifps --ofp \
    --pln LFPG-EGLL.pln --fms LFPG-EGLL.fms

# Pré-check IFPS d'une chaîne de route arbitraire
flightplanner ifps-check --route "LFPG DCT PON UT300 ... MODMI DCT EGLL" --fl 340 --db flightplanner.db

Aéroports : les coordonnées viennent des seuils de piste des fichiers CIFP/<ICAO>.dat. Pour router au-delà de la paire testée, extraire tout le dossier CIFP/ de l'archive navdata dans ./navdata/CIFP/ avant l'import.

Check IFPS : le --check-ifps est un pré-check local best-effort (non officiel). Un vrai check IFPS fiable nécessite un validateur online (Autorouter / Eurocontrol NM) — voir IDEAS.md.

Développement

cargo build
cargo test
cargo fmt && cargo clippy

Licence

MIT OR Apache-2.0. La navdata X-Plane est soumise à sa propre licence et n'est pas redistribuée dans ce dépôt.

S
Description
Offline flight planner in Rust: clean-room PFPX replacement (route generation, IFPS validation, OFP). Official ICAO/EUROCONTROL data only.
Readme 5.3 MiB
Languages
Rust 78.3%
TypeScript 13.5%
JavaScript 4.4%
CSS 3.7%