#include <Phase6_BlockExtractor.h>
|
| 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.
|
| |
◆ Phase6_BlockExtractor()
| Phase6_BlockExtractor::Phase6_BlockExtractor |
( |
| ) |
|
|
delete |
◆ appendSegment()
◆ 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()
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
-
| ctx | Contexte pipeline. |
| config | Configuration — utilise maxSegmentLength. |
| logger | Référence au logger. |
◆ extractSwitches()
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
-
| ctx | Contexte pipeline. |
| logger | Ré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()
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
-
| ctx | Contexte pipeline. |
| ptsUTM | Points UTM du straight assemblé. |
| ptsWGS84 | Points WGS84 du straight assemblé. |
| nodeA | Nœud frontière de départ. |
| nodeB | Nœud frontière d'arrivée. |
| baseId | Identifiant de base (ex. "s/0"). |
| maxLen | Longueur maximale par sous-bloc (mètres UTM). |
| epA | Endpoint côté A (frontierNodeId = nodeA). |
| epB | Endpoint côté B (frontierNodeId = nodeB). |
◆ run()
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
-
| ctx | Contexte pipeline. Lit topoGraph + classifiedNodes + splitNetwork, écrit blocks. Libère les trois sources. |
| config | Configuration — utilise maxSegmentLength. |
| logger | Référence au logger GeoParser. |
La documentation de cette classe a été générée à partir des fichiers suivants :