|
Simulateur Ferroviaire
Reconstruction et visualisation d'un réseau ferroviaire à partir de données GeoJSON — Win32 / WebView2 / Leaflet
|
#include <Phase7_SwitchProcessor.h>
Fonctions membres publiques | |
| Phase7_SwitchProcessor ()=delete | |
Fonctions membres publiques statiques | |
| static void | run (PipelineContext &ctx, const ParserConfig &config, Logger &logger) |
| Exécute le traitement complet des aiguillages. | |
Fonctions membres privées statiques | |
| static std::vector< std::pair< SwitchBlock *, SwitchBlock * > > | detectClusters (const BlockSet &blocks, double radius, Logger &logger) |
| A — Détecte les paires de switches formant un double switch. | |
| static StraightBlock * | findLinkSegment (const BlockSet &blocks, const SwitchBlock *swA, const SwitchBlock *swB) |
| B — Trouve le StraightBlock de liaison entre deux switches. | |
| static void | absorbLinkSegment (BlockSet &blocks, SwitchBlock *swA, SwitchBlock *swB, Logger &logger) |
| B — Absorbe le segment de liaison d'un cluster. | |
| static void | validateCDC (const BlockSet &blocks, double minLength, Logger &logger) |
| C — Valide les longueurs de branches selon les critères CDC. | |
| static std::vector< std::pair< SwitchBlock *, SwitchBlock * > > | detectCrossovers (const BlockSet &blocks, Logger &logger) |
| D — Détecte les paires de switches en crossover. | |
| static void | enforceCrossoverConsistency (BlockSet &blocks, const std::vector< std::pair< SwitchBlock *, SwitchBlock * > > &crossovers, Logger &logger) |
| E — Force la cohérence des crossovers (branches partagées → DEVIATION). | |
| static void | orientBranches (BlockSet &blocks, Logger &logger) |
| G — Oriente les 3 branches de chaque switch par heuristique géométrique. | |
| static CoordinateXY | branchVector (const SwitchBlock &sw, const ShuntingElement *elem) |
| Calcule le vecteur UTM unitaire de la jonction vers une branche. | |
| static void | computeTips (BlockSet &blocks, double sideSize, Logger &logger) |
| F — Calcule les tips CDC des 3 branches de chaque switch. | |
| static CoordinateLatLon | interpolateTip (const std::vector< CoordinateLatLon > &pts, const CoordinateLatLon &junction, double targetDist) |
Interpole un point WGS84 sur une polyligne à targetDist mètres depuis l'extrémité la plus proche de junction. | |
| static CoordinateXY | interpolateTipUTM (const std::vector< CoordinateXY > &pts, const CoordinateXY &junctionUTM, double targetDist) |
Interpole un point UTM sur une polyligne à targetDist mètres depuis l'extrémité la plus proche de junctionUTM. | |
|
delete |
|
staticprivate |
B — Absorbe le segment de liaison d'un cluster.
|
staticprivate |
Calcule le vecteur UTM unitaire de la jonction vers une branche.
| sw | Switch source. |
| elem | Bloc de la branche. |
|
staticprivate |
F — Calcule les tips CDC des 3 branches de chaque switch.
Interpole le long de la géométrie WGS84 de chaque branche à config.switchSideSize mètres depuis la jonction.
| blocks | Ensemble des blocs. |
| sideSize | Distance tip depuis la jonction (mètres Haversine). |
| logger | Référence au logger. |
|
staticprivate |
A — Détecte les paires de switches formant un double switch.
|
staticprivate |
D — Détecte les paires de switches en crossover.
|
staticprivate |
E — Force la cohérence des crossovers (branches partagées → DEVIATION).
|
staticprivate |
B — Trouve le StraightBlock de liaison entre deux switches.
|
staticprivate |
Interpole un point WGS84 sur une polyligne à targetDist mètres depuis l'extrémité la plus proche de junction.
| pts | Polyligne WGS84 du StraightBlock. |
| junction | Position de la jonction — détermine le sens de parcours. |
| targetDist | Distance cible en mètres. |
|
staticprivate |
Interpole un point UTM sur une polyligne à targetDist mètres depuis l'extrémité la plus proche de junctionUTM.
Utilise la distance euclidienne (std::hypot) — pas de Haversine. Même logique que interpolateTip() mais sur CoordinateXY.
| pts | Polyligne UTM du StraightBlock. |
| junctionUTM | Position de la jonction en UTM. |
| targetDist | Distance cible en mètres UTM. |
G — Oriente les 3 branches de chaque switch par heuristique géométrique.
Algorithme :
| blocks | Ensemble des blocs. |
| logger | Référence au logger. |
|
static |
Exécute le traitement complet des aiguillages.
Enchaîne G → A → B → C → D → E → F.
| ctx | Contexte pipeline. Lit et modifie ctx.blocks. |
| config | Configuration — utilise doubleSwitchRadius, minBranchLength, switchSideSize. |
| logger | Référence au logger GeoParser. |
|
staticprivate |
C — Valide les longueurs de branches selon les critères CDC.