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  friend class NLTriggerBuilder;
91 
93  int getCapacity() const;
94 
96  bool parkOnRoad() const;
97 
99  int getLotIndex(const SUMOVehicle* veh) const;
100 
107  int getOccupancy() const;
108 
110  int getOccupancyIncludingBlocked() const;
111 
113  int getLastStepOccupancy() const;
114 
116  void accept(std::string badge);
117 
119  void accept(std::vector<std::string> badges);
120 
122  void refuse(std::string badge);
123 
125  bool accepts(MSBaseVehicle* veh) const;
126 
136  void enter(SUMOVehicle* veh);
137 
147  void leaveFrom(SUMOVehicle* what);
148 
156  SUMOTime updateOccupancy(SUMOTime currentTime);
157 
159  double getLastFreePos(const SUMOVehicle& forVehicle, double brakePos = 0) const;
160 
166  double getLastFreePosWithReservation(SUMOTime t, const SUMOVehicle& forVehicle, double brakePos);
167 
169  Position getVehiclePosition(const SUMOVehicle& forVehicle) const;
170 
172  double getInsertionPosition(const SUMOVehicle& forVehicle) const;
173 
175  double getVehicleAngle(const SUMOVehicle& forVehicle) const;
176 
178  double getVehicleSlope(const SUMOVehicle& forVehicle) const;
179 
185  int getLastFreeLotAngle() const;
186 
192  double getLastFreeLotGUIAngle() const;
193 
195  int getManoeuverAngle(const SUMOVehicle& forVehicle) const;
196 
198  double getGUIAngle(const SUMOVehicle& forVehicle) const;
199 
211  virtual void addLotEntry(double x, double y, double z,
212  double width, double length,
213  double angle, double slope);
214 
216  double getWidth() const;
217 
219  double getLength() const;
220 
222  double getAngle() const;
223 
225  void notifyEgressBlocked();
226 
228  int getNumAlternatives() const;
229 
231  void setNumAlternatives(int alternatives);
232 
233 protected:
235  void setRoadsideCapacity(int capactity);
236 
237 protected:
244 
246  LotSpaceDefinition(int index, SUMOVehicle* vehicle, double x, double y, double z, double rotation, double slope, double width, double length);
247 
249  const int index;
250 
253 
256 
258  const double rotation;
259 
261  const double slope;
262 
264  const double width;
265 
267  const double length;
268 
270  double endPos;
271 
274 
276  bool sideIsLHS;
277  };
278 
285  void computeLastFreePos();
286 
289 
292 
295 
297  bool myOnRoad;
298 
300  double myWidth;
301 
303  double myLength;
304 
306  double myAngle;
307 
309  std::vector<LotSpaceDefinition> mySpaceOccupancies;
310 
313 
315  std::set<std::string> myAcceptedBadges;
316 
319 
322 
325 
328 
331 
334 
336  double myDepartPos;
338 
341 
342 private:
344  MSParkingArea(const MSParkingArea&) = delete;
345 
348 };
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:57
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.
void setRoadsideCapacity(int capactity)
overwrite the capacity (caution: will delete ANY previous parking space definitions)
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
Builds trigger objects for microsim.
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:62
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.