Eclipse SUMO - Simulation of Urban MObility
MSParkingArea.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 // Copyright (C) 2015-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 /****************************************************************************/
19 // A area where vehicles can park next to the road
20 /****************************************************************************/
21 #pragma once
22 #include <config.h>
23 
24 #include <vector>
25 #include <algorithm>
26 #include <map>
27 #include <string>
29 #include <utils/common/Named.h>
31 #include "MSStoppingPlace.h"
32 
33 
34 // ===========================================================================
35 // class declarations
36 // ===========================================================================
37 class MSLane;
38 class SUMOVehicle;
39 class MSTransportable;
40 class MSBaseVehicle;
41 class Position;
42 class Command;
43 
44 
45 // ===========================================================================
46 // class definitions
47 // ===========================================================================
61 public:
62 
77  MSParkingArea(const std::string& id,
78  const std::vector<std::string>& lines,
79  const std::vector<std::string>& badges, MSLane& lane,
80  double begPos, double endPos, int capacity,
81  double width, double length, double angle, const std::string& name,
82  bool onRoad,
83  const std::string& departPos,
84  bool lefthand);
85 
87  virtual ~MSParkingArea();
88 
90  int getCapacity() const;
91 
93  bool parkOnRoad() const;
94 
96  int getLotIndex(const SUMOVehicle* veh) const;
97 
104  int getOccupancy() const;
105 
107  int getOccupancyIncludingBlocked() const;
108 
110  int getLastStepOccupancy() const;
111 
113  void accept(std::string badge);
114 
116  void accept(std::vector<std::string> badges);
117 
119  void refuse(std::string badge);
120 
122  bool accepts(MSBaseVehicle* veh) const;
123 
133  void enter(SUMOVehicle* veh);
134 
144  void leaveFrom(SUMOVehicle* what);
145 
153  SUMOTime updateOccupancy(SUMOTime currentTime);
154 
156  double getLastFreePos(const SUMOVehicle& forVehicle, double brakePos = 0) const;
157 
163  double getLastFreePosWithReservation(SUMOTime t, const SUMOVehicle& forVehicle, double brakePos);
164 
166  Position getVehiclePosition(const SUMOVehicle& forVehicle) const;
167 
169  double getInsertionPosition(const SUMOVehicle& forVehicle) const;
170 
172  double getVehicleAngle(const SUMOVehicle& forVehicle) const;
173 
175  double getVehicleSlope(const SUMOVehicle& forVehicle) const;
176 
182  int getLastFreeLotAngle() const;
183 
189  double getLastFreeLotGUIAngle() const;
190 
192  int getManoeuverAngle(const SUMOVehicle& forVehicle) const;
193 
195  double getGUIAngle(const SUMOVehicle& forVehicle) const;
196 
208  virtual void addLotEntry(double x, double y, double z,
209  double width, double length,
210  double angle, double slope);
211 
213  double getWidth() const;
214 
216  double getLength() const;
217 
219  double getAngle() const;
220 
222  void notifyEgressBlocked();
223 
225  int getNumAlternatives() const;
226 
228  void setNumAlternatives(int alternatives);
229 
230 protected:
237 
239  LotSpaceDefinition(int index, SUMOVehicle* vehicle, double x, double y, double z, double rotation, double slope, double width, double length);
240 
242  const int index;
243 
246 
249 
251  const double rotation;
252 
254  const double slope;
255 
257  const double width;
258 
260  const double length;
261 
263  double endPos;
264 
267 
269  bool sideIsLHS;
270  };
271 
278  void computeLastFreePos();
279 
282 
285 
288 
290  bool myOnRoad;
291 
293  double myWidth;
294 
296  double myLength;
297 
299  double myAngle;
300 
302  std::vector<LotSpaceDefinition> mySpaceOccupancies;
303 
306 
308  std::set<std::string> myAcceptedBadges;
309 
312 
315 
318 
321 
324 
327 
329  double myDepartPos;
331 
334 
335 private:
337  MSParkingArea(const MSParkingArea&) = delete;
338 
341 };
long long int SUMOTime
Definition: GUI.h:35
DepartPosDefinition
Possible ways to choose the departure position.
Base (microsim) event class.
Definition: Command.h:50
The base class for microscopic and mesoscopic vehicles.
Definition: MSBaseVehicle.h:55
Representation of a lane in the micro simulation.
Definition: MSLane.h:84
A lane area vehicles can halt at.
Definition: MSParkingArea.h:60
void notifyEgressBlocked()
update state so that vehicles wishing to enter cooperate with exiting vehicles
double getAngle() const
Returns the lot rectangle angle.
void leaveFrom(SUMOVehicle *what)
Called if a vehicle leaves this stop.
int getNumAlternatives() const
get number alternatives
void refuse(std::string badge)
Remove the access right for the given badge.
int myReservations
number of reservations
int myCapacity
Stop area total capacity.
int getCapacity() const
Returns the area capacity.
void enter(SUMOVehicle *veh)
Called if a vehicle enters this stop.
MSParkingArea(const MSParkingArea &)=delete
Invalidated copy constructor.
int myLastStepOccupancy
Changes to the occupancy in the current time step.
bool myOnRoad
Whether vehicles stay on the road.
int myLastFreeLot
Last free lot number (-1 no free lot)
void setNumAlternatives(int alternatives)
set number alternatives
PositionVector myShape
The roadside shape of this parkingArea.
double getLength() const
Returns the lot rectangle length.
virtual void addLotEntry(double x, double y, double z, double width, double length, double angle, double slope)
Add a lot entry to parking area.
SUMOTime myReservationTime
track parking reservations from the lane for the current time step
double getWidth() const
Returns the lot rectangle width.
double getVehicleSlope(const SUMOVehicle &forVehicle) const
Returns the slope of parked vehicle.
int myRoadSideCapacity
Stop area capacity configured via roadsideCapacity.
int getLotIndex(const SUMOVehicle *veh) const
compute lot for this vehicle
virtual ~MSParkingArea()
Destructor.
SUMOTime updateOccupancy(SUMOTime currentTime)
Called at the end of the time step.
int getLastFreeLotAngle() const
Return the angle of myLastFreeLot - the next parking lot only expected to be called after we have est...
double myDepartPos
custom departPos
double myAngle
The default angle of each parking space.
bool parkOnRoad() const
whether vehicles park on the road
DepartPosDefinition myDepartPosDefinition
double myReservationMaxLength
reservation max length
int myNumAlternatives
the number of alternative parkingAreas that are assigned to parkingAreaRerouter
double myWidth
The default width of each parking space.
bool accepts(MSBaseVehicle *veh) const
Return the parking accepts the vehicle (due to its given badges)
double myLength
The default length of each parking space.
void computeLastFreePos()
Computes the last free position on this stop.
int getOccupancyIncludingBlocked() const
Returns the area occupancy.
double getLastFreePosWithReservation(SUMOTime t, const SUMOVehicle &forVehicle, double brakePos)
Returns the last free position on this stop including reservations from the current lane and time ste...
double getLastFreeLotGUIAngle() const
Return the GUI angle of myLastFreeLot - the angle the GUI uses to rotate into the next parking lot as...
int getManoeuverAngle(const SUMOVehicle &forVehicle) const
Return the manoeuver angle of the lot where the vehicle is parked.
int getLastStepOccupancy() const
Returns the area occupancy at the end of the last simulation step.
MSParkingArea & operator=(const MSParkingArea &)=delete
Invalidated assignment operator.
void accept(std::string badge)
Add a badge to the accepted set.
int getOccupancy() const
Returns the area occupancy.
double getVehicleAngle(const SUMOVehicle &forVehicle) const
Returns the angle of parked vehicle.
Command * myUpdateEvent
Event for updating the occupancy.
std::vector< LotSpaceDefinition > mySpaceOccupancies
All the spaces in this parking area.
double getInsertionPosition(const SUMOVehicle &forVehicle) const
Returns the insertion position of a parked vehicle.
MSParkingArea(const std::string &id, const std::vector< std::string > &lines, const std::vector< std::string > &badges, MSLane &lane, double begPos, double endPos, int capacity, double width, double length, double angle, const std::string &name, bool onRoad, const std::string &departPos, bool lefthand)
Constructor.
Position getVehiclePosition(const SUMOVehicle &forVehicle) const
Returns the position of parked vehicle.
std::set< std::string > myAcceptedBadges
The parking badges to grant access.
double getGUIAngle(const SUMOVehicle &forVehicle) const
Return the GUI angle of the lot where the vehicle is parked.
bool myEgressBlocked
whether a vehicle wants to exit but is blocked
A lane area vehicles can halt at.
double getLastFreePos() const
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37
A list of positions.
Representation of a vehicle.
Definition: SUMOVehicle.h:60
Representation of a single lot space.
const double slope
The slope.
const Position position
The position of the vehicle when parking in this space.
bool sideIsLHS
Whether the lot is on the LHS of the lane relative to the lane direction.
const int index
the running index
const double width
The width.
double manoeuverAngle
The angle between lane and lot through which a vehicle must manoeuver to enter the lot.
const double rotation
The rotation.
double endPos
The position along the lane that the vehicle needs to reach for entering this lot.
LotSpaceDefinition()
default constructor
const double length
The length.
const SUMOVehicle * vehicle
The last parked vehicle or 0.