Eclipse SUMO - Simulation of Urban MObility
NBAlgorithms_Railway.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2012-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
15 // Algorithms for railways
16 /****************************************************************************/
17 #ifndef NBAlgorithms_Railway_h
18 #define NBAlgorithms_Railway_h
19 
20 
21 // ===========================================================================
22 // included modules
23 // ===========================================================================
24 #include <config.h>
25 
26 #include <vector>
27 #include "NBEdge.h"
28 
29 
30 // ===========================================================================
31 // class declarations
32 // ===========================================================================
33 class NBNetBuilder;
34 class OptionsCont;
35 class NBVehicle;
36 
37 
38 // ===========================================================================
39 // class definitions
40 // ===========================================================================
41 // ---------------------------------------------------------------------------
42 // NBAlgorithms_Railway
43 // ---------------------------------------------------------------------------
44 /* @class NBRampsComputer
45  * @brief Computes highway on-/off-ramps (if wished)
46  */
48 public:
53  static void analyzeTopology(NBNetBuilder& nb);
54  static void repairTopology(NBNetBuilder& nb);
55  static void makeAllBidi(NBNetBuilder& nb);
56 
58  class Track {
59  public:
60  Track(NBEdge* e, int i = -1, const std::string& _id = "") :
61  edge(e),
62  index(i < 0 ? edge->getNumericalID() : i),
63  id(_id == "" ? edge->getID() : _id),
64  minPermissions(edge->getPermissions()) {
65  }
66 
67  void addSuccessor(Track* track);
68  const std::vector<Track*>& getSuccessors(SUMOVehicleClass svc = SVC_IGNORING) const;
69  const std::vector<std::pair<const Track*, const Track*> >& getViaSuccessors(SUMOVehicleClass svc = SVC_IGNORING) const;
70 
71  const std::string& getID() const {
72  return id;
73  }
74  int getNumericalID() const {
75  return index;
76  }
77  double getLength() const {
78  return 0.;
79  }
80  bool isInternal() const {
81  return false;
82  }
83  inline bool prohibits(const NBVehicle* const /*veh*/) const {
84  return false;
85  }
86  inline bool restricts(const NBVehicle* const /*veh*/) const {
87  return false;
88  }
89 
91 
92  private:
93  const int index;
94  const std::string id;
95  std::vector<Track*> successors;
96  std::vector<std::pair<const Track*, const Track*> > viaSuccessors;
98  mutable std::map<SUMOVehicleClass, std::vector<Track*> > svcSuccessors;
99  mutable std::map<SUMOVehicleClass, std::vector<std::pair<const Track*, const Track*> > > svcViaSuccessors;
100 
101  Track& operator=(const Track&) = delete;
102  };
103  static double getTravelTimeStatic(const Track* const track, const NBVehicle* const veh, double time);
104 
105 private:
106  static std::set<NBNode*> getRailNodes(NBNetBuilder& nb, bool verbose = false);
107  static std::set<NBNode*> getBrokenRailNodes(NBNetBuilder& nb, bool verbose = false);
108 
110  static void getRailEdges(const NBNode* node, EdgeVector& inEdges, EdgeVector& outEdges);
111 
112  static bool isStraight(const NBNode* node, const NBEdge* e1, const NBEdge* e2);
113  static bool hasStraightPair(const NBNode* node, const EdgeVector& edges, const EdgeVector& edges2);
114  static bool allBroken(const NBNode* node, NBEdge* candOut, const EdgeVector& in, const EdgeVector& out);
115  static bool allSharp(const NBNode* node, const EdgeVector& in, const EdgeVector& out, bool countBidiAsSharp = false);
116  static bool allBidi(const EdgeVector& edges);
117  static NBEdge* isBidiSwitch(const NBNode* n);
118 
120  static NBEdge* addBidiEdge(NBNetBuilder& nb, NBEdge* edge, bool update = true);
121 
123  static int extendBidiEdges(NBNetBuilder& nb);
124  static int extendBidiEdges(NBNetBuilder& nb, NBNode* node, NBEdge* bidiIn);
125 
127  static void reverseEdges(NBNetBuilder& nb);
128 
130  static void addBidiEdgesForBufferStops(NBNetBuilder& nb);
131 
133  static void addBidiEdgesBetweenSwitches(NBNetBuilder& nb);
134 
136  static void addBidiEdgesForStops(NBNetBuilder& nb);
137 
139  static void addBidiEdgesForStraightConnectivity(NBNetBuilder& nb, bool geometryLike);
140 
142  static void updateTurns(NBEdge* edge);
143 
144 };
145 
146 
147 #endif
148 
149 /****************************************************************************/
150 
SUMOVehicleClass
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
Definition: SUMOVehicleClass.h:133
NBRailwayTopologyAnalyzer::Track
routing edge
Definition: NBAlgorithms_Railway.h:58
NBRailwayTopologyAnalyzer::makeAllBidi
static void makeAllBidi(NBNetBuilder &nb)
Definition: NBAlgorithms_Railway.cpp:125
NBRailwayTopologyAnalyzer::Track::prohibits
bool prohibits(const NBVehicle *const) const
Definition: NBAlgorithms_Railway.h:83
NBNetBuilder
Instance responsible for building networks.
Definition: NBNetBuilder.h:109
NBRailwayTopologyAnalyzer::isStraight
static bool isStraight(const NBNode *node, const NBEdge *e1, const NBEdge *e2)
Definition: NBAlgorithms_Railway.cpp:378
NBRailwayTopologyAnalyzer::Track::getViaSuccessors
const std::vector< std::pair< const Track *, const Track * > > & getViaSuccessors(SUMOVehicleClass svc=SVC_IGNORING) const
Definition: NBAlgorithms_Railway.cpp:84
EdgeVector
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
Definition: NBCont.h:34
NBRailwayTopologyAnalyzer::Track::viaSuccessors
std::vector< std::pair< const Track *, const Track * > > viaSuccessors
Definition: NBAlgorithms_Railway.h:96
NBRailwayTopologyAnalyzer::addBidiEdgesForBufferStops
static void addBidiEdgesForBufferStops(NBNetBuilder &nb)
add bidi-edges to connect buffers stops in both directions
Definition: NBAlgorithms_Railway.cpp:646
NBRailwayTopologyAnalyzer::Track::getID
const std::string & getID() const
Definition: NBAlgorithms_Railway.h:71
NBRailwayTopologyAnalyzer::updateTurns
static void updateTurns(NBEdge *edge)
recompute turning directions for both nodes of the given edge
Definition: NBAlgorithms_Railway.cpp:1055
NBRailwayTopologyAnalyzer::getRailEdges
static void getRailEdges(const NBNode *node, EdgeVector &inEdges, EdgeVector &outEdges)
filter out rail edges among all edges of a the given node
Definition: NBAlgorithms_Railway.cpp:179
NBRailwayTopologyAnalyzer::Track::edge
NBEdge * edge
Definition: NBAlgorithms_Railway.h:90
NBEdge
The representation of a single edge during network building.
Definition: NBEdge.h:91
NBRailwayTopologyAnalyzer::Track::operator=
Track & operator=(const Track &)=delete
NBRailwayTopologyAnalyzer::Track::svcViaSuccessors
std::map< SUMOVehicleClass, std::vector< std::pair< const Track *, const Track * > > > svcViaSuccessors
Definition: NBAlgorithms_Railway.h:99
NBRailwayTopologyAnalyzer::addBidiEdge
static NBEdge * addBidiEdge(NBNetBuilder &nb, NBEdge *edge, bool update=true)
add bidi-edge for the given edge
Definition: NBAlgorithms_Railway.cpp:156
NBRailwayTopologyAnalyzer::Track::getNumericalID
int getNumericalID() const
Definition: NBAlgorithms_Railway.h:74
NBRailwayTopologyAnalyzer::extendBidiEdges
static int extendBidiEdges(NBNetBuilder &nb)
add further bidi-edges near existing bidi-edges
Definition: NBAlgorithms_Railway.cpp:478
NBRailwayTopologyAnalyzer::hasStraightPair
static bool hasStraightPair(const NBNode *node, const EdgeVector &edges, const EdgeVector &edges2)
Definition: NBAlgorithms_Railway.cpp:401
NBRailwayTopologyAnalyzer::Track::minPermissions
SVCPermissions minPermissions
Definition: NBAlgorithms_Railway.h:97
SVCPermissions
int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
Definition: SUMOVehicleClass.h:218
NBRailwayTopologyAnalyzer::Track::Track
Track(NBEdge *e, int i=-1, const std::string &_id="")
Definition: NBAlgorithms_Railway.h:60
NBRailwayTopologyAnalyzer::Track::restricts
bool restricts(const NBVehicle *const) const
Definition: NBAlgorithms_Railway.h:86
NBRailwayTopologyAnalyzer
Definition: NBAlgorithms_Railway.h:47
NBRailwayTopologyAnalyzer::repairTopology
static void repairTopology(NBNetBuilder &nb)
Definition: NBAlgorithms_Railway.cpp:110
update
NBRailwayTopologyAnalyzer::Track::isInternal
bool isInternal() const
Definition: NBAlgorithms_Railway.h:80
NBVehicle
A vehicle as used by router.
Definition: NBVehicle.h:43
OptionsCont
A storage for options typed value containers)
Definition: OptionsCont.h:89
NBRailwayTopologyAnalyzer::Track::index
const int index
Definition: NBAlgorithms_Railway.h:93
NBRailwayTopologyAnalyzer::getRailNodes
static std::set< NBNode * > getRailNodes(NBNetBuilder &nb, bool verbose=false)
Definition: NBAlgorithms_Railway.cpp:351
NBRailwayTopologyAnalyzer::getTravelTimeStatic
static double getTravelTimeStatic(const Track *const track, const NBVehicle *const veh, double time)
Definition: NBAlgorithms_Railway.cpp:1062
NBRailwayTopologyAnalyzer::Track::svcSuccessors
std::map< SUMOVehicleClass, std::vector< Track * > > svcSuccessors
Definition: NBAlgorithms_Railway.h:98
NBRailwayTopologyAnalyzer::Track::getLength
double getLength() const
Definition: NBAlgorithms_Railway.h:77
NBRailwayTopologyAnalyzer::Track::addSuccessor
void addSuccessor(Track *track)
Definition: NBAlgorithms_Railway.cpp:59
NBRailwayTopologyAnalyzer::addBidiEdgesForStops
static void addBidiEdgesForStops(NBNetBuilder &nb)
add bidi-edges to connect successive public transport stops
Definition: NBAlgorithms_Railway.cpp:798
NBRailwayTopologyAnalyzer::Track::getSuccessors
const std::vector< Track * > & getSuccessors(SUMOVehicleClass svc=SVC_IGNORING) const
Definition: NBAlgorithms_Railway.cpp:66
NBRailwayTopologyAnalyzer::analyzeTopology
static void analyzeTopology(NBNetBuilder &nb)
Computes highway on-/off-ramps (if wished)
Definition: NBAlgorithms_Railway.cpp:104
NBRailwayTopologyAnalyzer::Track::id
const std::string id
Definition: NBAlgorithms_Railway.h:94
NBRailwayTopologyAnalyzer::addBidiEdgesBetweenSwitches
static void addBidiEdgesBetweenSwitches(NBNetBuilder &nb)
add bidi-edges to connect switches that are approached in both directions
Definition: NBAlgorithms_Railway.cpp:739
config.h
NBRailwayTopologyAnalyzer::allSharp
static bool allSharp(const NBNode *node, const EdgeVector &in, const EdgeVector &out, bool countBidiAsSharp=false)
Definition: NBAlgorithms_Railway.cpp:449
NBRailwayTopologyAnalyzer::allBroken
static bool allBroken(const NBNode *node, NBEdge *candOut, const EdgeVector &in, const EdgeVector &out)
Definition: NBAlgorithms_Railway.cpp:427
NBRailwayTopologyAnalyzer::Track::successors
std::vector< Track * > successors
Definition: NBAlgorithms_Railway.h:95
NBRailwayTopologyAnalyzer::getBrokenRailNodes
static std::set< NBNode * > getBrokenRailNodes(NBNetBuilder &nb, bool verbose=false)
Definition: NBAlgorithms_Railway.cpp:196
NBNode
Represents a single node (junction) during network building.
Definition: NBNode.h:67
NBRailwayTopologyAnalyzer::reverseEdges
static void reverseEdges(NBNetBuilder &nb)
reverse edges sequences that are to broken nodes on both sides
Definition: NBAlgorithms_Railway.cpp:538
NBRailwayTopologyAnalyzer::isBidiSwitch
static NBEdge * isBidiSwitch(const NBNode *n)
Definition: NBAlgorithms_Railway.cpp:717
SVC_IGNORING
@ SVC_IGNORING
vehicles ignoring classes
Definition: SUMOVehicleClass.h:135
NBRailwayTopologyAnalyzer::addBidiEdgesForStraightConnectivity
static void addBidiEdgesForStraightConnectivity(NBNetBuilder &nb, bool geometryLike)
add bidi-edges to connect straight tracks
Definition: NBAlgorithms_Railway.cpp:971
NBRailwayTopologyAnalyzer::allBidi
static bool allBidi(const EdgeVector &edges)
Definition: NBAlgorithms_Railway.cpp:467
NBEdge.h