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 Phase2_GeometricIntersector

#include <Phase2_GeometricIntersector.h>

Graphe de collaboration de Phase2_GeometricIntersector:

Fonctions membres publiques

 Phase2_GeometricIntersector ()=delete
 

Fonctions membres publiques statiques

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

Fonctions membres privées statiques

static double computeCellSize (const PipelineContext &ctx)
 Calcule la taille de cellule optimale pour la grille.
 
static SpatialGrid buildGrid (const PipelineContext &ctx, double cellSize, Logger &logger)
 Construit la grille spatiale depuis le RawNetwork.
 
static size_t globalSegmentIndex (const PipelineContext &ctx, size_t polyIdx, size_t pointIdx)
 Calcule l'indice global d'un segment dans le réseau.
 
static std::optional< std::pair< double, double > > intersect (const CoordinateXY &A, const CoordinateXY &B, const CoordinateXY &C, const CoordinateXY &D, double epsilon)
 Teste l'intersection entre deux segments UTM.
 
static bool areAdjacent (const SegmentId &s1, const SegmentId &s2)
 Vérifie si deux segments sont adjacents (partagent une extrémité).
 

Documentation des constructeurs et destructeur

◆ Phase2_GeometricIntersector()

Phase2_GeometricIntersector::Phase2_GeometricIntersector ( )
delete

Documentation des fonctions membres

◆ areAdjacent()

bool Phase2_GeometricIntersector::areAdjacent ( const SegmentId s1,
const SegmentId s2 
)
staticprivate

Vérifie si deux segments sont adjacents (partagent une extrémité).

Les segments adjacents d'une même polyligne ne sont pas testés — ils partagent un point par construction et génèreraient de faux positifs.

Paramètres
s1Premier segment.
s2Second segment.
Renvoie
true si les segments sont adjacents (même polyligne, indices consécutifs).

◆ buildGrid()

SpatialGrid Phase2_GeometricIntersector::buildGrid ( const PipelineContext ctx,
double  cellSize,
Logger logger 
)
staticprivate

Construit la grille spatiale depuis le RawNetwork.

Chaque segment est inséré dans toutes les cellules de sa bounding box.

Paramètres
ctxContexte pipeline.
cellSizeTaille de cellule en mètres UTM.
loggerRéférence au logger GeoParser.
Renvoie
Grille spatiale peuplée.

◆ computeCellSize()

double Phase2_GeometricIntersector::computeCellSize ( const PipelineContext ctx)
staticprivate

Calcule la taille de cellule optimale pour la grille.

Basée sur la longueur moyenne des segments × 2. Garantit un minimum de 50 m pour éviter les cellules trop petites.

Paramètres
ctxContexte pipeline contenant rawNetwork.
Renvoie
Taille de cellule en mètres UTM.

◆ globalSegmentIndex()

size_t Phase2_GeometricIntersector::globalSegmentIndex ( const PipelineContext ctx,
size_t  polyIdx,
size_t  pointIdx 
)
staticprivate

Calcule l'indice global d'un segment dans le réseau.

Index unique = somme des (taille-1) des polylignes précédentes + pointIndex.

Paramètres
ctxContexte pipeline.
polyIdxIndice de la polyligne.
pointIdxIndice du premier point du segment.
Renvoie
Index global du segment.

◆ intersect()

std::optional< std::pair< double, double > > Phase2_GeometricIntersector::intersect ( const CoordinateXY A,
const CoordinateXY B,
const CoordinateXY C,
const CoordinateXY D,
double  epsilon 
)
staticprivate

Teste l'intersection entre deux segments UTM.

Algorithme de Cramer — résout le système linéaire 2×2. Retourne les paramètres t et u si l'intersection est valide.

Paramètres
APremier point du segment source.
BSecond point du segment source.
CPremier point du segment croisé.
DSecond point du segment croisé.
epsilonTolérance en mètres UTM.
Renvoie
Paire (t, u) si intersection valide, std::nullopt sinon. t = position relative sur AB, u = position relative sur CD.

◆ run()

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

Exécute la phase 2.

Construit la grille spatiale depuis ctx.rawNetwork, puis teste chaque paire de segments candidats via l'algorithme de Cramer. Écrit le résultat dans ctx.intersections.

Paramètres
ctxContexte pipeline. Lit rawNetwork, écrit intersections.
configConfiguration — utilise intersectionEpsilon.
loggerRéférence au logger GeoParser.

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