Simulateur Ferroviaire
Reconstruction et visualisation d'un réseau ferroviaire à partir de données GeoJSON — Win32 / WebView2 / Leaflet
Chargement...
Recherche...
Aucune correspondance
Référence de la classe Phase7_SwitchProcessor

#include <Phase7_SwitchProcessor.h>

Graphe de collaboration de Phase7_SwitchProcessor:

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 StraightBlockfindLinkSegment (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.
 

Documentation des constructeurs et destructeur

◆ Phase7_SwitchProcessor()

Phase7_SwitchProcessor::Phase7_SwitchProcessor ( )
delete

Documentation des fonctions membres

◆ absorbLinkSegment()

void Phase7_SwitchProcessor::absorbLinkSegment ( BlockSet blocks,
SwitchBlock swA,
SwitchBlock swB,
Logger logger 
)
staticprivate

B — Absorbe le segment de liaison d'un cluster.

◆ branchVector()

CoordinateXY Phase7_SwitchProcessor::branchVector ( const SwitchBlock sw,
const ShuntingElement elem 
)
staticprivate

Calcule le vecteur UTM unitaire de la jonction vers une branche.

Paramètres
swSwitch source.
elemBloc de la branche.
Renvoie
Vecteur unitaire UTM. {0,0} si indéterminé.

◆ computeTips()

void Phase7_SwitchProcessor::computeTips ( BlockSet blocks,
double  sideSize,
Logger logger 
)
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.

Paramètres
blocksEnsemble des blocs.
sideSizeDistance tip depuis la jonction (mètres Haversine).
loggerRéférence au logger.

◆ detectClusters()

std::vector< std::pair< SwitchBlock *, SwitchBlock * > > Phase7_SwitchProcessor::detectClusters ( const BlockSet blocks,
double  radius,
Logger logger 
)
staticprivate

A — Détecte les paires de switches formant un double switch.

◆ detectCrossovers()

std::vector< std::pair< SwitchBlock *, SwitchBlock * > > Phase7_SwitchProcessor::detectCrossovers ( const BlockSet blocks,
Logger logger 
)
staticprivate

D — Détecte les paires de switches en crossover.

◆ enforceCrossoverConsistency()

void Phase7_SwitchProcessor::enforceCrossoverConsistency ( BlockSet blocks,
const std::vector< std::pair< SwitchBlock *, SwitchBlock * > > &  crossovers,
Logger logger 
)
staticprivate

E — Force la cohérence des crossovers (branches partagées → DEVIATION).

◆ findLinkSegment()

StraightBlock * Phase7_SwitchProcessor::findLinkSegment ( const BlockSet blocks,
const SwitchBlock swA,
const SwitchBlock swB 
)
staticprivate

B — Trouve le StraightBlock de liaison entre deux switches.

◆ interpolateTip()

CoordinateLatLon Phase7_SwitchProcessor::interpolateTip ( const std::vector< CoordinateLatLon > &  pts,
const CoordinateLatLon junction,
double  targetDist 
)
staticprivate

Interpole un point WGS84 sur une polyligne à targetDist mètres depuis l'extrémité la plus proche de junction.

Paramètres
ptsPolyligne WGS84 du StraightBlock.
junctionPosition de la jonction — détermine le sens de parcours.
targetDistDistance cible en mètres.
Renvoie
Point WGS84 interpolé, ou extrémité distale si branche trop courte.

◆ interpolateTipUTM()

CoordinateXY Phase7_SwitchProcessor::interpolateTipUTM ( const std::vector< CoordinateXY > &  pts,
const CoordinateXY junctionUTM,
double  targetDist 
)
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.

Paramètres
ptsPolyligne UTM du StraightBlock.
junctionUTMPosition de la jonction en UTM.
targetDistDistance cible en mètres UTM.
Renvoie
Point UTM interpolé, ou extrémité distale si branche trop courte.

◆ orientBranches()

void Phase7_SwitchProcessor::orientBranches ( BlockSet blocks,
Logger logger 
)
staticprivate

G — Oriente les 3 branches de chaque switch par heuristique géométrique.

Algorithme :

  1. Pour chaque switch, calcule les 3 vecteurs UTM (jonction → premier point).
  2. Root = branche dont le vecteur est le plus opposé à la résultante normalisée des deux autres (dot product minimal).
  3. Normal = des deux restantes, celle dont l'angle avec root est le plus proche de 180° (continuation directe de la voie principale).
  4. Deviation = la troisième (branche déviée).
Paramètres
blocksEnsemble des blocs.
loggerRéférence au logger.

◆ run()

void Phase7_SwitchProcessor::run ( PipelineContext ctx,
const ParserConfig config,
Logger logger 
)
static

Exécute le traitement complet des aiguillages.

Enchaîne G → A → B → C → D → E → F.

Paramètres
ctxContexte pipeline. Lit et modifie ctx.blocks.
configConfiguration — utilise doubleSwitchRadius, minBranchLength, switchSideSize.
loggerRéférence au logger GeoParser.

◆ validateCDC()

void Phase7_SwitchProcessor::validateCDC ( const BlockSet blocks,
double  minLength,
Logger logger 
)
staticprivate

C — Valide les longueurs de branches selon les critères CDC.


La documentation de cette classe a été générée à partir des fichiers suivants :