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 Phase6_BlockExtractor

#include <Phase6_BlockExtractor.h>

Graphe de collaboration de Phase6_BlockExtractor:

Fonctions membres publiques

 Phase6_BlockExtractor ()=delete
 

Fonctions membres publiques statiques

static void run (PipelineContext &ctx, const ParserConfig &config, Logger &logger)
 Exécute la phase 6.
 

Fonctions membres privées statiques

static void extractStraights (PipelineContext &ctx, const ParserConfig &config, Logger &logger)
 Extrait les StraightBlocks par DFS entre nœuds frontières.
 
static void extractSwitches (PipelineContext &ctx, Logger &logger)
 Extrait les SwitchBlocks et résout leurs endpoints.
 
static void registerStraight (PipelineContext &ctx, const std::vector< CoordinateXY > &ptsUTM, const std::vector< CoordinateLatLon > &ptsWGS84, size_t nodeA, size_t nodeB, const std::string &baseId, double maxLen, const BlockEndpoint &epA, const BlockEndpoint &epB)
 Crée un ou plusieurs StraightBlock depuis la géométrie assemblée.
 
static bool isFrontier (const PipelineContext &ctx, size_t nodeId)
 Nœud non-STRAIGHT → frontière.
 
static void appendSegment (std::vector< CoordinateXY > &ptsUTM, std::vector< CoordinateLatLon > &ptsWGS84, const AtomicSegment &seg, bool reversed)
 Ajoute les points d'un AtomicSegment à la géométrie accumulée.
 
static size_t directedKey (size_t from, size_t to)
 Clé directionnelle : from * 1'000'000 + to.
 
static size_t pairKey (size_t idA, size_t idB)
 Clé canonique Cantor(min, max) — indépendante de l'ordre.
 
static double computeLength (const std::vector< CoordinateXY > &pts)
 Calcule la longueur UTM d'une polyligne.
 

Documentation des constructeurs et destructeur

◆ Phase6_BlockExtractor()

Phase6_BlockExtractor::Phase6_BlockExtractor ( )
delete

Documentation des fonctions membres

◆ appendSegment()

void Phase6_BlockExtractor::appendSegment ( std::vector< CoordinateXY > &  ptsUTM,
std::vector< CoordinateLatLon > &  ptsWGS84,
const AtomicSegment seg,
bool  reversed 
)
staticprivate

Ajoute les points d'un AtomicSegment à la géométrie accumulée.

◆ computeLength()

double Phase6_BlockExtractor::computeLength ( const std::vector< CoordinateXY > &  pts)
staticprivate

Calcule la longueur UTM d'une polyligne.

◆ directedKey()

static size_t Phase6_BlockExtractor::directedKey ( size_t  from,
size_t  to 
)
inlinestaticprivate

Clé directionnelle : from * 1'000'000 + to.

Valide pour < 1 000 000 nœuds.

◆ extractStraights()

void Phase6_BlockExtractor::extractStraights ( PipelineContext ctx,
const ParserConfig config,
Logger logger 
)
staticprivate

Extrait les StraightBlocks par DFS entre nœuds frontières.

Déduplication par arêtes (v2)
Un ensemble global usedEdges mémorise l'indice de l'arête de départ et l'arête d'arrivée de chaque straight créé. Cela empêche la traversal inverse (B→A) mais autorise deux straights entre les mêmes frontières via des arêtes distinctes (cas crossover).

Peuple ctx.blocks.straightsByNode, straightByEndpointPair et straightByDirectedPair au passage.

Paramètres
ctxContexte pipeline.
configConfiguration — utilise maxSegmentLength.
loggerRéférence au logger.

◆ extractSwitches()

void Phase6_BlockExtractor::extractSwitches ( PipelineContext ctx,
Logger logger 
)
staticprivate

Extrait les SwitchBlocks et résout leurs endpoints.

Pour chaque branche d'un switch, effectue une traversal des nœuds STRAIGHT jusqu'au prochain nœud frontière, puis résout le StraightBlock adjacent via straightByDirectedPair (multi-valué).

Sélection crossover
Un ensemble usedStraights par switch garantit que deux branches pointant vers le même nœud frontière (crossover) reçoivent des straights distincts — la première branche prend le premier élément du vecteur, la seconde prend le suivant non utilisé.

Doit être appelé APRÈS extractStraights.

Paramètres
ctxContexte pipeline.
loggerRéférence au logger.

◆ isFrontier()

bool Phase6_BlockExtractor::isFrontier ( const PipelineContext ctx,
size_t  nodeId 
)
staticprivate

Nœud non-STRAIGHT → frontière.

◆ pairKey()

static size_t Phase6_BlockExtractor::pairKey ( size_t  idA,
size_t  idB 
)
inlinestaticprivate

Clé canonique Cantor(min, max) — indépendante de l'ordre.

Utilisée uniquement pour straightByEndpointPair.

◆ registerStraight()

void Phase6_BlockExtractor::registerStraight ( PipelineContext ctx,
const std::vector< CoordinateXY > &  ptsUTM,
const std::vector< CoordinateLatLon > &  ptsWGS84,
size_t  nodeA,
size_t  nodeB,
const std::string &  baseId,
double  maxLen,
const BlockEndpoint epA,
const BlockEndpoint epB 
)
staticprivate

Crée un ou plusieurs StraightBlock depuis la géométrie assemblée.

Si totalLength > maxLen, subdivise en N sous-blocs chaînés via prev/next. Seuls les premier et dernier sous-blocs sont enregistrés dans straightByDirectedPair.

Endpoints internes
Les sous-blocs intermédiaires reçoivent des BlockEndpoint avec frontierNodeId = SIZE_MAX et neighbourId vide. Phase8_RepositoryTransfer::resolveStraight ne doit PAS appeler setNeighbourPrev/Next pour ces entrées, afin de préserver la chaîne.
Paramètres
ctxContexte pipeline.
ptsUTMPoints UTM du straight assemblé.
ptsWGS84Points WGS84 du straight assemblé.
nodeANœud frontière de départ.
nodeBNœud frontière d'arrivée.
baseIdIdentifiant de base (ex. "s/0").
maxLenLongueur maximale par sous-bloc (mètres UTM).
epAEndpoint côté A (frontierNodeId = nodeA).
epBEndpoint côté B (frontierNodeId = nodeB).

◆ run()

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

Exécute la phase 6.

Ordre interne : extractStraights → extractSwitches. Les straights doivent exister avant les switches pour que straightByDirectedPair soit disponible lors de la résolution des endpoints de branches. Libère ctx.topoGraph, ctx.classifiedNodes et ctx.splitNetwork en fin d'exécution.

Paramètres
ctxContexte pipeline. Lit topoGraph + classifiedNodes + splitNetwork, écrit blocks. Libère les trois sources.
configConfiguration — utilise maxSegmentLength.
loggerRéférence au logger GeoParser.

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