Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MSEdge.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
22// A road/street connecting two junctions
23/****************************************************************************/
24#pragma once
25#include <config.h>
26
27#include <vector>
28#include <map>
29#include <string>
30#include <iostream>
31#ifdef HAVE_FOX
33#endif
34#include <utils/common/Named.h>
38#include <utils/geom/Boundary.h>
43#include "MSNet.h"
44
45
46// ===========================================================================
47// class declarations
48// ===========================================================================
49class Boundary;
50class OutputDevice;
51class SUMOVehicle;
53class MSVehicle;
54class MSLane;
55class MSLaneChanger;
56class MSPerson;
57class MSJunction;
58class MSEdge;
59class MSTransportable;
60
61
62// ===========================================================================
63// class definitions
64// ===========================================================================
73typedef std::vector<MSEdge*> MSEdgeVector;
74typedef std::vector<const MSEdge*> ConstMSEdgeVector;
75typedef std::vector<std::pair<const MSEdge*, const MSEdge*> > MSConstEdgePairVector;
76
77class MSEdge : public Named, public Parameterised {
78private:
80 typedef std::vector<std::pair<SVCPermissions, std::shared_ptr<const std::vector<MSLane*> > > > AllowedLanesCont;
81
83 typedef std::map<const MSEdge*, AllowedLanesCont> AllowedLanesByTarget;
84
85
86public:
87 friend class MSLaneChangerSublane; // needs access to myLaneChanger
88
100 MSEdge(const std::string& id, int numericalID, const SumoXMLEdgeFunc function,
101 const std::string& streetName, const std::string& edgeType,
102 const std::string& routingType, int priority, double distance);
103
104
106 virtual ~MSEdge();
107
108
114 void initialize(const std::vector<MSLane*>* lanes);
115
116
119 void recalcCache();
120
121
123 virtual void closeBuilding();
124
126 void buildLaneChanger();
127
128 /* @brief returns whether initizliaing a lane change is permitted on this edge
129 * @note Has to be called after all sucessors and predecessors have been set (after closeBuilding())
130 */
131 bool allowsLaneChanging() const;
132
135
142 MSLane* leftLane(const MSLane* const lane) const;
143
144
151 MSLane* rightLane(const MSLane* const lane) const;
152
153
161 MSLane* parallelLane(const MSLane* const lane, int offset, bool includeOpposite = true) const;
162
163
168 inline const std::vector<MSLane*>& getLanes() const {
169 return *myLanes;
170 }
171
172 inline int getNumLanes() const {
173 return (int)myLanes->size();
174 }
175
177 int getNumDrivingLanes() const;
178
180 int getVehicleNumber() const;
181
183 bool isEmpty() const;
184
186 std::vector<const SUMOVehicle*> getVehicles() const;
187
188 double getBruttoOccupancy() const;
189
191 double getFlow() const;
192
194 double getWaitingSeconds() const;
195
197 double getOccupancy() const;
198
204 inline const std::set<MSTransportable*, ComparatorNumericalIdLess>& getPersons() const {
205 return myPersons;
206 }
207
212 std::vector<MSTransportable*> getSortedPersons(SUMOTime timestep, bool includeRiding = false) const;
213
214
219 std::vector<MSTransportable*> getSortedContainers(SUMOTime timestep, bool includeRiding = false) const;
220
229 const std::vector<MSLane*>* allowedLanes(const MSEdge& destination,
230 SUMOVehicleClass vclass = SVC_IGNORING, bool ignoreTransientPermissions = false) const;
231
232
233
241 const std::vector<MSLane*>* allowedLanes(SUMOVehicleClass vclass = SVC_IGNORING) const;
242 const std::vector<MSLane*>* allowedLanes(SUMOVehicleClass vclass, bool ignoreTransientPermissions) const;
243
244 inline bool isConnectedTo(const MSEdge& destination, SUMOVehicleClass vclass, bool ignoreTransientPermissions = false) const {
245 const std::vector<MSLane*>* const lanes = allowedLanes(destination, vclass, ignoreTransientPermissions);
246 return lanes != nullptr && !lanes->empty();
247 }
249
250
251
254
260 return myFunction;
261 }
262
264 inline bool isNormal() const {
266 }
267
269 inline bool isInternal() const {
271 }
272
274 inline bool isCrossing() const {
276 }
277
278
280 void checkAndRegisterBiDirEdge(const std::string& bidiID = "");
281
283 inline const MSEdge* getBidiEdge() const {
284 return myBidiEdge;
285 }
286
288 inline bool isWalkingArea() const {
290 }
291
292 inline bool isTazConnector() const {
294 }
295
296 void setOtherTazConnector(const MSEdge* edge) {
297 myOtherTazConnector = edge;
298 }
299
301 return myOtherTazConnector;
302 }
303
307 inline int getNumericalID() const {
308 return myNumericalID;
309 }
310
311
314 const std::string& getStreetName() const {
315 return myStreetName;
316 }
317
320 const std::string& getEdgeType() const {
321 return myEdgeType;
322 }
323
326 const std::string& getRoutingType() const {
327 return myRoutingType.empty() ? myEdgeType : myRoutingType;
328 }
329
330 double getPreference(const SUMOVTypeParameter& pars) const;
331
332 // @brief try to infer edge type for internal edges
333 void inferEdgeType();
334
337 int getPriority() const {
338 return myPriority;
339 }
340
344 double getDistance() const {
345 return myDistance;
346 }
347
350 double getDistanceAt(double pos) const;
351
352 bool hasDistance() const {
353 return myDistance != 0;
354 }
356
360 void setCrossingEdges(const std::vector<std::string>& crossingEdges) {
361 myCrossingEdges.clear();
362 myCrossingEdges.insert(myCrossingEdges.begin(), crossingEdges.begin(), crossingEdges.end());
363 }
364
368 const std::vector<std::string>& getCrossingEdges() const {
369 return myCrossingEdges;
370 }
371
372
375
381 void addSuccessor(MSEdge* edge, const MSEdge* via = nullptr);
382
383 void resetTAZ(MSJunction* junction);
384
388 int getNumSuccessors() const {
389 return (int) mySuccessors.size();
390 }
391
392
398
403 const MSConstEdgePairVector& getViaSuccessors(SUMOVehicleClass vClass = SVC_IGNORING, bool ignoreTransientPermissions = false) const;
404
405
410 int getNumPredecessors() const {
411 return (int) myPredecessors.size();
412 }
413
414
419 return myPredecessors;
420 }
421
422
424 return myFromJunction;
425 }
426
427 const MSJunction* getToJunction() const {
428 return myToJunction;
429 }
430
431
432 void setJunctions(MSJunction* from, MSJunction* to);
434
435
436
439
443 bool isVaporizing() const {
444 return myVaporizationRequests > 0;
445 }
446
447
458
459
471
472
481 double getCurrentTravelTime(const double minSpeed = NUMERICAL_EPS) const;
482
483
485 inline double getMinimumTravelTime(const SUMOVehicle* const veh) const {
487 return 0;
488 } else if (veh != 0) {
490 } else {
491 return myEmptyTraveltime;
492 }
493 }
494
495 double getTimePenalty() const {
496 return myTimePenalty;
497 }
498
506 static inline double getTravelTimeStatic(const MSEdge* const edge, const SUMOVehicle* const veh, double time) {
507 return MSNet::getInstance()->getTravelTime(edge, veh, time);
508 }
509
510 static double getTravelTimeAggregated(const MSEdge* const edge, const SUMOVehicle* const veh, double time);
511
514 double getRoutingSpeed() const;
515
516
519
539 bool insertVehicle(SUMOVehicle& v, SUMOTime time, const bool checkOnly = false, const bool forceCheck = false) const;
540
542 bool validateDepartSpeed(SUMOVehicle& v) const;
543
563 MSLane* getFreeLane(const std::vector<MSLane*>* allowed, const SUMOVehicleClass vclass, double departPos) const;
564
578 MSLane* getProbableLane(const std::vector<MSLane*>* allowed, const SUMOVehicleClass vclass, double departPos, double maxSpeed) const;
579
580
591 MSLane* getDepartLane(MSVehicle& veh) const;
592
593 /* @brief get the rightmost lane that allows the given vClass or nullptr
594 * @param[in] defaultFirst Whether the first lane should be returned if all lanes are forbidden
595 */
596 MSLane* getFirstAllowed(SUMOVehicleClass vClass, bool defaultFirst = false, int routingMode = 0) const;
597
600
607
608
612 inline void setLastFailedInsertionTime(SUMOTime time) const {
614 }
616
617
619 void changeLanes(SUMOTime t) const;
620
621
623 const MSEdge* getInternalFollowingEdge(const MSEdge* followerAfterInternal, SUMOVehicleClass vClass) const;
624
625
627 double getInternalFollowingLengthTo(const MSEdge* followerAfterInternal, SUMOVehicleClass vClass) const;
628
630 const MSEdge* getNormalBefore() const;
631
633 const MSEdge* getNormalSuccessor() const;
634
636 inline bool prohibits(const SUMOVehicle* const vehicle) const {
637 if (vehicle == nullptr) {
638 return false;
639 }
640 const SUMOVehicleClass svc = vehicle->getVClass();
641 return (vehicle->ignoreTransientPermissions()
642 ? (myOriginalCombinedPermissions & svc) != svc
643 : (myCombinedPermissions & svc) != svc);
644 }
645
646 bool hasTransientPermissions() const;
647
653 inline bool restricts(const SUMOVehicle* const /* vehicle */) const {
654 return false;
655 }
656
660 }
661
665 double getWidth() const {
666 return myWidth;
667 }
668
670 const std::vector<double> getSubLaneSides() const {
671 return mySublaneSides;
672 }
673
674 void rebuildAllowedLanes(const bool onInit = false, bool updateVehicles = false);
675
676 void rebuildAllowedTargets(const bool updateVehicles = true);
677
678
684 double getDistanceTo(const MSEdge* other, const bool doBoundaryEstimate = false) const;
685
686
688 static const Position getStopPosition(const SUMOVehicleParameter::Stop& stop);
689
690
694 inline double getLength() const {
695 return myLength;
696 }
697
698
703 double getSpeedLimit() const;
704
706 double getLengthGeometryFactor() const;
707
711 void setMaxSpeed(double val, double jamThreshold = -1);
712
716 void setFrictionCoefficient(double val) const;
717
723 double getVehicleMaxSpeed(const SUMOTrafficObject* const veh) const;
724
725
726 virtual void addTransportable(MSTransportable* t) const;
727
728 virtual void removeTransportable(MSTransportable* t) const;
729
730 inline bool isRoundabout() const {
731 return myAmRoundabout;
732 }
733
735 myAmRoundabout = true;
736 }
737
738 void markDelayed() const {
739 myAmDelayed = true;
740 }
741
742 // return whether there have been vehicles on this or the bidi edge (if there is any) at least once
743 inline bool isDelayed() const {
744 return myAmDelayed || (myBidiEdge != nullptr && myBidiEdge->myAmDelayed);
745 }
746
747 bool hasLaneChanger() const {
748 return myLaneChanger != nullptr;
749 }
750
752 std::pair<double, SUMOTime> getLastBlocked(int index) const;
753
755 bool canChangeToOpposite() const;
756
758 const MSEdge* getOppositeEdge() const;
759
761 double getMeanSpeed() const;
762
764 double getMeanFriction() const;
765
767 double getMeanSpeedBike() const;
768
770 bool hasMinorLink() const;
771
773 bool isFringe() const {
774 return myAmFringe;
775 }
776
778 bool hasChangeProhibitions(SUMOVehicleClass svc, int index) const;
779
781 virtual bool isSelected() const {
782 return false;
783 }
784
786 virtual void lock() const {}
787
789 virtual void unlock() const {};
790
792 void addWaiting(SUMOVehicle* vehicle) const;
793
795 void removeWaiting(const SUMOVehicle* vehicle) const;
796
797 /* @brief returns a vehicle that is waiting for a for a person or a container at this edge at the given position
798 * @param[in] transportable The person or container that wants to ride
799 * @param[in] position The vehicle shall be positioned in the interval [position - t, position + t], where t is some tolerance
800 */
801 SUMOVehicle* getWaitingVehicle(MSTransportable* transportable, const double position) const;
802
804 void clearState();
805
807 void updateMesoType();
808
810
814
815 static int& getDefaultDepartLane() {
816 return myDefaultDepartLane;
817 }
818
822 static bool dictionary(const std::string& id, MSEdge* edge);
823
825 static MSEdge* dictionary(const std::string& id);
826
828 static MSEdge* dictionaryHint(const std::string& id, const int startIdx);
829
831 static const MSEdgeVector& getAllEdges();
832
834 static void clear();
835
837 static void insertIDs(std::vector<std::string>& into);
838
840
842 myMesoIgnoredVClasses = ignored;
843 }
844
845public:
848
857 static void parseEdgesList(const std::string& desc, ConstMSEdgeVector& into,
858 const std::string& rid);
859
860
867 static void parseEdgesList(const std::vector<std::string>& desc, ConstMSEdgeVector& into,
868 const std::string& rid);
870
871
878
885
886protected:
891 public:
893 explicit by_id_sorter() { }
894
896 int operator()(const MSEdge* const e1, const MSEdge* const e2) const {
897 return e1->getNumericalID() < e2->getNumericalID();
898 }
899
900 };
901
906 public:
908 explicit transportable_by_position_sorter(SUMOTime timestep): myTime(timestep) { }
909
911 int operator()(const MSTransportable* const c1, const MSTransportable* const c2) const;
912 private:
914 };
915
916
918 double getDepartPosBound(const MSVehicle& veh, bool upper = true) const;
919
920protected:
922 const int myNumericalID;
923
925 std::shared_ptr<const std::vector<MSLane*> > myLanes;
926
929
932
935
938
942 mutable std::set<int> myFailedInsertionMemory;
943
945 std::vector<std::string> myCrossingEdges;
946
949
951
954
958
960 mutable std::set<MSTransportable*, ComparatorNumericalIdLess> myPersons;
961
963 mutable std::set<MSTransportable*, ComparatorNumericalIdLess> myContainers;
964
967
971
975
980
985
989
992
994 std::string myStreetName;
995
997 std::string myEdgeType;
998
1000 std::string myRoutingType;
1001
1003 const int myPriority;
1004
1006 const double myDistance;
1007
1009 double myWidth;
1010
1012 double myLength;
1013
1016
1019
1021 mutable bool myAmDelayed;
1022
1025
1028
1030 std::vector<double> mySublaneSides;
1031
1034
1036 typedef std::map< std::string, MSEdge* > DictType;
1037
1042
1047
1049
1053
1054
1056 mutable std::map<SUMOVehicleClass, MSEdgeVector> myClassesSuccessorMap;
1057
1059 mutable std::map<SUMOVehicleClass, MSConstEdgePairVector> myClassesViaSuccessorMap;
1060 mutable std::map<SUMOVehicleClass, MSConstEdgePairVector> myOrigClassesViaSuccessorMap;
1061
1064
1066 mutable std::vector<SUMOVehicle*> myWaiting;
1067
1068#ifdef HAVE_FOX
1070 mutable FXMutex myWaitingMutex;
1071
1073 mutable FXMutex mySuccessorMutex;
1074#endif
1075
1076private:
1077
1080
1084
1087
1089 MSEdge& operator=(const MSEdge&) = delete;
1090
1091 void setBidiLanes();
1092
1093 bool isSuperposable(const MSEdge* other);
1094
1095 void addToAllowed(const SVCPermissions permissions, std::shared_ptr<const std::vector<MSLane*> > allowedLanes, AllowedLanesCont& laneCont) const;
1096};
long long int SUMOTime
Definition GUI.h:36
std::vector< const MSEdge * > ConstMSEdgeVector
Definition MSEdge.h:74
std::vector< std::pair< const MSEdge *, const MSEdge * > > MSConstEdgePairVector
Definition MSEdge.h:75
std::vector< MSEdge * > MSEdgeVector
Definition MSEdge.h:73
const SVCPermissions SVCAll
all VClasses are allowed
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_IGNORING
vehicles ignoring classes
DepartLaneDefinition
Possible ways to choose a lane on depart.
SumoXMLEdgeFunc
Numbers representing special SUMO-XML-attribute values for representing edge functions used in netbui...
A class that stores a 2D geometrical boundary.
Definition Boundary.h:39
Sorts edges by their ids.
Definition MSEdge.h:890
by_id_sorter()
constructor
Definition MSEdge.h:893
int operator()(const MSEdge *const e1, const MSEdge *const e2) const
comparing operator
Definition MSEdge.h:896
Sorts transportables by their positions.
Definition MSEdge.h:905
transportable_by_position_sorter(SUMOTime timestep)
constructor
Definition MSEdge.h:908
int operator()(const MSTransportable *const c1, const MSTransportable *const c2) const
comparing operator
Definition MSEdge.cpp:1268
A road/street connecting two junctions.
Definition MSEdge.h:77
void setCrossingEdges(const std::vector< std::string > &crossingEdges)
Sets the crossed edge ids for a crossing edge.
Definition MSEdge.h:360
virtual void unlock() const
release exclusive access to the mesoscopic state
Definition MSEdge.h:789
std::string myStreetName
the real-world name of this edge (need not be unique)
Definition MSEdge.h:994
static const MSEdgeVector & getAllEdges()
Returns all edges with a numerical id.
Definition MSEdge.cpp:1122
SUMOVehicle * getWaitingVehicle(MSTransportable *transportable, const double position) const
Definition MSEdge.cpp:1508
virtual bool isSelected() const
whether this lane is selected in the GUI
Definition MSEdge.h:781
void addToAllowed(const SVCPermissions permissions, std::shared_ptr< const std::vector< MSLane * > > allowedLanes, AllowedLanesCont &laneCont) const
Definition MSEdge.cpp:309
void changeLanes(SUMOTime t) const
Performs lane changing on this edge.
Definition MSEdge.cpp:928
const int myPriority
the priority of the edge (used during network creation)
Definition MSEdge.h:1003
double getBruttoOccupancy() const
Definition MSEdge.cpp:1645
SVCPermissions myCombinedPermissions
The union of lane permissions for this edge.
Definition MSEdge.h:979
int getNumSuccessors() const
Returns the number of edges that may be reached from this edge.
Definition MSEdge.h:388
double getFlow() const
return flow based on meanSpead
Definition MSEdge.cpp:1632
const MSEdge * myOtherTazConnector
the other taz-connector if this edge isTazConnector, otherwise nullptr
Definition MSEdge.h:991
Boundary myBoundary
The bounding rectangle of end nodes incoming or outgoing edges for taz connectors or of my own start ...
Definition MSEdge.h:1063
double myWidth
Edge width [m].
Definition MSEdge.h:1009
AllowedLanesByTarget myAllowedTargets
From target edge to lanes allowed to be used to reach it.
Definition MSEdge.h:973
bool isCrossing() const
return whether this edge is a pedestrian crossing
Definition MSEdge.h:274
MSLane * getDepartLane(MSVehicle &veh) const
Finds a depart lane for the given vehicle parameters.
Definition MSEdge.cpp:683
SUMOTime myLastFailedInsertionTime
The time of last insertion failure.
Definition MSEdge.h:937
std::set< MSTransportable *, ComparatorNumericalIdLess > myContainers
Containers on the edge.
Definition MSEdge.h:963
void setOtherTazConnector(const MSEdge *edge)
Definition MSEdge.h:296
int getPriority() const
Returns the priority of the edge.
Definition MSEdge.h:337
std::pair< double, SUMOTime > getLastBlocked(int index) const
retrieve properties of a blocked vehicle that wants to chane to the lane with the given index
Definition MSEdge.cpp:1713
static void clear()
Clears the dictionary.
Definition MSEdge.cpp:1128
void inferEdgeType()
Definition MSEdge.cpp:1663
static void setMesoIgnoredVClasses(SVCPermissions ignored)
Definition MSEdge.h:841
const int myNumericalID
This edge's numerical id.
Definition MSEdge.h:922
void setJunctions(MSJunction *from, MSJunction *to)
Definition MSEdge.cpp:1355
double getMeanSpeedBike() const
get the mean speed of all bicycles on this edge
Definition MSEdge.cpp:1047
static MSEdgeVector myEdges
Static list of edges.
Definition MSEdge.h:1046
SVCPermissions getPermissions() const
Returns the combined permissions of all lanes of this edge.
Definition MSEdge.h:658
AllowedLanesCont myAllowed
Associative container from vehicle class to allowed-lanes.
Definition MSEdge.h:969
double myEmptyTraveltime
the traveltime on the empty edge (cached value for speedup)
Definition MSEdge.h:1015
void updateMesoType()
update meso segment parameters
Definition MSEdge.cpp:252
bool myAmFringe
whether this edge is at the network fringe
Definition MSEdge.h:1027
static double getTravelTimeAggregated(const MSEdge *const edge, const SUMOVehicle *const veh, double time)
Definition MSEdge.cpp:1657
MSJunction * myToJunction
Definition MSEdge.h:957
void checkAndRegisterBiDirEdge(const std::string &bidiID="")
check and register the opposite superposable edge if any
Definition MSEdge.cpp:1413
virtual ~MSEdge()
Destructor.
Definition MSEdge.cpp:97
double getDepartPosBound(const MSVehicle &veh, bool upper=true) const
return upper bound for the depart position on this edge
Definition MSEdge.cpp:625
const double myDistance
the kilometrage/mileage at the start of the edge
Definition MSEdge.h:1006
void setFrictionCoefficient(double val) const
Sets a new friction coefficient COF for all lanes [later to be (used by TraCI and MSCalibrator)].
void clearState()
Remove all transportables before quick-loading state.
Definition MSEdge.cpp:1727
MSLane * getDepartLaneMeso(SUMOVehicle &veh) const
consider given departLane parameter (only for validating speeds)
Definition MSEdge.cpp:672
const std::string & getStreetName() const
Returns the street name of the edge.
Definition MSEdge.h:314
static DepartLaneDefinition & getDefaultDepartLaneDefinition()
Definition MSEdge.h:811
bool hasTransientPermissions() const
Definition MSEdge.cpp:1707
const std::set< MSTransportable *, ComparatorNumericalIdLess > & getPersons() const
Returns this edge's persons set.
Definition MSEdge.h:204
const MSEdge * myBidiEdge
the oppositing superposable edge
Definition MSEdge.h:1079
MSLane * leftLane(const MSLane *const lane) const
Returns the lane left to the one given, 0 if the given lane is leftmost.
Definition MSEdge.cpp:459
static double getTravelTimeStatic(const MSEdge *const edge, const SUMOVehicle *const veh, double time)
Returns the travel time for the given edge.
Definition MSEdge.h:506
std::string myEdgeType
the type of the edge (optionally used during network creation)
Definition MSEdge.h:997
RailEdge< MSEdge, SUMOVehicle > * getRailwayRoutingEdge() const
Definition MSEdge.h:879
bool isWalkingArea() const
return whether this edge is walking area
Definition MSEdge.h:288
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
Definition MSEdge.h:168
int getNumDrivingLanes() const
return the number of lanes that permit non-weak modes if the edge allows non weak modes and the numbe...
Definition MSEdge.cpp:1550
bool isDelayed() const
Definition MSEdge.h:743
const MSEdge * getOppositeEdge() const
Returns the opposite direction edge if on exists else a nullptr.
Definition MSEdge.cpp:1376
static void parseEdgesList(const std::string &desc, ConstMSEdgeVector &into, const std::string &rid)
Parses the given string assuming it contains a list of edge ids divided by spaces.
Definition MSEdge.cpp:1146
double getLengthGeometryFactor() const
return shape.length() / myLength
Definition MSEdge.cpp:1201
void addSuccessor(MSEdge *edge, const MSEdge *via=nullptr)
Adds an edge to the list of edges which may be reached from this edge and to the incoming of the othe...
Definition MSEdge.cpp:1279
bool isFringe() const
return whether this edge is at the fringe of the network
Definition MSEdge.h:773
std::vector< SUMOVehicle * > myWaiting
List of waiting vehicles.
Definition MSEdge.h:1066
const MSEdge * getNormalSuccessor() const
if this edge is an internal edge, return its first normal successor, otherwise the edge itself
Definition MSEdge.cpp:983
const std::vector< MSLane * > * allowedLanes(const MSEdge &destination, SUMOVehicleClass vclass=SVC_IGNORING, bool ignoreTransientPermissions=false) const
Get the allowed lanes to reach the destination-edge.
Definition MSEdge.cpp:488
const MSEdge * getBidiEdge() const
return opposite superposable/congruent edge, if it exist and 0 else
Definition MSEdge.h:283
double getInternalFollowingLengthTo(const MSEdge *followerAfterInternal, SUMOVehicleClass vClass) const
returns the length of all internal edges on the junction until reaching the non-internal edge followe...
Definition MSEdge.cpp:958
bool isNormal() const
return whether this edge is an internal edge
Definition MSEdge.h:264
bool restricts(const SUMOVehicle *const) const
Returns whether this edge has restriction parameters forbidding the given vehicle to pass it The rest...
Definition MSEdge.h:653
ReversedEdge< MSEdge, SUMOVehicle > * getReversedRoutingEdge() const
Definition MSEdge.h:872
std::vector< MSTransportable * > getSortedPersons(SUMOTime timestep, bool includeRiding=false) const
Returns this edge's persons sorted by pos.
Definition MSEdge.cpp:1242
void postLoadInitLaneChanger()
Definition MSEdge.cpp:260
bool isSuperposable(const MSEdge *other)
Definition MSEdge.cpp:1468
bool validateDepartSpeed(SUMOVehicle &v) const
check whether the given departSpeed is valid for this edge
Definition MSEdge.cpp:772
const std::vector< std::string > & getCrossingEdges() const
Gets the crossed edge ids.
Definition MSEdge.h:368
double getDistanceTo(const MSEdge *other, const bool doBoundaryEstimate=false) const
optimistic air distance heuristic for use in routing
Definition MSEdge.cpp:1169
void setMaxSpeed(double val, double jamThreshold=-1)
Sets a new maximum speed for all lanes (used by TraCI and MSCalibrator)
Definition MSEdge.cpp:1213
std::string myRoutingType
the routing type of the edge (used to look up vType and vClass specific routing preferences)
Definition MSEdge.h:1000
static MSEdge * dictionaryHint(const std::string &id, const int startIdx)
Returns the MSEdge associated to the key id giving a hint with a numerical id.
Definition MSEdge.cpp:1109
MSLaneChanger * myLaneChanger
This member will do the lane-change.
Definition MSEdge.h:928
double getOccupancy() const
return mean occupancy on this edges lanes or segments
Definition MSEdge.cpp:1610
static int myDefaultDepartLane
Definition MSEdge.h:1051
const MSConstEdgePairVector & getViaSuccessors(SUMOVehicleClass vClass=SVC_IGNORING, bool ignoreTransientPermissions=false) const
Returns the following edges with internal vias, restricted by vClass.
Definition MSEdge.cpp:1324
std::vector< MSTransportable * > getSortedContainers(SUMOTime timestep, bool includeRiding=false) const
Returns this edge's containers sorted by pos.
Definition MSEdge.cpp:1260
const SumoXMLEdgeFunc myFunction
the purpose of the edge
Definition MSEdge.h:931
MSLane * getProbableLane(const std::vector< MSLane * > *allowed, const SUMOVehicleClass vclass, double departPos, double maxSpeed) const
Finds the most probable lane allowing the vehicle class.
Definition MSEdge.cpp:587
void recalcCache()
Recalculates the cached values.
Definition MSEdge.cpp:122
double getSpeedLimit() const
Returns the speed limit of the edge @caution The speed limit of the first lane is retured; should pro...
Definition MSEdge.cpp:1194
SVCPermissions myOriginalCombinedPermissions
The original union of lane permissions for this edge (before temporary modifications)
Definition MSEdge.h:984
MSEdge & operator=(const MSEdge &)=delete
assignment operator.
bool myAmDelayed
whether this edge had a vehicle with less than max speed on it
Definition MSEdge.h:1021
SVCPermissions myOriginalMinimumPermissions
The original intersection of lane permissions for this edge (before temporary modifications)
Definition MSEdge.h:982
std::map< SUMOVehicleClass, MSEdgeVector > myClassesSuccessorMap
The successors available for a given vClass.
Definition MSEdge.h:1056
SUMOTime decVaporization(SUMOTime t)
Disables vaporization.
Definition MSEdge.cpp:548
static int & getDefaultDepartLane()
Definition MSEdge.h:815
MSEdgeVector myPredecessors
The preceeding edges.
Definition MSEdge.h:953
bool hasChangeProhibitions(SUMOVehicleClass svc, int index) const
return whether this edge prohibits changing for the given vClass when starting on the given lane inde...
Definition MSEdge.cpp:1398
void rebuildAllowedTargets(const bool updateVehicles=true)
Definition MSEdge.cpp:392
bool hasLaneChanger() const
Definition MSEdge.h:747
static SVCPermissions myMesoIgnoredVClasses
Definition MSEdge.h:1048
std::vector< std::pair< SVCPermissions, std::shared_ptr< const std::vector< MSLane * > > > > AllowedLanesCont
"Map" from vehicle class to allowed lanes
Definition MSEdge.h:80
const MSJunction * getToJunction() const
Definition MSEdge.h:427
double getLength() const
return the length of the edge
Definition MSEdge.h:694
void initialize(const std::vector< MSLane * > *lanes)
Initialize the edge.
Definition MSEdge.cpp:105
bool myHaveTransientPermissions
whether transient permission changes were applied to this edge or a predecessor
Definition MSEdge.h:987
std::vector< std::string > myCrossingEdges
The crossed edges id for a crossing edge. On not crossing edges it is empty.
Definition MSEdge.h:945
virtual void closeBuilding()
Definition MSEdge.cpp:208
static SVCPermissions getMesoPermissions(SVCPermissions p, SVCPermissions ignoreIgnored=0)
Definition MSEdge.cpp:324
bool canChangeToOpposite() const
whether this edge allows changing to the opposite direction edge
Definition MSEdge.cpp:1366
std::set< int > myFailedInsertionMemory
A cache for the rejected insertion attempts. Used to assure that no further insertion attempts are ma...
Definition MSEdge.h:942
const MSJunction * getFromJunction() const
Definition MSEdge.h:423
double getMeanSpeed() const
get the mean speed
Definition MSEdge.cpp:993
static DictType myDict
Static dictionary to associate string-ids with objects.
Definition MSEdge.h:1041
std::set< MSTransportable *, ComparatorNumericalIdLess > myPersons
Persons on the edge for drawing and pushbutton.
Definition MSEdge.h:960
bool isTazConnector() const
Definition MSEdge.h:292
MSEdge(const MSEdge &)
Invalidated copy constructor.
int getNumLanes() const
Definition MSEdge.h:172
double getDistanceAt(double pos) const
Returns the kilometrage/mileage at the given offset along the edge.
Definition MSEdge.cpp:1700
const std::string & getRoutingType() const
Returns the type of the edge.
Definition MSEdge.h:326
MSConstEdgePairVector myViaSuccessors
Definition MSEdge.h:950
double getMinimumTravelTime(const SUMOVehicle *const veh) const
returns the minimum travel time for the given vehicle
Definition MSEdge.h:485
void setBidiLanes()
Definition MSEdge.cpp:1443
MSEdgeVector mySuccessors
The succeeding edges.
Definition MSEdge.h:948
static DepartLaneDefinition myDefaultDepartLaneDefinition
Definition MSEdge.h:1050
bool isRoundabout() const
Definition MSEdge.h:730
bool isInternal() const
return whether this edge is an internal edge
Definition MSEdge.h:269
bool prohibits(const SUMOVehicle *const vehicle) const
Returns whether the vehicle (class) is not allowed on the edge.
Definition MSEdge.h:636
MSLane * rightLane(const MSLane *const lane) const
Returns the lane right to the one given, 0 if the given lane is rightmost.
Definition MSEdge.cpp:465
double getWidth() const
Returns the edges's width (sum over all lanes)
Definition MSEdge.h:665
double getCurrentTravelTime(const double minSpeed=NUMERICAL_EPS) const
Computes and returns the current travel time for this edge.
Definition MSEdge.cpp:1067
std::map< SUMOVehicleClass, MSConstEdgePairVector > myOrigClassesViaSuccessorMap
Definition MSEdge.h:1060
AllowedLanesByTarget myOrigAllowedTargets
Definition MSEdge.h:974
int getNumericalID() const
Returns the numerical id of the edge.
Definition MSEdge.h:307
void resetTAZ(MSJunction *junction)
Definition MSEdge.cpp:185
bool isVaporizing() const
Returns whether vehicles on this edge shall be vaporized.
Definition MSEdge.h:443
bool insertVehicle(SUMOVehicle &v, SUMOTime time, const bool checkOnly=false, const bool forceCheck=false) const
Tries to insert the given vehicle into the network.
Definition MSEdge.cpp:809
static const Position getStopPosition(const SUMOVehicleParameter::Stop &stop)
return the coordinates of the center of the given stop
Definition MSEdge.cpp:1188
void addWaiting(SUMOVehicle *vehicle) const
Adds a vehicle to the list of waiting vehicles.
Definition MSEdge.cpp:1487
MSLane * parallelLane(const MSLane *const lane, int offset, bool includeOpposite=true) const
Returns the lane with the given offset parallel to the given lane one or 0 if it does not exist.
Definition MSEdge.cpp:471
ReversedEdge< MSEdge, SUMOVehicle > * myReversedRoutingEdge
a reversed version for backward routing
Definition MSEdge.h:1082
double getTimePenalty() const
Definition MSEdge.h:495
const std::string & getEdgeType() const
Returns the type of the edge.
Definition MSEdge.h:320
static bool dictionary(const std::string &id, MSEdge *edge)
Inserts edge into the static dictionary Returns true if the key id isn't already in the dictionary....
Definition MSEdge.cpp:1083
std::vector< const SUMOVehicle * > getVehicles() const
return vehicles on this edges lanes or segments
Definition MSEdge.cpp:1531
const std::vector< double > getSubLaneSides() const
Returns the right side offsets of this edge's sublanes.
Definition MSEdge.h:670
static void insertIDs(std::vector< std::string > &into)
Inserts IDs of all known edges into the given vector.
Definition MSEdge.cpp:1138
const MSEdge * getOtherTazConnector() const
Definition MSEdge.h:300
double getVehicleMaxSpeed(const SUMOTrafficObject *const veh) const
Returns the maximum speed the vehicle may use on this edge.
Definition MSEdge.cpp:1206
SUMOTime incVaporization(SUMOTime t)
Enables vaporization.
Definition MSEdge.cpp:541
MSJunction * myFromJunction
the junctions for this edge
Definition MSEdge.h:956
double getMeanFriction() const
get the mean friction over the lanes
Definition MSEdge.cpp:1034
std::map< std::string, MSEdge * > DictType
definition of the static dictionary type
Definition MSEdge.h:1036
bool isConnectedTo(const MSEdge &destination, SUMOVehicleClass vclass, bool ignoreTransientPermissions=false) const
Definition MSEdge.h:244
bool hasMinorLink() const
whether any lane has a minor link
Definition MSEdge.cpp:1386
double getPreference(const SUMOVTypeParameter &pars) const
Definition MSEdge.cpp:1722
std::map< SUMOVehicleClass, MSConstEdgePairVector > myClassesViaSuccessorMap
The successors available for a given vClass.
Definition MSEdge.h:1059
const MSEdge * getNormalBefore() const
if this edge is an internal edge, return its first normal predecessor, otherwise the edge itself
Definition MSEdge.cpp:973
int getVehicleNumber() const
return total number of vehicles on this edges lanes or segments
Definition MSEdge.cpp:1568
void markDelayed() const
Definition MSEdge.h:738
const MSEdgeVector & getPredecessors() const
Definition MSEdge.h:418
virtual void removeTransportable(MSTransportable *t) const
Definition MSEdge.cpp:1233
SUMOTime getLastFailedInsertionTime() const
Returns the last time a vehicle could not be inserted.
Definition MSEdge.h:604
SumoXMLEdgeFunc getFunction() const
Returns the edge type (SumoXMLEdgeFunc)
Definition MSEdge.h:259
bool allowsLaneChanging() const
Definition MSEdge.cpp:287
bool isEmpty() const
whether this edge has no vehicles
Definition MSEdge.cpp:1574
const MSEdge * getInternalFollowingEdge(const MSEdge *followerAfterInternal, SUMOVehicleClass vClass) const
Definition MSEdge.cpp:936
void buildLaneChanger()
Has to be called after all sucessors and predecessors have been set (after closeBuilding())
Definition MSEdge.cpp:267
double getRoutingSpeed() const
Returns the averaged speed used by the routing device.
Definition MSEdge.cpp:1077
virtual void lock() const
grant exclusive access to the mesoscopic state
Definition MSEdge.h:786
void removeWaiting(const SUMOVehicle *vehicle) const
Removes a vehicle from the list of waiting vehicles.
Definition MSEdge.cpp:1496
bool hasDistance() const
Definition MSEdge.h:352
MSLane * getFirstAllowed(SUMOVehicleClass vClass, bool defaultFirst=false, int routingMode=0) const
Definition MSEdge.cpp:761
std::vector< double > mySublaneSides
the right side for each sublane on this edge
Definition MSEdge.h:1030
const MSEdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges, restricted by vClass.
Definition MSEdge.cpp:1294
std::shared_ptr< const std::vector< MSLane * > > myLanes
Container for the edge's lane; should be sorted: (right-hand-traffic) the more left the lane,...
Definition MSEdge.h:925
AllowedLanesCont myOrigAllowed
Definition MSEdge.h:970
double getWaitingSeconds() const
return accumated waiting time for all vehicles on this edges lanes or segments
Definition MSEdge.cpp:1594
int myVaporizationRequests
Vaporizer counter.
Definition MSEdge.h:934
int getNumPredecessors() const
Returns the number of edges this edge is connected to.
Definition MSEdge.h:410
double myTimePenalty
flat penalty when computing traveltime
Definition MSEdge.h:1018
SVCPermissions myMinimumPermissions
The intersection of lane permissions for this edge.
Definition MSEdge.h:977
MSLane * getFreeLane(const std::vector< MSLane * > *allowed, const SUMOVehicleClass vclass, double departPos) const
Finds the emptiest lane allowing the vehicle class.
Definition MSEdge.cpp:555
void rebuildAllowedLanes(const bool onInit=false, bool updateVehicles=false)
Definition MSEdge.cpp:331
std::map< const MSEdge *, AllowedLanesCont > AllowedLanesByTarget
Succeeding edges (keys) and allowed lanes to reach these edges (values).
Definition MSEdge.h:83
void markAsRoundabout()
Definition MSEdge.h:734
bool myAmRoundabout
whether this edge belongs to a roundabout
Definition MSEdge.h:1024
virtual void addTransportable(MSTransportable *t) const
Definition MSEdge.cpp:1224
double getDistance() const
Returns the kilometrage/mileage encoding at the start of the edge (negative values encode descending ...
Definition MSEdge.h:344
void setLastFailedInsertionTime(SUMOTime time) const
Sets the last time a vehicle could not be inserted.
Definition MSEdge.h:612
RailEdge< MSEdge, SUMOVehicle > * myRailwayRoutingEdge
Definition MSEdge.h:1083
double myLength
the length of the edge (cached value for speedup)
Definition MSEdge.h:1012
The base class for an intersection.
Definition MSJunction.h:58
Performs lane changing of vehicles.
Performs lane changing of vehicles.
Representation of a lane in the micro simulation.
Definition MSLane.h:84
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition MSNet.cpp:187
static double getTravelTime(const MSEdge *const e, const SUMOVehicle *const v, double t)
Returns the travel time to pass an edge.
Definition MSNet.cpp:167
Representation of a vehicle in the micro simulation.
Definition MSVehicle.h:77
Base class for objects which have an id.
Definition Named.h:54
Static storage of an output device and its base (abstract) implementation.
An upper class for objects with additional parameters.
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
the edge type representing backward edges
Definition RailEdge.h:38
the edge type representing backward edges
Representation of a vehicle, person, or container.
virtual bool ignoreTransientPermissions() const
Returns whether this object is ignoring transient permission changes (during routing)
virtual SUMOVehicleClass getVClass() const =0
Returns the object's access class.
Structure representing possible vehicle parameter.
Representation of a vehicle.
Definition SUMOVehicle.h:62
Definition of vehicle stop (position and duration)
Structure representing possible vehicle parameter.