Eclipse SUMO - Simulation of Urban MObility
MSStoppingPlace.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2005-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 /****************************************************************************/
20 // A lane area vehicles can halt at
21 /****************************************************************************/
22 #pragma once
23 #include <config.h>
24 
25 #include <vector>
26 #include <algorithm>
27 #include <map>
28 #include <string>
29 #include <utils/common/Named.h>
31 #include <utils/common/RGBColor.h>
32 
33 
34 // ===========================================================================
35 // class declarations
36 // ===========================================================================
37 class MSLane;
38 class MSEdge;
39 class SUMOVehicle;
40 class MSTransportable;
41 class Position;
42 
43 
44 // ===========================================================================
45 // class definitions
46 // ===========================================================================
59 class MSStoppingPlace : public Named, public Parameterised {
60 public:
61  enum class AccessExit {
62  PLATFORM,
63  DOORS,
64  CARRIAGE
65  };
66 
67  struct Access {
68  MSLane* const lane;
69  const double startPos;
70  const double endPos;
71  const double length;
73  };
74 
84  MSStoppingPlace(const std::string& id,
85  SumoXMLTag element,
86  const std::vector<std::string>& lines, MSLane& lane,
87  double begPos, double endPos,
88  const std::string name = "",
89  int capacity = 0,
90  double parkingLength = 0,
91  const RGBColor& color = RGBColor::INVISIBLE);
92 
93 
94 
96  virtual ~MSStoppingPlace();
97 
98 
103  const MSLane& getLane() const;
104 
105 
110  double getBeginLanePosition() const;
111 
112 
117  double getEndLanePosition() const;
118 
120  Position getCenterPos() const;
121 
133  void enter(SUMOVehicle* veh, bool parking);
134 
135 
145  void leaveFrom(SUMOVehicle* what);
146 
147 
154  double getLastFreePos(const SUMOVehicle& forVehicle, double brakePos = 0) const;
155 
157  bool fits(double pos, const SUMOVehicle& veh) const;
158 
164 
169  double getWaitingPositionOnLane(MSTransportable* t) const;
170 
171 
176  double getStoppingPosition(const SUMOVehicle* veh) const;
177 
181  return (int)myWaitingTransportables.size();
182  }
183 
186  std::vector<const MSTransportable*> getTransportables() const;
187 
191  return (int)myEndPositions.size();
192  }
193 
194  double getLastFreePos() const {
195  return myLastFreePos;
196  }
197 
199  bool hasSpaceForTransportable() const;
200 
202  bool addTransportable(const MSTransportable* p);
203 
205  void removeTransportable(const MSTransportable* p);
206 
208  virtual bool addAccess(MSLane* const lane, const double startPos, const double endPos, double length, const MSStoppingPlace::AccessExit exit);
209 
211  const std::vector<Access>& getAllAccessPos() const {
212  return myAccessPos;
213  }
214 
216  double getAccessPos(const MSEdge* edge, SumoRNG* rng = nullptr) const;
217 
219  const Access* getAccess(const MSEdge* edge) const;
220 
221  const std::string& getMyName() const;
222 
225  return myElement;
226  }
227 
228  const RGBColor& getColor() const;
229 
230  static int getTransportablesAbreast(double length, SumoXMLTag element);
231 
233  std::vector<const SUMOVehicle*> getStoppedVehicles() const;
234 
236  inline int getNumWaitingPersons() const {
237  return (int)myWaitingTransportables.size();
238  }
239 
241  inline int getWaitingCapacity() const {
243  }
244 
246  void getWaitingPersonIDs(std::vector<std::string>& into) const;
247 
249  void clearState();
250 
251 protected:
258  void computeLastFreePos();
259 
260  int getTransportablesAbreast() const;
261 
262 protected:
265 
267  std::vector<std::string> myLines;
268 
270  std::map<const SUMOVehicle*, std::pair<double, double>, ComparatorNumericalIdLess> myEndPositions;
271 
273  const MSLane& myLane;
274 
276  const double myBegPos;
277 
279  const double myEndPos;
280 
285 
287  const std::string myName;
288 
291 
293  const double myParkingFactor;
294 
297 
299  const double myTransportableDepth;
300 
302  std::map<const MSTransportable*, int> myWaitingTransportables;
303  std::set<int> myWaitingSpots;
304 
306  std::vector<Access> myAccessPos;
307 
308 private:
311 
314 
315 
316 };
SumoXMLTag
Numbers representing SUMO-XML - element names.
A road/street connecting two junctions.
Definition: MSEdge.h:77
Representation of a lane in the micro simulation.
Definition: MSLane.h:84
A lane area vehicles can halt at.
std::vector< const SUMOVehicle * > getStoppedVehicles() const
get list of vehicles waiting at this stop
int getStoppedVehicleNumber() const
Returns the number of stopped vehicles waiting on this stop.
const SUMOVehicle * myLastParking
The length of the last parking vehicle (or 0 if there is none)
const SumoXMLTag myElement
the type of stopping place
double getWaitingPositionOnLane(MSTransportable *t) const
Returns the lane position corresponding to getWaitPosition()
const Access * getAccess(const MSEdge *edge) const
the access on the given edge to the stop, nullptr if there is none
std::map< const MSTransportable *, int > myWaitingTransportables
Persons waiting at this stop (mapped to waiting position)
const std::vector< Access > & getAllAccessPos() const
lanes and positions connected to this stop
const double myBegPos
The begin position this bus stop is located at.
double getBeginLanePosition() const
Returns the begin position of this stop.
int getNumWaitingPersons() const
get number of persons waiting at this stop
const MSLane & myLane
The lane this bus stop is located at.
bool hasSpaceForTransportable() const
whether there is still capacity for more transportables
std::map< const SUMOVehicle *, std::pair< double, double >, ComparatorNumericalIdLess > myEndPositions
A map from objects (vehicles) to the areas they acquire after entering the stop.
int getTransportablesAbreast() const
std::vector< const MSTransportable * > getTransportables() const
Returns the tranportables waiting on this stop.
void clearState()
Remove all vehicles before quick-loading state.
int getTransportableNumber() const
Returns the number of transportables waiting on this stop.
std::set< int > myWaitingSpots
const double myParkingFactor
the scaled space capacity for parking vehicles
Position getCenterPos() const
the position in the middle of the stop shape
bool fits(double pos, const SUMOVehicle &veh) const
return whether the given vehicle fits at the given position
MSStoppingPlace(const MSStoppingPlace &)
Invalidated copy constructor.
const std::string myName
The name of the stopping place.
int getWaitingCapacity() const
get number of persons that can wait at this stop
MSStoppingPlace(const std::string &id, SumoXMLTag element, const std::vector< std::string > &lines, MSLane &lane, double begPos, double endPos, const std::string name="", int capacity=0, double parkingLength=0, const RGBColor &color=RGBColor::INVISIBLE)
Constructor.
SumoXMLTag getElement() const
return the type of this stopping place
std::vector< Access > myAccessPos
lanes and positions connected to this stop
const double myEndPos
The end position this bus stop is located at.
double getEndLanePosition() const
Returns the end position of this stop.
const RGBColor myColor
The color of the stopping place.
std::vector< std::string > myLines
The list of lines that are assigned to this stop.
void enter(SUMOVehicle *veh, bool parking)
Called if a vehicle enters this stop.
double getStoppingPosition(const SUMOVehicle *veh) const
For vehicles at the stop this gives the the actual stopping position of the vehicle....
void removeTransportable(const MSTransportable *p)
Removes a transportable from this stop.
virtual ~MSStoppingPlace()
Destructor.
void computeLastFreePos()
Computes the last free position on this stop.
const RGBColor & getColor() const
void getWaitingPersonIDs(std::vector< std::string > &into) const
get IDs of persons waiting at this stop
const MSLane & getLane() const
Returns the lane this stop is located at.
const int myTransportableCapacity
The number of transportables that can wait here.
const std::string & getMyName() const
Position getWaitPosition(MSTransportable *person) const
Returns the next free waiting place for pedestrians / containers.
double getAccessPos(const MSEdge *edge, SumoRNG *rng=nullptr) const
the position on the given edge which is connected to this stop, -1 on failure
virtual bool addAccess(MSLane *const lane, const double startPos, const double endPos, double length, const MSStoppingPlace::AccessExit exit)
adds an access point to this stop
MSStoppingPlace & operator=(const MSStoppingPlace &)
Invalidated assignment operator.
bool addTransportable(const MSTransportable *p)
adds a transportable to this stop
double myLastFreePos
The last free position at this stop (variable)
double getLastFreePos() const
const double myTransportableDepth
row depth of waiting transportables
void leaveFrom(SUMOVehicle *what)
Called if a vehicle leaves this stop.
Base class for objects which have an id.
Definition: Named.h:54
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
static const RGBColor INVISIBLE
Definition: RGBColor.h:195
Representation of a vehicle.
Definition: SUMOVehicle.h:62
Function-object for stable sorting of objects with numerical ids.
Definition: Named.h:39
const AccessExit exit