44template<
class E,
class L,
class N,
class V>
59 nullptr,
false,
nullptr,
true);
67 nullptr,
false,
nullptr,
true);
84 double compute(
const E* from,
const E* to,
double departPos,
double arrivalPos,
double speed,
85 SUMOTime msTime,
const N* onlyNode, std::vector<const E*>& into,
bool allEdges =
false)
const {
86 if (getSidewalk<E, L>(from) == 0) {
87 WRITE_WARNINGF(
TL(
"Departure edge '%' does not allow pedestrians."), from->getID());
90 if (getSidewalk<E, L>(to) == 0) {
91 WRITE_WARNINGF(
TL(
"Destination edge '%' does not allow pedestrians."), to->getID());
94 _IntermodalTrip trip(from, to, departPos, arrivalPos, speed, msTime, onlyNode);
95 std::vector<const _IntermodalEdge*> intoPed;
96 const bool silent = allEdges;
99 &trip, msTime, intoPed, silent);
103 if (pedEdge->includeInRoute(allEdges)) {
104 into.push_back(pedEdge->getEdge());
109#ifdef PedestrianRouter_DEBUG_ROUTES
110 std::cout <<
TIME2STEPS(msTime) <<
" trip from " << from->getID() <<
" to " << to->getID()
111 <<
" departPos=" << departPos
112 <<
" arrivalPos=" << arrivalPos
113 <<
" onlyNode=" << (onlyNode == 0 ?
"NULL" : onlyNode->getID())
115 <<
" resultEdges=" <<
toString(into)
119 return success ? time : -1.;
84 double compute(
const E* from,
const E* to,
double departPos,
double arrivalPos,
double speed, {
…}
125 SUMOTime, std::vector<const E*>&,
bool) {
130 std::vector<_IntermodalEdge*> toProhibitPE;
131 for (
typename std::vector<E*>::const_iterator it = toProhibit.begin(); it != toProhibit.end(); ++it) {
138 double recomputeWalkCosts(
const std::vector<const E*>& edges,
double speed,
double fromPos,
double toPos,
SUMOTime msTime,
double& length)
const {
140 if (edges.size() == 0) {
143 }
else if (edges.size() == 1) {
144 length = fabs(toPos - fromPos);
145 return length / speed;
148 int last = (int)edges.size() - 1;
149 for (
int i = 0; i < last; i++) {
150 std::vector<const E*> into;
151 const E* from = edges[i];
152 const E* to = edges[i + 1];
153 const double fp = (i == 0 ? fromPos : from->getLength() / 2);
154 const double tp = (i == (last - 1) ? toPos : to->getLength() / 2);
157 if (node == from->getToJunction()) {
158 length += from->getLength() - fromPos;
163 length += from->getLength();
165 if (i == (last - 1)) {
166 if (node == to->getFromJunction()) {
169 length += to->getLength() - toPos;
172 double time = this->
compute(from, to, fp, tp, speed, msTime, node, into,
true);
175 for (
const E* edge : into) {
176 if (edge->isCrossing()) {
177 length += edge->getLength();
178 }
else if (edge->isWalkingArea()) {
180 length += edge->getLength();
184 throw ProcessError(
"Could not compute cost between edge '" + from->getID() +
"' and edge '" + to->getID() +
"'.");
138 double recomputeWalkCosts(
const std::vector<const E*>& edges,
double speed,
double fromPos,
double toPos,
SUMOTime msTime,
double& length)
const {
…}
198 if (from->getToJunction() == to->getFromJunction() || from->getToJunction() == to->getToJunction()) {
199 return from->getToJunction();
200 }
else if (from->getFromJunction() == to->getFromJunction() || from->getFromJunction() == to->getToJunction()) {
201 return from->getFromJunction();
#define WRITE_WARNINGF(...)
double gWeightsRandomFactor
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Computes the shortest path through a network using the Dijkstra algorithm.
bool compute(const E *from, const E *to, const V *const vehicle, SUMOTime msTime, std::vector< const E * > &into, bool silent=false)
Builds the route between the given edges using the minimum effort at the given time The definition of...
the base edge type that is given to the internal router (SUMOAbstractRouter)
static double getTravelTimeStatic(const IntermodalEdge *const edge, const IntermodalTrip< E, N, V > *const trip, double time)
static double getTravelTimeStaticRandomized(const IntermodalEdge *const edge, const IntermodalTrip< E, N, V > *const trip, double time)
the intermodal network storing edges, connections and the mappings to the "real" edges
const std::vector< _IntermodalEdge * > & getAllEdges()
_IntermodalEdge * getArrivalConnector(const E *e, const int splitIndex=0) const
Returns the arriving intermodal connector at the given split offset.
const EdgePair & getBothDirections(const E *e) const
Returns the pair of forward and backward edge.
_IntermodalEdge * getDepartConnector(const E *e, const int splitIndex=0) const
Returns the departing intermodal connector at the given split offset.
the "vehicle" type that is given to the internal router (SUMOAbstractRouter)
void prohibit(const std::vector< E * > &toProhibit)
PedestrianRouter & operator=(const PedestrianRouter &s)
Invalidated assignment operator.
DijkstraRouter< _IntermodalEdge, _IntermodalTrip > _InternalRouter
_IntermodalNetwork * myPedNet
IntermodalTrip< E, N, V > _IntermodalTrip
PedestrianRouter(_IntermodalNetwork *net)
IntermodalNetwork< E, L, N, V > _IntermodalNetwork
bool compute(const E *, const E *, const _IntermodalTrip *const, SUMOTime, std::vector< const E * > &, bool)
Builds the route between the given edges using the minimum effort at the given time The definition of...
double recomputeWalkCosts(const std::vector< const E * > &edges, double speed, double fromPos, double toPos, SUMOTime msTime, double &length) const
PedestrianRouter()
Constructor.
double compute(const E *from, const E *to, double departPos, double arrivalPos, double speed, SUMOTime msTime, const N *onlyNode, std::vector< const E * > &into, bool allEdges=false) const
Builds the route between the given edges using the minimum effort at the given time The definition of...
IntermodalEdge< E, L, N, V > _IntermodalEdge
virtual SUMOAbstractRouter< E, _IntermodalTrip > * clone()
const N * getCommonNode(const E *from, const E *to) const
virtual ~PedestrianRouter()
Destructor.
_InternalRouter * myInternalRouter
virtual void prohibit(const std::vector< E * > &toProhibit)
double getEffort(const E *const e, const V *const v, double t) const