Eclipse SUMO - Simulation of Urban MObility
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-2024 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>
36 #include <utils/common/SUMOTime.h>
38 #include <utils/geom/Boundary.h>
40 #include <utils/router/RailEdge.h>
43 #include "MSNet.h"
44 
45 
46 // ===========================================================================
47 // class declarations
48 // ===========================================================================
49 class Boundary;
50 class OutputDevice;
51 class SUMOVehicle;
53 class MSVehicle;
54 class MSLane;
55 class MSLaneChanger;
56 class MSPerson;
57 class MSJunction;
58 class MSEdge;
59 class MSTransportable;
60 
61 
62 // ===========================================================================
63 // class definitions
64 // ===========================================================================
73 typedef std::vector<MSEdge*> MSEdgeVector;
74 typedef std::vector<const MSEdge*> ConstMSEdgeVector;
75 typedef std::vector<std::pair<const MSEdge*, const MSEdge*> > MSConstEdgePairVector;
76 
77 class MSEdge : public Named, public Parameterised {
78 private:
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 
86 public:
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, int priority,
102  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 
243  inline bool isConnectedTo(const MSEdge& destination, SUMOVehicleClass vclass) const {
244  const std::vector<MSLane*>* const lanes = allowedLanes(destination, vclass);
245  return lanes != nullptr && !lanes->empty();
246  }
248 
249 
250 
253 
258  inline SumoXMLEdgeFunc getFunction() const {
259  return myFunction;
260  }
261 
263  inline bool isNormal() const {
265  }
266 
268  inline bool isInternal() const {
270  }
271 
273  inline bool isCrossing() const {
275  }
276 
277 
279  void checkAndRegisterBiDirEdge(const std::string& bidiID = "");
280 
282  inline const MSEdge* getBidiEdge() const {
283  return myBidiEdge;
284  }
285 
287  inline bool isWalkingArea() const {
289  }
290 
291  inline bool isTazConnector() const {
293  }
294 
295  void setOtherTazConnector(const MSEdge* edge) {
296  myOtherTazConnector = edge;
297  }
298 
299  const MSEdge* getOtherTazConnector() const {
300  return myOtherTazConnector;
301  }
302 
306  inline int getNumericalID() const {
307  return myNumericalID;
308  }
309 
310 
313  const std::string& getStreetName() const {
314  return myStreetName;
315  }
316 
319  const std::string& getEdgeType() const {
320  return myEdgeType;
321  }
322 
323  // @brief try to infer edge type for internal edges
324  void inferEdgeType();
325 
328  int getPriority() const {
329  return myPriority;
330  }
331 
335  double getDistance() const {
336  return myDistance;
337  }
338 
341  double getDistanceAt(double pos) const;
342 
343  bool hasDistance() const {
344  return myDistance != 0;
345  }
347 
351  void setCrossingEdges(const std::vector<std::string>& crossingEdges) {
352  myCrossingEdges.clear();
353  myCrossingEdges.insert(myCrossingEdges.begin(), crossingEdges.begin(), crossingEdges.end());
354  }
355 
359  const std::vector<std::string>& getCrossingEdges() const {
360  return myCrossingEdges;
361  }
362 
363 
366 
372  void addSuccessor(MSEdge* edge, const MSEdge* via = nullptr);
373 
374  void resetTAZ(MSJunction* junction);
375 
379  int getNumSuccessors() const {
380  return (int) mySuccessors.size();
381  }
382 
383 
389 
394  const MSConstEdgePairVector& getViaSuccessors(SUMOVehicleClass vClass = SVC_IGNORING, bool ignoreTransientPermissions = false) const;
395 
396 
401  int getNumPredecessors() const {
402  return (int) myPredecessors.size();
403  }
404 
405 
409  const MSEdgeVector& getPredecessors() const {
410  return myPredecessors;
411  }
412 
413 
414  const MSJunction* getFromJunction() const {
415  return myFromJunction;
416  }
417 
418  const MSJunction* getToJunction() const {
419  return myToJunction;
420  }
421 
422 
423  void setJunctions(MSJunction* from, MSJunction* to);
425 
426 
427 
430 
434  bool isVaporizing() const {
435  return myVaporizationRequests > 0;
436  }
437 
438 
449 
450 
462 
463 
472  double getCurrentTravelTime(const double minSpeed = NUMERICAL_EPS) const;
473 
474 
476  inline double getMinimumTravelTime(const SUMOVehicle* const veh) const {
478  return 0;
479  } else if (veh != 0) {
481  } else {
482  return myEmptyTraveltime;
483  }
484  }
485 
486  double getTimePenalty() const {
487  return myTimePenalty;
488  }
489 
497  static inline double getTravelTimeStatic(const MSEdge* const edge, const SUMOVehicle* const veh, double time) {
498  return MSNet::getInstance()->getTravelTime(edge, veh, time);
499  }
500 
501  static double getTravelTimeAggregated(const MSEdge* const edge, const SUMOVehicle* const veh, double time);
502 
505  double getRoutingSpeed() const;
506 
507 
510 
530  bool insertVehicle(SUMOVehicle& v, SUMOTime time, const bool checkOnly = false, const bool forceCheck = false) const;
531 
533  bool validateDepartSpeed(SUMOVehicle& v) const;
534 
554  MSLane* getFreeLane(const std::vector<MSLane*>* allowed, const SUMOVehicleClass vclass, double departPos) const;
555 
556 
568 
569  /* @brief get the rightmost lane that allows the given vClass or nullptr
570  * @param[in] defaultFirst Whether the first lane should be returned if all lanes are forbidden
571  */
572  MSLane* getFirstAllowed(SUMOVehicleClass vClass, bool defaultFirst = false) const;
573 
576 
582  }
583 
584 
588  inline void setLastFailedInsertionTime(SUMOTime time) const {
590  }
592 
593 
595  void changeLanes(SUMOTime t) const;
596 
597 
599  const MSEdge* getInternalFollowingEdge(const MSEdge* followerAfterInternal, SUMOVehicleClass vClass) const;
600 
601 
603  double getInternalFollowingLengthTo(const MSEdge* followerAfterInternal, SUMOVehicleClass vClass) const;
604 
606  const MSEdge* getNormalBefore() const;
607 
609  const MSEdge* getNormalSuccessor() const;
610 
612  inline bool prohibits(const SUMOVehicle* const vehicle) const {
613  if (vehicle == nullptr) {
614  return false;
615  }
616  const SUMOVehicleClass svc = vehicle->getVClass();
617  return (vehicle->ignoreTransientPermissions()
618  ? (myOriginalCombinedPermissions & svc) != svc
619  : (myCombinedPermissions & svc) != svc);
620  }
621 
622  bool hasTransientPermissions() const;
623 
629  inline bool restricts(const SUMOVehicle* const /* vehicle */) const {
630  return false;
631  }
632 
635  return myCombinedPermissions;
636  }
637 
641  double getWidth() const {
642  return myWidth;
643  }
644 
646  const std::vector<double> getSubLaneSides() const {
647  return mySublaneSides;
648  }
649 
650  void rebuildAllowedLanes(const bool onInit = false);
651 
652  void rebuildAllowedTargets(const bool updateVehicles = true);
653 
654 
660  double getDistanceTo(const MSEdge* other, const bool doBoundaryEstimate = false) const;
661 
662 
664  static const Position getStopPosition(const SUMOVehicleParameter::Stop& stop);
665 
666 
670  inline double getLength() const {
671  return myLength;
672  }
673 
674 
679  double getSpeedLimit() const;
680 
682  double getLengthGeometryFactor() const;
683 
687  void setMaxSpeed(double val, double jamThreshold = -1);
688 
692  void setFrictionCoefficient(double val) const;
693 
699  double getVehicleMaxSpeed(const SUMOTrafficObject* const veh) const;
700 
701 
702  virtual void addTransportable(MSTransportable* t) const;
703 
704  virtual void removeTransportable(MSTransportable* t) const;
705 
706  inline bool isRoundabout() const {
707  return myAmRoundabout;
708  }
709 
711  myAmRoundabout = true;
712  }
713 
714  void markDelayed() const {
715  myAmDelayed = true;
716  }
717 
718  // return whether there have been vehicles on this or the bidi edge (if there is any) at least once
719  inline bool isDelayed() const {
720  return myAmDelayed || (myBidiEdge != nullptr && myBidiEdge->myAmDelayed);
721  }
722 
723  bool hasLaneChanger() const {
724  return myLaneChanger != nullptr;
725  }
726 
728  bool canChangeToOpposite() const;
729 
731  const MSEdge* getOppositeEdge() const;
732 
734  double getMeanSpeed() const;
735 
737  double getMeanFriction() const;
738 
740  double getMeanSpeedBike() const;
741 
743  bool hasMinorLink() const;
744 
746  bool isFringe() const {
747  return myAmFringe;
748  }
749 
751  bool hasChangeProhibitions(SUMOVehicleClass svc, int index) const;
752 
754  virtual bool isSelected() const {
755  return false;
756  }
757 
759  virtual void lock() const {}
760 
762  virtual void unlock() const {};
763 
765  void addWaiting(SUMOVehicle* vehicle) const;
766 
768  void removeWaiting(const SUMOVehicle* vehicle) const;
769 
770  /* @brief returns a vehicle that is waiting for a for a person or a container at this edge at the given position
771  * @param[in] transportable The person or container that wants to ride
772  * @param[in] position The vehicle shall be positioned in the interval [position - t, position + t], where t is some tolerance
773  */
774  SUMOVehicle* getWaitingVehicle(MSTransportable* transportable, const double position) const;
775 
777  void clearState();
778 
780  void updateMesoType();
781 
785  static bool dictionary(const std::string& id, MSEdge* edge);
786 
788  static MSEdge* dictionary(const std::string& id);
789 
791  static MSEdge* dictionaryHint(const std::string& id, const int startIdx);
792 
794  static const MSEdgeVector& getAllEdges();
795 
797  static void clear();
798 
800  static void insertIDs(std::vector<std::string>& into);
801 
802  static SVCPermissions getMesoPermissions(SVCPermissions p, SVCPermissions ignoreIgnored = 0);
803 
804  static void setMesoIgnoredVClasses(SVCPermissions ignored) {
805  myMesoIgnoredVClasses = ignored;
806  }
807 
808 public:
811 
820  static void parseEdgesList(const std::string& desc, ConstMSEdgeVector& into,
821  const std::string& rid);
822 
823 
830  static void parseEdgesList(const std::vector<std::string>& desc, ConstMSEdgeVector& into,
831  const std::string& rid);
833 
834 
836  if (myReversedRoutingEdge == nullptr) {
838  }
839  return myReversedRoutingEdge;
840  }
841 
843  if (myRailwayRoutingEdge == nullptr) {
845  }
846  return myRailwayRoutingEdge;
847  }
848 
849 protected:
853  class by_id_sorter {
854  public:
856  explicit by_id_sorter() { }
857 
859  int operator()(const MSEdge* const e1, const MSEdge* const e2) const {
860  return e1->getNumericalID() < e2->getNumericalID();
861  }
862 
863  };
864 
869  public:
871  explicit transportable_by_position_sorter(SUMOTime timestep): myTime(timestep) { }
872 
874  int operator()(const MSTransportable* const c1, const MSTransportable* const c2) const;
875  private:
877  };
878 
879 
881  double getDepartPosBound(const MSVehicle& veh, bool upper = true) const;
882 
883 protected:
885  const int myNumericalID;
886 
888  std::shared_ptr<const std::vector<MSLane*> > myLanes;
889 
892 
895 
898 
901 
905  mutable std::set<int> myFailedInsertionMemory;
906 
908  std::vector<std::string> myCrossingEdges;
909 
912 
914 
917 
921 
923  mutable std::set<MSTransportable*, ComparatorNumericalIdLess> myPersons;
924 
926  mutable std::set<MSTransportable*, ComparatorNumericalIdLess> myContainers;
927 
930 
934 
938 
943 
948 
952 
955 
957  std::string myStreetName;
958 
960  std::string myEdgeType;
961 
963  const int myPriority;
964 
966  const double myDistance;
967 
969  double myWidth;
970 
972  double myLength;
973 
976 
979 
981  mutable bool myAmDelayed;
982 
985 
988 
990  std::vector<double> mySublaneSides;
991 
994 
996  typedef std::map< std::string, MSEdge* > DictType;
997 
1002 
1007 
1010 
1011 
1013  mutable std::map<SUMOVehicleClass, MSEdgeVector> myClassesSuccessorMap;
1014 
1016  mutable std::map<SUMOVehicleClass, MSConstEdgePairVector> myClassesViaSuccessorMap;
1017  mutable std::map<SUMOVehicleClass, MSConstEdgePairVector> myOrigClassesViaSuccessorMap;
1018 
1021 
1023  mutable std::vector<SUMOVehicle*> myWaiting;
1024 
1025 #ifdef HAVE_FOX
1027  mutable FXMutex myWaitingMutex;
1028 
1030  mutable FXMutex mySuccessorMutex;
1031 #endif
1032 
1033 private:
1034 
1037 
1041 
1043  MSEdge(const MSEdge&);
1044 
1046  MSEdge& operator=(const MSEdge&) = delete;
1047 
1048  void setBidiLanes();
1049 
1050  bool isSuperposable(const MSEdge* other);
1051 
1052  void addToAllowed(const SVCPermissions permissions, std::shared_ptr<const std::vector<MSLane*> > allowedLanes, AllowedLanesCont& laneCont) const;
1053 };
long long int SUMOTime
Definition: GUI.h:35
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
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:853
by_id_sorter()
constructor
Definition: MSEdge.h:856
int operator()(const MSEdge *const e1, const MSEdge *const e2) const
comparing operator
Definition: MSEdge.h:859
Sorts transportables by their positions.
Definition: MSEdge.h:868
transportable_by_position_sorter(SUMOTime timestep)
constructor
Definition: MSEdge.h:871
int operator()(const MSTransportable *const c1, const MSTransportable *const c2) const
comparing operator
Definition: MSEdge.cpp:1180
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:351
virtual void unlock() const
release exclusive access to the mesoscopic state
Definition: MSEdge.h:762
std::string myStreetName
the real-world name of this edge (need not be unique)
Definition: MSEdge.h:957
static const MSEdgeVector & getAllEdges()
Returns all edges with a numerical id.
Definition: MSEdge.cpp:1034
SUMOVehicle * getWaitingVehicle(MSTransportable *transportable, const double position) const
Definition: MSEdge.cpp:1420
virtual bool isSelected() const
whether this lane is selected in the GUI
Definition: MSEdge.h:754
void addToAllowed(const SVCPermissions permissions, std::shared_ptr< const std::vector< MSLane * > > allowedLanes, AllowedLanesCont &laneCont) const
Definition: MSEdge.cpp:300
void changeLanes(SUMOTime t) const
Performs lane changing on this edge.
Definition: MSEdge.cpp:840
const int myPriority
the priority of the edge (used during network creation)
Definition: MSEdge.h:963
double getBruttoOccupancy() const
Definition: MSEdge.cpp:1557
bool isConnectedTo(const MSEdge &destination, SUMOVehicleClass vclass) const
Definition: MSEdge.h:243
SVCPermissions myCombinedPermissions
The union of lane permissions for this edge.
Definition: MSEdge.h:942
int getNumSuccessors() const
Returns the number of edges that may be reached from this edge.
Definition: MSEdge.h:379
double getFlow() const
return flow based on meanSpead
Definition: MSEdge.cpp:1544
const MSEdge * myOtherTazConnector
the other taz-connector if this edge isTazConnector, otherwise nullptr
Definition: MSEdge.h:954
Boundary myBoundary
The bounding rectangle of end nodes incoming or outgoing edges for taz connectors or of my own start ...
Definition: MSEdge.h:1020
double myWidth
Edge width [m].
Definition: MSEdge.h:969
AllowedLanesByTarget myAllowedTargets
From target edge to lanes allowed to be used to reach it.
Definition: MSEdge.h:936
bool isCrossing() const
return whether this edge is a pedestrian crossing
Definition: MSEdge.h:273
MSLane * getDepartLane(MSVehicle &veh) const
Finds a depart lane for the given vehicle parameters.
Definition: MSEdge.cpp:616
SUMOTime myLastFailedInsertionTime
The time of last insertion failure.
Definition: MSEdge.h:900
std::set< MSTransportable *, ComparatorNumericalIdLess > myContainers
Containers on the edge.
Definition: MSEdge.h:926
void setOtherTazConnector(const MSEdge *edge)
Definition: MSEdge.h:295
int getPriority() const
Returns the priority of the edge.
Definition: MSEdge.h:328
static void clear()
Clears the dictionary.
Definition: MSEdge.cpp:1040
void inferEdgeType()
Definition: MSEdge.cpp:1575
static void setMesoIgnoredVClasses(SVCPermissions ignored)
Definition: MSEdge.h:804
const MSEdge * getOtherTazConnector() const
Definition: MSEdge.h:299
const int myNumericalID
This edge's numerical id.
Definition: MSEdge.h:885
void setJunctions(MSJunction *from, MSJunction *to)
Definition: MSEdge.cpp:1267
double getMeanSpeedBike() const
get the mean speed of all bicycles on this edge
Definition: MSEdge.cpp:959
static MSEdgeVector myEdges
Static list of edges.
Definition: MSEdge.h:1006
SVCPermissions getPermissions() const
Returns the combined permissions of all lanes of this edge.
Definition: MSEdge.h:634
AllowedLanesCont myAllowed
Associative container from vehicle class to allowed-lanes.
Definition: MSEdge.h:932
const MSEdgeVector & getPredecessors() const
Definition: MSEdge.h:409
double myEmptyTraveltime
the traveltime on the empty edge (cached value for speedup)
Definition: MSEdge.h:975
void updateMesoType()
update meso segment parameters
Definition: MSEdge.cpp:249
bool myAmFringe
whether this edge is at the network fringe
Definition: MSEdge.h:987
static double getTravelTimeAggregated(const MSEdge *const edge, const SUMOVehicle *const veh, double time)
Definition: MSEdge.cpp:1569
MSJunction * myToJunction
Definition: MSEdge.h:920
void checkAndRegisterBiDirEdge(const std::string &bidiID="")
check and register the opposite superposable edge if any
Definition: MSEdge.cpp:1325
virtual ~MSEdge()
Destructor.
Definition: MSEdge.cpp:94
double getDepartPosBound(const MSVehicle &veh, bool upper=true) const
return upper bound for the depart position on this edge
Definition: MSEdge.cpp:558
const std::string & getStreetName() const
Returns the street name of the edge.
Definition: MSEdge.h:313
const double myDistance
the kilometrage/mileage at the start of the edge
Definition: MSEdge.h:966
ReversedEdge< MSEdge, SUMOVehicle > * getReversedRoutingEdge() const
Definition: MSEdge.h:835
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:1625
MSLane * getDepartLaneMeso(SUMOVehicle &veh) const
consider given departLane parameter (only for validating speeds)
Definition: MSEdge.cpp:605
bool hasTransientPermissions() const
Definition: MSEdge.cpp:1619
const MSEdge * myBidiEdge
the oppositing superposable edge
Definition: MSEdge.h:1036
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:450
static double getTravelTimeStatic(const MSEdge *const edge, const SUMOVehicle *const veh, double time)
Returns the travel time for the given edge.
Definition: MSEdge.h:497
std::string myEdgeType
the type of the edge (optionally used during network creation)
Definition: MSEdge.h:960
bool isWalkingArea() const
return whether this edge is walking area
Definition: MSEdge.h:287
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:1462
bool isDelayed() const
Definition: MSEdge.h:719
const MSEdge * getOppositeEdge() const
Returns the opposite direction edge if on exists else a nullptr.
Definition: MSEdge.cpp:1288
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:1058
double getLengthGeometryFactor() const
return shape.length() / myLength
Definition: MSEdge.cpp:1113
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:1191
bool isFringe() const
return whether this edge is at the fringe of the network
Definition: MSEdge.h:746
std::vector< SUMOVehicle * > myWaiting
List of waiting vehicles.
Definition: MSEdge.h:1023
const MSEdge * getNormalSuccessor() const
if this edge is an internal edge, return its first normal successor, otherwise the edge itself
Definition: MSEdge.cpp:895
void rebuildAllowedLanes(const bool onInit=false)
Definition: MSEdge.cpp:322
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:479
const std::set< MSTransportable *, ComparatorNumericalIdLess > & getPersons() const
Returns this edge's persons set.
Definition: MSEdge.h:204
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:870
bool isNormal() const
return whether this edge is an internal edge
Definition: MSEdge.h:263
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:629
std::vector< MSTransportable * > getSortedPersons(SUMOTime timestep, bool includeRiding=false) const
Returns this edge's persons sorted by pos.
Definition: MSEdge.cpp:1154
bool isSuperposable(const MSEdge *other)
Definition: MSEdge.cpp:1380
bool validateDepartSpeed(SUMOVehicle &v) const
check whether the given departSpeed is valid for this edge
Definition: MSEdge.cpp:685
double getDistanceTo(const MSEdge *other, const bool doBoundaryEstimate=false) const
optimistic air distance heuristic for use in routing
Definition: MSEdge.cpp:1081
void setMaxSpeed(double val, double jamThreshold=-1)
Sets a new maximum speed for all lanes (used by TraCI and MSCalibrator)
Definition: MSEdge.cpp:1125
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:1021
MSLaneChanger * myLaneChanger
This member will do the lane-change.
Definition: MSEdge.h:891
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
Definition: MSEdge.h:168
double getOccupancy() const
return mean occupancy on this edges lanes or segments
Definition: MSEdge.cpp:1522
const MSConstEdgePairVector & getViaSuccessors(SUMOVehicleClass vClass=SVC_IGNORING, bool ignoreTransientPermissions=false) const
Returns the following edges with internal vias, restricted by vClass.
Definition: MSEdge.cpp:1236
std::vector< MSTransportable * > getSortedContainers(SUMOTime timestep, bool includeRiding=false) const
Returns this edge's containers sorted by pos.
Definition: MSEdge.cpp:1172
const SumoXMLEdgeFunc myFunction
the purpose of the edge
Definition: MSEdge.h:894
void recalcCache()
Recalculates the cached values.
Definition: MSEdge.cpp:119
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:1106
SVCPermissions myOriginalCombinedPermissions
The original union of lane permissions for this edge (before temporary modifications)
Definition: MSEdge.h:947
const MSJunction * getFromJunction() const
Definition: MSEdge.h:414
bool myAmDelayed
whether this edge had a vehicle with less than max speed on it
Definition: MSEdge.h:981
SVCPermissions myOriginalMinimumPermissions
The original intersection of lane permissions for this edge (before temporary modifications)
Definition: MSEdge.h:945
std::map< SUMOVehicleClass, MSEdgeVector > myClassesSuccessorMap
The successors available for a given vClass.
Definition: MSEdge.h:1013
SUMOTime decVaporization(SUMOTime t)
Disables vaporization.
Definition: MSEdge.cpp:519
MSEdgeVector myPredecessors
The preceeding edges.
Definition: MSEdge.h:916
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:1310
void rebuildAllowedTargets(const bool updateVehicles=true)
Definition: MSEdge.cpp:383
bool hasLaneChanger() const
Definition: MSEdge.h:723
static SVCPermissions myMesoIgnoredVClasses
Definition: MSEdge.h:1008
std::vector< std::pair< SVCPermissions, std::shared_ptr< const std::vector< MSLane * > > > > AllowedLanesCont
"Map" from vehicle class to allowed lanes
Definition: MSEdge.h:80
double getLength() const
return the length of the edge
Definition: MSEdge.h:670
void initialize(const std::vector< MSLane * > *lanes)
Initialize the edge.
Definition: MSEdge.cpp:102
bool myHaveTransientPermissions
whether transient permission changes were applied to this edge or a predecessor
Definition: MSEdge.h:950
std::vector< std::string > myCrossingEdges
The crossed edges id for a crossing edge. On not crossing edges it is empty.
Definition: MSEdge.h:908
virtual void closeBuilding()
Definition: MSEdge.cpp:205
static SVCPermissions getMesoPermissions(SVCPermissions p, SVCPermissions ignoreIgnored=0)
Definition: MSEdge.cpp:315
bool canChangeToOpposite() const
whether this edge allows changing to the opposite direction edge
Definition: MSEdge.cpp:1278
std::set< int > myFailedInsertionMemory
A cache for the rejected insertion attempts. Used to assure that no further insertion attempts are ma...
Definition: MSEdge.h:905
double getMeanSpeed() const
get the mean speed
Definition: MSEdge.cpp:905
static DictType myDict
Static dictionary to associate string-ids with objects.
Definition: MSEdge.h:1001
std::set< MSTransportable *, ComparatorNumericalIdLess > myPersons
Persons on the edge for drawing and pushbutton.
Definition: MSEdge.h:923
bool isTazConnector() const
Definition: MSEdge.h:291
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:1612
MSConstEdgePairVector myViaSuccessors
Definition: MSEdge.h:913
double getMinimumTravelTime(const SUMOVehicle *const veh) const
returns the minimum travel time for the given vehicle
Definition: MSEdge.h:476
void setBidiLanes()
Definition: MSEdge.cpp:1355
MSEdge & operator=(const MSEdge &)=delete
assignment operator.
MSEdgeVector mySuccessors
The succeeding edges.
Definition: MSEdge.h:911
bool isRoundabout() const
Definition: MSEdge.h:706
bool isInternal() const
return whether this edge is an internal edge
Definition: MSEdge.h:268
bool prohibits(const SUMOVehicle *const vehicle) const
Returns whether the vehicle (class) is not allowed on the edge.
Definition: MSEdge.h:612
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:456
double getWidth() const
Returns the edges's width (sum over all lanes)
Definition: MSEdge.h:641
double getCurrentTravelTime(const double minSpeed=NUMERICAL_EPS) const
Computes and returns the current travel time for this edge.
Definition: MSEdge.cpp:979
std::map< SUMOVehicleClass, MSConstEdgePairVector > myOrigClassesViaSuccessorMap
Definition: MSEdge.h:1017
AllowedLanesByTarget myOrigAllowedTargets
Definition: MSEdge.h:937
int getNumericalID() const
Returns the numerical id of the edge.
Definition: MSEdge.h:306
void resetTAZ(MSJunction *junction)
Definition: MSEdge.cpp:182
bool isVaporizing() const
Returns whether vehicles on this edge shall be vaporized.
Definition: MSEdge.h:434
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:723
static const Position getStopPosition(const SUMOVehicleParameter::Stop &stop)
return the coordinates of the center of the given stop
Definition: MSEdge.cpp:1100
void addWaiting(SUMOVehicle *vehicle) const
Adds a vehicle to the list of waiting vehicles.
Definition: MSEdge.cpp:1399
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:462
ReversedEdge< MSEdge, SUMOVehicle > * myReversedRoutingEdge
a reversed version for backward routing
Definition: MSEdge.h:1039
double getTimePenalty() const
Definition: MSEdge.h:486
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:995
std::vector< const SUMOVehicle * > getVehicles() const
return vehicles on this edges lanes or segments
Definition: MSEdge.cpp:1443
static void insertIDs(std::vector< std::string > &into)
Inserts IDs of all known edges into the given vector.
Definition: MSEdge.cpp:1050
double getVehicleMaxSpeed(const SUMOTrafficObject *const veh) const
Returns the maximum speed the vehicle may use on this edge.
Definition: MSEdge.cpp:1118
SUMOTime incVaporization(SUMOTime t)
Enables vaporization.
Definition: MSEdge.cpp:512
MSJunction * myFromJunction
the junctions for this edge
Definition: MSEdge.h:919
double getMeanFriction() const
get the mean friction over the lanes
Definition: MSEdge.cpp:946
std::map< std::string, MSEdge * > DictType
definition of the static dictionary type
Definition: MSEdge.h:996
bool hasMinorLink() const
whether any lane has a minor link
Definition: MSEdge.cpp:1298
const std::vector< std::string > & getCrossingEdges() const
Gets the crossed edge ids.
Definition: MSEdge.h:359
std::map< SUMOVehicleClass, MSConstEdgePairVector > myClassesViaSuccessorMap
The successors available for a given vClass.
Definition: MSEdge.h:1016
const MSEdge * getNormalBefore() const
if this edge is an internal edge, return its first normal predecessor, otherwise the edge itself
Definition: MSEdge.cpp:885
int getVehicleNumber() const
return total number of vehicles on this edges lanes or segments
Definition: MSEdge.cpp:1480
void markDelayed() const
Definition: MSEdge.h:714
const std::string & getEdgeType() const
Returns the type of the edge.
Definition: MSEdge.h:319
RailEdge< MSEdge, SUMOVehicle > * getRailwayRoutingEdge() const
Definition: MSEdge.h:842
virtual void removeTransportable(MSTransportable *t) const
Definition: MSEdge.cpp:1145
SUMOTime getLastFailedInsertionTime() const
Returns the last time a vehicle could not be inserted.
Definition: MSEdge.h:580
const MSJunction * getToJunction() const
Definition: MSEdge.h:418
SumoXMLEdgeFunc getFunction() const
Returns the edge type (SumoXMLEdgeFunc)
Definition: MSEdge.h:258
bool allowsLaneChanging() const
Definition: MSEdge.cpp:278
bool isEmpty() const
whether this edge has no vehicles
Definition: MSEdge.cpp:1486
MSEdge(const std::string &id, int numericalID, const SumoXMLEdgeFunc function, const std::string &streetName, const std::string &edgeType, int priority, double distance)
Constructor.
Definition: MSEdge.cpp:67
const MSEdge * getInternalFollowingEdge(const MSEdge *followerAfterInternal, SUMOVehicleClass vClass) const
Definition: MSEdge.cpp:848
void buildLaneChanger()
Has to be called after all sucessors and predecessors have been set (after closeBuilding())
Definition: MSEdge.cpp:258
const std::vector< double > getSubLaneSides() const
Returns the right side offsets of this edge's sublanes.
Definition: MSEdge.h:646
double getRoutingSpeed() const
Returns the averaged speed used by the routing device.
Definition: MSEdge.cpp:989
virtual void lock() const
grant exclusive access to the mesoscopic state
Definition: MSEdge.h:759
void removeWaiting(const SUMOVehicle *vehicle) const
Removes a vehicle from the list of waiting vehicles.
Definition: MSEdge.cpp:1408
bool hasDistance() const
Definition: MSEdge.h:343
MSLane * getFirstAllowed(SUMOVehicleClass vClass, bool defaultFirst=false) const
Definition: MSEdge.cpp:674
const MSEdge * getBidiEdge() const
return opposite superposable/congruent edge, if it exist and 0 else
Definition: MSEdge.h:282
std::vector< double > mySublaneSides
the right side for each sublane on this edge
Definition: MSEdge.h:990
const MSEdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges, restricted by vClass.
Definition: MSEdge.cpp:1206
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:888
AllowedLanesCont myOrigAllowed
Definition: MSEdge.h:933
double getWaitingSeconds() const
return accumated waiting time for all vehicles on this edges lanes or segments
Definition: MSEdge.cpp:1506
int myVaporizationRequests
Vaporizer counter.
Definition: MSEdge.h:897
int getNumPredecessors() const
Returns the number of edges this edge is connected to.
Definition: MSEdge.h:401
double myTimePenalty
flat penalty when computing traveltime
Definition: MSEdge.h:978
SVCPermissions myMinimumPermissions
The intersection of lane permissions for this edge.
Definition: MSEdge.h:940
MSLane * getFreeLane(const std::vector< MSLane * > *allowed, const SUMOVehicleClass vclass, double departPos) const
Finds the emptiest lane allowing the vehicle class.
Definition: MSEdge.cpp:526
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:710
bool myAmRoundabout
whether this edge belongs to a roundabout
Definition: MSEdge.h:984
virtual void addTransportable(MSTransportable *t) const
Definition: MSEdge.cpp:1136
double getDistance() const
Returns the kilometrage/mileage encoding at the start of the edge (negative values encode descending ...
Definition: MSEdge.h:335
void setLastFailedInsertionTime(SUMOTime time) const
Sets the last time a vehicle could not be inserted.
Definition: MSEdge.h:588
RailEdge< MSEdge, SUMOVehicle > * myRailwayRoutingEdge
Definition: MSEdge.h:1040
double myLength
the length of the edge (cached value for speedup)
Definition: MSEdge.h:972
The base class for an intersection.
Definition: MSJunction.h:58
Performs lane changing of vehicles.
Definition: MSLaneChanger.h:45
MSVehicle * veh(ConstChangerIt ce) const
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:184
static double getTravelTime(const MSEdge *const e, const SUMOVehicle *const v, double t)
Returns the travel time to pass an edge.
Definition: MSNet.cpp:164
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.
Definition: OutputDevice.h:61
An upper class for objects with additional parameters.
Definition: Parameterised.h:41
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37
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.
Representation of a vehicle.
Definition: SUMOVehicle.h:62
Definition of vehicle stop (position and duration)
Structure representing possible vehicle parameter.