Eclipse SUMO - Simulation of Urban MObility
IntermodalNetwork< E, L, N, V > Class Template Reference

the intermodal network storing edges, connections and the mappings to the "real" edges More...

#include <IntermodalNetwork.h>

Collaboration diagram for IntermodalNetwork< E, L, N, V >:

Public Types

enum  ModeChangeOptions { PARKING_AREAS = 1, PT_STOPS = 2, ALL_JUNCTIONS = 4 }
 where mode changes are possible More...
 

Public Member Functions

void addAccess (const std::string &stopId, const E *stopEdge, const double pos, const double length, const SumoXMLTag category)
 Adds access edges for stopping places to the intermodal network. More...
 
void addCarEdges (const std::vector< E * > &edges)
 
void addConnectors (_IntermodalEdge *const depConn, _IntermodalEdge *const arrConn, const int index)
 
void addEdge (_IntermodalEdge *edge)
 
void addSchedule (const SUMOVehicleParameter &pars, const std::vector< SUMOVehicleParameter::Stop > *addStops=nullptr)
 
const std::vector< _IntermodalEdge * > & getAllEdges ()
 
_IntermodalEdgegetArrivalConnector (const E *e, const int splitIndex=0) const
 Returns the arriving intermodal connector at the given split offset. More...
 
_IntermodalEdgegetArrivalEdge (const E *e, const double pos) const
 Returns the arriving intermodal edge. More...
 
const EdgePairgetBothDirections (const E *e) const
 Returns the pair of forward and backward edge. More...
 
_IntermodalEdgegetCarEdge (const E *e) const
 Returns the associated car edge. More...
 
_IntermodalEdgegetDepartConnector (const E *e, const int splitIndex=0) const
 Returns the departing intermodal connector at the given split offset. More...
 
const _IntermodalEdgegetDepartEdge (const E *e, const double pos) const
 Returns the departing intermodal edge. More...
 
_IntermodalEdgegetStopEdge (const std::string &stopId) const
 Returns the associated stop edge. More...
 
_IntermodalEdgegetWalkingConnector (const E *e) const
 Returns the outgoing pedestrian edge, which is either a walking area or a walking connector. More...
 
 IntermodalNetwork (const std::vector< E * > &edges, const bool pedestrianOnly, const int carWalkTransfer=0)
 
 ~IntermodalNetwork ()
 

Private Types

typedef AccessEdge< E, L, N, V > _AccessEdge
 
typedef IntermodalEdge< E, L, N, V > _IntermodalEdge
 
typedef PedestrianEdge< E, L, N, V > _PedestrianEdge
 
typedef PublicTransportEdge< E, L, N, V > _PTEdge
 
typedef std::pair< _IntermodalEdge *, _IntermodalEdge * > EdgePair
 

Private Member Functions

int findSplitIndex (_IntermodalEdge *const toSplit, const double pos, double &relPos, bool &needSplit)
 Returns where to insert or use the split edge. More...
 
IntermodalNetworkoperator= (const IntermodalNetwork &s)
 Invalidated assignment operator. More...
 
void splitEdge (_IntermodalEdge *const toSplit, int splitIndex, _IntermodalEdge *afterSplit, const double relPos, const double length, const bool needSplit, _IntermodalEdge *const stopConn, const bool forward=true, const bool addExit=true, const bool addEntry=true)
 Splits an edge (if necessary) and connects it to a stopping edge. More...
 

Private Attributes

std::map< _IntermodalEdge *, std::vector< _IntermodalEdge * > > myAccessSplits
 retrieve the splitted edges for the given "original" More...
 
std::map< const E *, std::vector< _IntermodalEdge * > > myArrivalLookup
 retrieve the arrival edges for the given input edge E More...
 
std::map< const E *, EdgePairmyBidiLookup
 retrieve the forward and backward edge for the given input edge E More...
 
std::map< const E *, _IntermodalEdge * > myCarLookup
 retrieve the car edge for the given input edge E More...
 
const int myCarWalkTransfer
 
std::map< const E *, std::vector< _IntermodalEdge * > > myDepartLookup
 retrieve the depart edges for the given input edge E More...
 
std::vector< _IntermodalEdge * > myEdges
 the edge dictionary More...
 
int myNumericalID
 
std::map< std::string, std::vector< _PTEdge * > > myPTLines
 retrieve the public transport edges for the given line More...
 
std::map< std::string, _IntermodalEdge * > myStopConnections
 retrieve the representing edge for the given stopping place More...
 
std::map< const N *, _IntermodalEdge * > myWalkingConnectorLookup
 the walking connector edge (fake walking area) More...
 

Detailed Description

template<class E, class L, class N, class V>
class IntermodalNetwork< E, L, N, V >

the intermodal network storing edges, connections and the mappings to the "real" edges

Definition at line 76 of file IntermodalNetwork.h.

Member Typedef Documentation

◆ _AccessEdge

template<class E , class L , class N , class V >
typedef AccessEdge<E, L, N, V> IntermodalNetwork< E, L, N, V >::_AccessEdge
private

Definition at line 79 of file IntermodalNetwork.h.

◆ _IntermodalEdge

template<class E , class L , class N , class V >
typedef IntermodalEdge<E, L, N, V> IntermodalNetwork< E, L, N, V >::_IntermodalEdge
private

Definition at line 78 of file IntermodalNetwork.h.

◆ _PedestrianEdge

template<class E , class L , class N , class V >
typedef PedestrianEdge<E, L, N, V> IntermodalNetwork< E, L, N, V >::_PedestrianEdge
private

Definition at line 80 of file IntermodalNetwork.h.

◆ _PTEdge

template<class E , class L , class N , class V >
typedef PublicTransportEdge<E, L, N, V> IntermodalNetwork< E, L, N, V >::_PTEdge
private

Definition at line 81 of file IntermodalNetwork.h.

◆ EdgePair

template<class E , class L , class N , class V >
typedef std::pair<_IntermodalEdge*, _IntermodalEdge*> IntermodalNetwork< E, L, N, V >::EdgePair
private

Definition at line 82 of file IntermodalNetwork.h.

Member Enumeration Documentation

◆ ModeChangeOptions

template<class E , class L , class N , class V >
enum IntermodalNetwork::ModeChangeOptions

where mode changes are possible

Enumerator
PARKING_AREAS 

parking areas

PT_STOPS 

public transport stops and access

ALL_JUNCTIONS 

junctions with edges allowing the additional mode

Definition at line 87 of file IntermodalNetwork.h.

Constructor & Destructor Documentation

◆ IntermodalNetwork()

◆ ~IntermodalNetwork()

template<class E , class L , class N , class V >
IntermodalNetwork< E, L, N, V >::~IntermodalNetwork ( )
inline

Definition at line 260 of file IntermodalNetwork.h.

References IntermodalNetwork< E, L, N, V >::myEdges.

Member Function Documentation

◆ addAccess()

template<class E , class L , class N , class V >
void IntermodalNetwork< E, L, N, V >::addAccess ( const std::string &  stopId,
const E *  stopEdge,
const double  pos,
const double  length,
const SumoXMLTag  category 
)
inline

Adds access edges for stopping places to the intermodal network.

This method creates an intermodal stop edge to represent the stopping place (if not present yet) and determines the edges which need to be splitted (usually the forward and the backward pedestrian edges and the car edge) and calls splitEdge for the actual split and the connection of the stop edge with access edges. After that it adds and adapts the depart and arrival connectors to the new edge(s).

Parameters
[in]stopIdThe id of the stop to add
[in]stopEdgeThe edge on which the stop is located
[in]posThe relative position on the edge where the stop is located
[in]categoryThe type of stop

Definition at line 455 of file IntermodalNetwork.h.

References IntermodalNetwork< E, L, N, V >::addConnectors(), IntermodalNetwork< E, L, N, V >::addEdge(), IntermodalEdge< E, L, N, V >::addSuccessor(), IntermodalNetwork< E, L, N, V >::findSplitIndex(), IntermodalNetwork< E, L, N, V >::getArrivalConnector(), IntermodalNetwork< E, L, N, V >::getBothDirections(), IntermodalNetwork< E, L, N, V >::getDepartConnector(), IntermodalEdge< E, L, N, V >::getLength(), IntermodalNetwork< E, L, N, V >::myAccessSplits, IntermodalNetwork< E, L, N, V >::myCarLookup, IntermodalNetwork< E, L, N, V >::myCarWalkTransfer, IntermodalNetwork< E, L, N, V >::myDepartLookup, IntermodalNetwork< E, L, N, V >::myNumericalID, IntermodalNetwork< E, L, N, V >::myStopConnections, IntermodalNetwork< E, L, N, V >::PARKING_AREAS, IntermodalNetwork< E, L, N, V >::PT_STOPS, IntermodalEdge< E, L, N, V >::removeSuccessor(), IntermodalEdge< E, L, N, V >::setLength(), IntermodalNetwork< E, L, N, V >::splitEdge(), SUMO_TAG_BUS_STOP, SUMO_TAG_PARKING_AREA, and toString().

Referenced by MSNet::adaptIntermodalRouter(), and RONet::adaptIntermodalRouter().

◆ addCarEdges()

◆ addConnectors()

template<class E , class L , class N , class V >
void IntermodalNetwork< E, L, N, V >::addConnectors ( _IntermodalEdge *const  depConn,
_IntermodalEdge *const  arrConn,
const int  index 
)
inline

◆ addEdge()

◆ addSchedule()

◆ findSplitIndex()

template<class E , class L , class N , class V >
int IntermodalNetwork< E, L, N, V >::findSplitIndex ( _IntermodalEdge *const  toSplit,
const double  pos,
double &  relPos,
bool &  needSplit 
)
inlineprivate

Returns where to insert or use the split edge.

This method determines whether an edge needs to be split at the given position (if there is not already a split nearby) and returns the corresponding index in the split list.

Parameters
[in]toSplitThe first edge in the split list
[in]posThe relative position on the edge where the stop is located
[out]relPosThe relative position on the splitted edge
[out]needSplitwhether a new split is needed or we reuse an exisiting one
Returns
the index in the split list where the split edge needs to be added or reused

Definition at line 644 of file IntermodalNetwork.h.

References IntermodalNetwork< E, L, N, V >::myAccessSplits, POSITION_EPS, and split().

Referenced by IntermodalNetwork< E, L, N, V >::addAccess().

◆ getAllEdges()

◆ getArrivalConnector()

template<class E , class L , class N , class V >
_IntermodalEdge* IntermodalNetwork< E, L, N, V >::getArrivalConnector ( const E *  e,
const int  splitIndex = 0 
) const
inline

◆ getArrivalEdge()

template<class E , class L , class N , class V >
_IntermodalEdge* IntermodalNetwork< E, L, N, V >::getArrivalEdge ( const E *  e,
const double  pos 
) const
inline

Returns the arriving intermodal edge.

Definition at line 347 of file IntermodalNetwork.h.

References IntermodalNetwork< E, L, N, V >::myArrivalLookup.

Referenced by IntermodalRouter< E, L, N, V >::compute().

◆ getBothDirections()

◆ getCarEdge()

template<class E , class L , class N , class V >
_IntermodalEdge* IntermodalNetwork< E, L, N, V >::getCarEdge ( const E *  e) const
inline

◆ getDepartConnector()

template<class E , class L , class N , class V >
_IntermodalEdge* IntermodalNetwork< E, L, N, V >::getDepartConnector ( const E *  e,
const int  splitIndex = 0 
) const
inline

◆ getDepartEdge()

template<class E , class L , class N , class V >
const _IntermodalEdge* IntermodalNetwork< E, L, N, V >::getDepartEdge ( const E *  e,
const double  pos 
) const
inline

◆ getStopEdge()

template<class E , class L , class N , class V >
_IntermodalEdge* IntermodalNetwork< E, L, N, V >::getStopEdge ( const std::string &  stopId) const
inline

Returns the associated stop edge.

Definition at line 434 of file IntermodalNetwork.h.

References IntermodalNetwork< E, L, N, V >::myStopConnections.

Referenced by MSNet::adaptIntermodalRouter(), and IntermodalRouter< E, L, N, V >::compute().

◆ getWalkingConnector()

template<class E , class L , class N , class V >
_IntermodalEdge* IntermodalNetwork< E, L, N, V >::getWalkingConnector ( const E *  e) const
inline

Returns the outgoing pedestrian edge, which is either a walking area or a walking connector.

Definition at line 368 of file IntermodalNetwork.h.

References IntermodalNetwork< E, L, N, V >::getBothDirections(), and IntermodalNetwork< E, L, N, V >::myWalkingConnectorLookup.

Referenced by IntermodalNetwork< E, L, N, V >::addCarEdges().

◆ operator=()

template<class E , class L , class N , class V >
IntermodalNetwork& IntermodalNetwork< E, L, N, V >::operator= ( const IntermodalNetwork< E, L, N, V > &  s)
private

Invalidated assignment operator.

◆ splitEdge()

template<class E , class L , class N , class V >
void IntermodalNetwork< E, L, N, V >::splitEdge ( _IntermodalEdge *const  toSplit,
int  splitIndex,
_IntermodalEdge afterSplit,
const double  relPos,
const double  length,
const bool  needSplit,
_IntermodalEdge *const  stopConn,
const bool  forward = true,
const bool  addExit = true,
const bool  addEntry = true 
)
inlineprivate

Splits an edge (if necessary) and connects it to a stopping edge.

This method determines whether an edge needs to be split at the given position (if there is not already a split nearby) and connects the stop edge via new access edges.

Parameters
[in]toSplitThe first edge in the split list
[in]afterSplitThe edge to add if a split is performed
[in]posThe relative position on the edge where the stop is located
[in]stopConnThe stop edge to connect to
[in]forwardwhether we are aplitting a forward edge (backward edges get different names)
[in]addExitwhether we can just enter the stop or exit as well (cars should not exit yet)

Definition at line 677 of file IntermodalNetwork.h.

References IntermodalNetwork< E, L, N, V >::addEdge(), IntermodalEdge< E, L, N, V >::addSuccessor(), Named::getID(), IntermodalEdge< E, L, N, V >::getLength(), IntermodalNetwork< E, L, N, V >::myAccessSplits, IntermodalNetwork< E, L, N, V >::myNumericalID, Named::setID(), IntermodalEdge< E, L, N, V >::setLength(), and IntermodalEdge< E, L, N, V >::transferSuccessors().

Referenced by IntermodalNetwork< E, L, N, V >::addAccess().

Field Documentation

◆ myAccessSplits

template<class E , class L , class N , class V >
std::map<_IntermodalEdge*, std::vector<_IntermodalEdge*> > IntermodalNetwork< E, L, N, V >::myAccessSplits
private

retrieve the splitted edges for the given "original"

Definition at line 754 of file IntermodalNetwork.h.

Referenced by IntermodalNetwork< E, L, N, V >::addAccess(), IntermodalNetwork< E, L, N, V >::findSplitIndex(), and IntermodalNetwork< E, L, N, V >::splitEdge().

◆ myArrivalLookup

template<class E , class L , class N , class V >
std::map<const E*, std::vector<_IntermodalEdge*> > IntermodalNetwork< E, L, N, V >::myArrivalLookup
private

◆ myBidiLookup

template<class E , class L , class N , class V >
std::map<const E*, EdgePair> IntermodalNetwork< E, L, N, V >::myBidiLookup
private

retrieve the forward and backward edge for the given input edge E

Definition at line 733 of file IntermodalNetwork.h.

Referenced by IntermodalNetwork< E, L, N, V >::getBothDirections(), and IntermodalNetwork< E, L, N, V >::IntermodalNetwork().

◆ myCarLookup

template<class E , class L , class N , class V >
std::map<const E*, _IntermodalEdge*> IntermodalNetwork< E, L, N, V >::myCarLookup
private

◆ myCarWalkTransfer

template<class E , class L , class N , class V >
const int IntermodalNetwork< E, L, N, V >::myCarWalkTransfer
private

◆ myDepartLookup

template<class E , class L , class N , class V >
std::map<const E*, std::vector<_IntermodalEdge*> > IntermodalNetwork< E, L, N, V >::myDepartLookup
private

◆ myEdges

template<class E , class L , class N , class V >
std::vector<_IntermodalEdge*> IntermodalNetwork< E, L, N, V >::myEdges
private

◆ myNumericalID

◆ myPTLines

template<class E , class L , class N , class V >
std::map<std::string, std::vector<_PTEdge*> > IntermodalNetwork< E, L, N, V >::myPTLines
private

retrieve the public transport edges for the given line

Definition at line 748 of file IntermodalNetwork.h.

Referenced by IntermodalNetwork< E, L, N, V >::addSchedule().

◆ myStopConnections

template<class E , class L , class N , class V >
std::map<std::string, _IntermodalEdge*> IntermodalNetwork< E, L, N, V >::myStopConnections
private

retrieve the representing edge for the given stopping place

Definition at line 751 of file IntermodalNetwork.h.

Referenced by IntermodalNetwork< E, L, N, V >::addAccess(), IntermodalNetwork< E, L, N, V >::addSchedule(), and IntermodalNetwork< E, L, N, V >::getStopEdge().

◆ myWalkingConnectorLookup

template<class E , class L , class N , class V >
std::map<const N*, _IntermodalEdge*> IntermodalNetwork< E, L, N, V >::myWalkingConnectorLookup
private

the walking connector edge (fake walking area)

Definition at line 742 of file IntermodalNetwork.h.

Referenced by IntermodalNetwork< E, L, N, V >::getWalkingConnector(), and IntermodalNetwork< E, L, N, V >::IntermodalNetwork().


The documentation for this class was generated from the following file: