Eclipse SUMO - Simulation of Urban MObility
ROPerson.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2002-2022 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 person as used by router
20 /****************************************************************************/
21 #pragma once
22 #include <config.h>
23 
24 #include <string>
25 #include <iostream>
26 #include <utils/common/StdDefs.h>
27 #include <utils/common/SUMOTime.h>
30 #include "RORoutable.h"
31 #include "RORouteDef.h"
32 #include "ROVehicle.h"
33 
34 
35 // ===========================================================================
36 // class declarations
37 // ===========================================================================
38 class OutputDevice;
39 class ROEdge;
40 
41 
42 // ===========================================================================
43 // class definitions
44 // ===========================================================================
49 class ROPerson : public RORoutable {
50 
51 public:
52  class PlanItem;
58  ROPerson(const SUMOVehicleParameter& pars, const SUMOVTypeParameter* type);
59 
61  virtual ~ROPerson();
62 
63  static void addTrip(std::vector<PlanItem*>& plan, const std::string& id,
64  const ROEdge* const from, const ROEdge* const to, const SVCPermissions modeSet, const std::string& vTypes,
65  const double departPos, const std::string& stopOrigin,
66  const double arrivalPos, const std::string& busStop,
67  double walkFactor, const std::string& group);
68 
69  static void addRide(std::vector<PlanItem*>& plan, const ROEdge* const from, const ROEdge* const to, const std::string& lines,
70  double arrivalPos, const std::string& destStop, const std::string& group);
71 
72  static void addWalk(std::vector<PlanItem*>& plan, const ConstROEdgeVector& edges, const double duration, const double speed,
73  const double departPos, const double arrivalPos, const std::string& busStop);
74 
75  static void addStop(std::vector<PlanItem*>& plan, const SUMOVehicleParameter::Stop& stopPar, const ROEdge* const stopEdge);
76 
77  class TripItem;
82  class PlanItem {
83  public:
85  virtual ~PlanItem() {}
86 
87  virtual PlanItem* clone() const = 0;
88 
89  virtual void addTripItem(TripItem* /* tripIt */) {
90  throw ProcessError();
91  }
92  virtual const ROEdge* getOrigin() const = 0;
93  virtual const ROEdge* getDestination() const = 0;
94  virtual double getDestinationPos() const = 0;
95  virtual void saveVehicles(OutputDevice& /* os */, OutputDevice* const /* typeos */, bool /* asAlternatives */, OptionsCont& /* options */) const {}
96  virtual void saveAsXML(OutputDevice& os, const bool extended, const bool asTrip, OptionsCont& options) const = 0;
97  virtual bool isStop() const {
98  return false;
99  }
100  virtual bool needsRouting() const {
101  return false;
102  }
103 
104  virtual SUMOTime getDuration() const = 0;
105  virtual const std::string& getStopDest() const {
107  }
108 
109  static const std::string UNDEFINED_STOPPING_PLACE;
110  };
111 
116  class Stop : public PlanItem {
117  public:
118  Stop(const SUMOVehicleParameter::Stop& stop, const ROEdge* const stopEdge)
119  : stopDesc(stop), edge(stopEdge) {}
120 
121  PlanItem* clone() const {
122  return new Stop(stopDesc, edge);
123  }
124 
125  const ROEdge* getOrigin() const {
126  return edge;
127  }
128  const ROEdge* getDestination() const {
129  return edge;
130  }
131  double getDestinationPos() const {
132  return (stopDesc.startPos + stopDesc.endPos) / 2;
133  }
134  void saveAsXML(OutputDevice& os, const bool /* extended */, const bool /*asTrip*/, OptionsCont& /* options */) const {
135  stopDesc.write(os);
136  }
137  bool isStop() const {
138  return true;
139  }
141  return stopDesc.duration;
142  }
143  inline const std::string& getStopDest() const {
144  return stopDesc.busstop;
145  }
146 
147  private:
149  const ROEdge* const edge;
150 
151  private:
153  Stop& operator=(const Stop& src);
154 
155  };
156 
161  class TripItem {
162  public:
163  TripItem(const SUMOTime start, const double cost)
164  : myStart(start), myCost(cost) {}
165 
167  virtual ~TripItem() {}
168 
169  virtual TripItem* clone() const = 0;
170 
171  virtual const ROEdge* getOrigin() const = 0;
172  virtual const ROEdge* getDestination() const = 0;
173  virtual double getDestinationPos() const = 0;
174  virtual void saveAsXML(OutputDevice& os, const bool extended, OptionsCont& options) const = 0;
175 
176  inline SUMOTime getStart() const {
177  return myStart;
178  }
179 
180  inline SUMOTime getDuration() const {
181  return TIME2STEPS(myCost);
182  }
183 
184  inline double getCost() const {
185  return myCost;
186  }
187  protected:
189  const double myCost;
190  };
191 
196  class Ride : public TripItem {
197  public:
198  Ride(const SUMOTime start, const ROEdge* const _from, const ROEdge* const _to,
199  const std::string& _lines, const std::string& _group, const double cost,
200  const double arrivalPos, const double _length,
201  const std::string& _destStop = "", const std::string& _intended = "", const SUMOTime _depart = -1) :
202  TripItem(start, cost),
203  from(_from), to(_to),
204  lines(_lines),
205  group(_group),
206  destStop(_destStop),
207  intended(_intended),
208  depart(_depart),
209  arrPos(arrivalPos),
210  length(_length) {
211  }
212 
213  TripItem* clone() const {
215  }
216 
217  inline const ROEdge* getOrigin() const {
218  return from;
219  }
220  inline const ROEdge* getDestination() const {
221  return to;
222  }
223  inline double getDestinationPos() const {
224  return arrPos == std::numeric_limits<double>::infinity() ? -NUMERICAL_EPS : arrPos;
225  }
226  void saveAsXML(OutputDevice& os, const bool extended, OptionsCont& options) const;
227 
228  private:
229  const ROEdge* const from;
230  const ROEdge* const to;
231  const std::string lines;
232  const std::string group;
233  const std::string destStop;
234  const std::string intended;
236  const double arrPos;
237  const double length;
238 
239  private:
241  Ride& operator=(const Ride& src);
242 
243  };
244 
249  class Walk : public TripItem {
250  public:
251  Walk(const SUMOTime start, const ConstROEdgeVector& _edges, const double cost,
252  const std::vector<double>& _exitTimes,
253  double departPos = std::numeric_limits<double>::infinity(),
254  double arrivalPos = std::numeric_limits<double>::infinity(),
255  const std::string& _destStop = "")
256  : TripItem(start, cost), edges(_edges), exitTimes(_exitTimes), dur(-1), v(-1), dep(departPos), arr(arrivalPos), destStop(_destStop) {}
257  Walk(const SUMOTime start, const ConstROEdgeVector& edges, const double cost, const double duration, const double speed,
258  const double departPos, const double arrivalPos, const std::string& _destStop)
259  : TripItem(start, cost), edges(edges), dur(duration), v(speed), dep(departPos), arr(arrivalPos), destStop(_destStop) {}
260 
261  TripItem* clone() const {
262  return new Walk(myStart, edges, myCost, exitTimes, dep, arr, destStop);
263  }
264 
265  inline const ROEdge* getOrigin() const {
266  return edges.front();
267  }
268  inline const ROEdge* getDestination() const {
269  return edges.back();
270  }
271  inline double getDestinationPos() const {
272  return arr == std::numeric_limits<double>::infinity() ? 0 : arr;
273  }
274  void saveAsXML(OutputDevice& os, const bool extended, OptionsCont& options) const;
275 
276  private:
278  const std::vector<double> exitTimes;
279  const double dur, v, dep, arr;
280  const std::string destStop;
281 
282  private:
284  Walk& operator=(const Walk& src);
285 
286  };
287 
292  class PersonTrip : public PlanItem {
293  public:
294  PersonTrip(const ROEdge* _to, const std::string _stopDest) :
295  from(0), to(_to), modes(SVC_PEDESTRIAN), dep(0), arr(0), stopDest(_stopDest), walkFactor(1.0) {}
296  PersonTrip(const ROEdge* const _from, const ROEdge* const _to, const SVCPermissions modeSet,
297  const double departPos, const std::string& _stopOrigin, const double arrivalPos, const std::string& _stopDest, double _walkFactor, const std::string& _group) :
298  from(_from), to(_to), modes(modeSet), dep(departPos), arr(arrivalPos), stopOrigin(_stopOrigin), stopDest(_stopDest), walkFactor(_walkFactor), group(_group) { }
300  virtual ~PersonTrip() {
301  for (std::vector<TripItem*>::const_iterator it = myTripItems.begin(); it != myTripItems.end(); ++it) {
302  delete *it;
303  }
304  for (std::vector<ROVehicle*>::const_iterator it = myVehicles.begin(); it != myVehicles.end(); ++it) {
305  delete (*it)->getRouteDefinition();
306  delete *it;
307  }
308  }
309 
310  PlanItem* clone() const;
311 
312  virtual void addTripItem(TripItem* tripIt) {
313  myTripItems.push_back(tripIt);
314  }
315  void addVehicle(ROVehicle* veh) {
316  myVehicles.push_back(veh);
317  }
318  std::vector<ROVehicle*>& getVehicles() {
319  return myVehicles;
320  }
321  const ROEdge* getOrigin() const {
322  return from != 0 ? from : myTripItems.front()->getOrigin();
323  }
324  const ROEdge* getDestination() const {
325  return to;
326  }
327  double getDestinationPos() const {
328  if (myTripItems.empty()) {
329  return getArrivalPos(true);
330  } else {
331  return myTripItems.back()->getDestinationPos();
332  }
333  }
334  double getDepartPos(bool replaceDefault = true) const {
335  return dep == std::numeric_limits<double>::infinity() && replaceDefault ? 0 : dep;
336  }
337  double getArrivalPos(bool replaceDefault = true) const {
338  return arr == std::numeric_limits<double>::infinity() && replaceDefault ? 0 : arr;
339  }
341  return modes;
342  }
343  void updateMOdes(SVCPermissions additionalModes) {
344  modes |= additionalModes;
345  }
346 
347  const std::string& getGroup() const {
348  return group;
349  }
350 
351  const std::string& getStopOrigin() const {
352  return stopOrigin;
353  }
354 
355  const std::string& getStopDest() const {
356  return stopDest;
357  }
358  virtual bool needsRouting() const {
359  return myTripItems.empty();
360  }
361  void saveVehicles(OutputDevice& os, OutputDevice* const typeos, bool asAlternatives, OptionsCont& options) const;
362  void saveAsXML(OutputDevice& os, const bool extended, const bool asTrip, OptionsCont& options) const;
363 
364  double getWalkFactor() const {
365  return walkFactor;
366  }
367 
369  SUMOTime getDuration() const;
370 
371  private:
372  const ROEdge* from;
373  const ROEdge* to;
375  const double dep, arr;
376  const std::string stopOrigin;
377  const std::string stopDest;
379  std::vector<TripItem*> myTripItems;
381  std::vector<ROVehicle*> myVehicles;
383  double walkFactor;
385  const std::string group;
386 
387  private:
390 
391  };
392 
393 
398  const ROEdge* getDepartEdge() const {
399  return myPlan.front()->getOrigin();
400  }
401 
402 
403  void computeRoute(const RORouterProvider& provider,
404  const bool removeLoops, MsgHandler* errorHandler);
405 
406 
417  void saveAsXML(OutputDevice& os, OutputDevice* const typeos, bool asAlternatives, OptionsCont& options) const;
418 
419  std::vector<PlanItem*>& getPlan() {
420  return myPlan;
421  }
422 
423 private:
424  bool computeIntermodal(SUMOTime time, const RORouterProvider& provider,
425  PersonTrip* const trip, const ROVehicle* const veh, MsgHandler* const errorHandler);
426 
427 private:
431  std::vector<PlanItem*> myPlan;
432 
433 
434 private:
436  ROPerson(const ROPerson& src);
437 
440 
441 };
std::vector< const ROEdge * > ConstROEdgeVector
Definition: ROEdge.h:54
#define TIME2STEPS(x)
Definition: SUMOTime.h:55
long long int SUMOTime
Definition: SUMOTime.h:32
@ SVC_PEDESTRIAN
pedestrian
int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
A storage for options typed value containers)
Definition: OptionsCont.h:89
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:61
A basic edge for routing applications.
Definition: ROEdge.h:70
A planItem can be a Trip which contains multiple tripItems.
Definition: ROPerson.h:292
double getDepartPos(bool replaceDefault=true) const
Definition: ROPerson.h:334
void saveVehicles(OutputDevice &os, OutputDevice *const typeos, bool asAlternatives, OptionsCont &options) const
Definition: ROPerson.cpp:233
double getDestinationPos() const
Definition: ROPerson.h:327
const std::string stopDest
Definition: ROPerson.h:377
SVCPermissions getModes() const
Definition: ROPerson.h:340
virtual ~PersonTrip()
Destructor.
Definition: ROPerson.h:300
void updateMOdes(SVCPermissions additionalModes)
Definition: ROPerson.h:343
double walkFactor
walking speed factor
Definition: ROPerson.h:383
const std::string stopOrigin
Definition: ROPerson.h:376
const std::string & getStopDest() const
Definition: ROPerson.h:355
double getWalkFactor() const
Definition: ROPerson.h:364
std::vector< ROVehicle * > myVehicles
the vehicles which may be used for routing
Definition: ROPerson.h:381
const ROEdge * from
Definition: ROPerson.h:372
SUMOTime getDuration() const
return duration sum of all trip items
Definition: ROPerson.cpp:318
double getArrivalPos(bool replaceDefault=true) const
Definition: ROPerson.h:337
const double dep
Definition: ROPerson.h:375
const ROEdge * getDestination() const
Definition: ROPerson.h:324
PersonTrip(const ROEdge *const _from, const ROEdge *const _to, const SVCPermissions modeSet, const double departPos, const std::string &_stopOrigin, const double arrivalPos, const std::string &_stopDest, double _walkFactor, const std::string &_group)
Definition: ROPerson.h:296
const std::string & getStopOrigin() const
Definition: ROPerson.h:351
const double arr
Definition: ROPerson.h:375
virtual void addTripItem(TripItem *tripIt)
Definition: ROPerson.h:312
std::vector< ROVehicle * > & getVehicles()
Definition: ROPerson.h:318
void saveAsXML(OutputDevice &os, const bool extended, const bool asTrip, OptionsCont &options) const
Definition: ROPerson.cpp:242
const std::string group
group id for travelling in groups
Definition: ROPerson.h:385
virtual bool needsRouting() const
Definition: ROPerson.h:358
PlanItem * clone() const
Definition: ROPerson.cpp:224
const ROEdge * to
Definition: ROPerson.h:373
SVCPermissions modes
Definition: ROPerson.h:374
const std::string & getGroup() const
Definition: ROPerson.h:347
PersonTrip(const ROEdge *_to, const std::string _stopDest)
Definition: ROPerson.h:294
std::vector< TripItem * > myTripItems
the fully specified trips
Definition: ROPerson.h:379
void addVehicle(ROVehicle *veh)
Definition: ROPerson.h:315
PersonTrip & operator=(const PersonTrip &src)
Invalidated assignment operator.
const ROEdge * getOrigin() const
Definition: ROPerson.h:321
Every person has a plan comprising of multiple planItems.
Definition: ROPerson.h:82
virtual double getDestinationPos() const =0
virtual ~PlanItem()
Destructor.
Definition: ROPerson.h:85
virtual void saveAsXML(OutputDevice &os, const bool extended, const bool asTrip, OptionsCont &options) const =0
static const std::string UNDEFINED_STOPPING_PLACE
Definition: ROPerson.h:109
virtual bool isStop() const
Definition: ROPerson.h:97
virtual bool needsRouting() const
Definition: ROPerson.h:100
virtual const std::string & getStopDest() const
Definition: ROPerson.h:105
virtual const ROEdge * getDestination() const =0
virtual void saveVehicles(OutputDevice &, OutputDevice *const, bool, OptionsCont &) const
Definition: ROPerson.h:95
virtual SUMOTime getDuration() const =0
virtual PlanItem * clone() const =0
virtual const ROEdge * getOrigin() const =0
virtual void addTripItem(TripItem *)
Definition: ROPerson.h:89
A ride is part of a trip, e.g., go from here to here by car or bus.
Definition: ROPerson.h:196
Ride & operator=(const Ride &src)
Invalidated assignment operator.
const double length
Definition: ROPerson.h:237
double getDestinationPos() const
Definition: ROPerson.h:223
const std::string lines
Definition: ROPerson.h:231
const std::string destStop
Definition: ROPerson.h:233
const std::string group
Definition: ROPerson.h:232
const std::string intended
Definition: ROPerson.h:234
const SUMOTime depart
Definition: ROPerson.h:235
Ride(const SUMOTime start, const ROEdge *const _from, const ROEdge *const _to, const std::string &_lines, const std::string &_group, const double cost, const double arrivalPos, const double _length, const std::string &_destStop="", const std::string &_intended="", const SUMOTime _depart=-1)
Definition: ROPerson.h:198
const ROEdge * getDestination() const
Definition: ROPerson.h:220
const ROEdge *const to
Definition: ROPerson.h:230
TripItem * clone() const
Definition: ROPerson.h:213
void saveAsXML(OutputDevice &os, const bool extended, OptionsCont &options) const
Definition: ROPerson.cpp:139
const double arrPos
Definition: ROPerson.h:236
const ROEdge *const from
Definition: ROPerson.h:229
const ROEdge * getOrigin() const
Definition: ROPerson.h:217
A planItem can be a Stop.
Definition: ROPerson.h:116
const ROEdge * getDestination() const
Definition: ROPerson.h:128
bool isStop() const
Definition: ROPerson.h:137
const ROEdge * getOrigin() const
Definition: ROPerson.h:125
SUMOTime getDuration() const
Definition: ROPerson.h:140
Stop & operator=(const Stop &src)
Invalidated assignment operator.
double getDestinationPos() const
Definition: ROPerson.h:131
Stop(const SUMOVehicleParameter::Stop &stop, const ROEdge *const stopEdge)
Definition: ROPerson.h:118
void saveAsXML(OutputDevice &os, const bool, const bool, OptionsCont &) const
Definition: ROPerson.h:134
const ROEdge *const edge
Definition: ROPerson.h:149
PlanItem * clone() const
Definition: ROPerson.h:121
SUMOVehicleParameter::Stop stopDesc
Definition: ROPerson.h:148
const std::string & getStopDest() const
Definition: ROPerson.h:143
A TripItem is part of a trip, e.g., go from here to here by car.
Definition: ROPerson.h:161
virtual TripItem * clone() const =0
double getCost() const
Definition: ROPerson.h:184
SUMOTime getStart() const
Definition: ROPerson.h:176
virtual const ROEdge * getDestination() const =0
TripItem(const SUMOTime start, const double cost)
Definition: ROPerson.h:163
SUMOTime getDuration() const
Definition: ROPerson.h:180
virtual const ROEdge * getOrigin() const =0
virtual double getDestinationPos() const =0
const SUMOTime myStart
Definition: ROPerson.h:188
const double myCost
Definition: ROPerson.h:189
virtual void saveAsXML(OutputDevice &os, const bool extended, OptionsCont &options) const =0
virtual ~TripItem()
Destructor.
Definition: ROPerson.h:167
A walk is part of a trip, e.g., go from here to here by foot.
Definition: ROPerson.h:249
const double v
Definition: ROPerson.h:279
const ConstROEdgeVector edges
Definition: ROPerson.h:277
void saveAsXML(OutputDevice &os, const bool extended, OptionsCont &options) const
Definition: ROPerson.cpp:183
const double dur
Definition: ROPerson.h:279
const double arr
Definition: ROPerson.h:279
const ROEdge * getOrigin() const
Definition: ROPerson.h:265
Walk(const SUMOTime start, const ConstROEdgeVector &edges, const double cost, const double duration, const double speed, const double departPos, const double arrivalPos, const std::string &_destStop)
Definition: ROPerson.h:257
const ROEdge * getDestination() const
Definition: ROPerson.h:268
Walk & operator=(const Walk &src)
Invalidated assignment operator.
double getDestinationPos() const
Definition: ROPerson.h:271
Walk(const SUMOTime start, const ConstROEdgeVector &_edges, const double cost, const std::vector< double > &_exitTimes, double departPos=std::numeric_limits< double >::infinity(), double arrivalPos=std::numeric_limits< double >::infinity(), const std::string &_destStop="")
Definition: ROPerson.h:251
const std::vector< double > exitTimes
Definition: ROPerson.h:278
const double dep
Definition: ROPerson.h:279
const std::string destStop
Definition: ROPerson.h:280
TripItem * clone() const
Definition: ROPerson.h:261
A person as used by router.
Definition: ROPerson.h:49
ROPerson & operator=(const ROPerson &src)
Invalidated assignment operator.
virtual ~ROPerson()
Destructor.
Definition: ROPerson.cpp:53
ROPerson(const SUMOVehicleParameter &pars, const SUMOVTypeParameter *type)
Constructor.
Definition: ROPerson.cpp:48
const ROEdge * getDepartEdge() const
Returns the first edge the person takes.
Definition: ROPerson.h:398
static void addTrip(std::vector< PlanItem * > &plan, const std::string &id, const ROEdge *const from, const ROEdge *const to, const SVCPermissions modeSet, const std::string &vTypes, const double departPos, const std::string &stopOrigin, const double arrivalPos, const std::string &busStop, double walkFactor, const std::string &group)
Definition: ROPerson.cpp:61
static void addStop(std::vector< PlanItem * > &plan, const SUMOVehicleParameter::Stop &stopPar, const ROEdge *const stopEdge)
Definition: ROPerson.cpp:133
static void addRide(std::vector< PlanItem * > &plan, const ROEdge *const from, const ROEdge *const to, const std::string &lines, double arrivalPos, const std::string &destStop, const std::string &group)
Definition: ROPerson.cpp:116
std::vector< PlanItem * > & getPlan()
Definition: ROPerson.h:419
void computeRoute(const RORouterProvider &provider, const bool removeLoops, MsgHandler *errorHandler)
Definition: ROPerson.cpp:388
static void addWalk(std::vector< PlanItem * > &plan, const ConstROEdgeVector &edges, const double duration, const double speed, const double departPos, const double arrivalPos, const std::string &busStop)
Definition: ROPerson.cpp:124
ROPerson(const ROPerson &src)
Invalidated copy constructor.
bool computeIntermodal(SUMOTime time, const RORouterProvider &provider, PersonTrip *const trip, const ROVehicle *const veh, MsgHandler *const errorHandler)
Definition: ROPerson.cpp:327
void saveAsXML(OutputDevice &os, OutputDevice *const typeos, bool asAlternatives, OptionsCont &options) const
Saves the complete person description.
Definition: ROPerson.cpp:414
std::vector< PlanItem * > myPlan
The plan of the person.
Definition: ROPerson.h:431
A routable thing such as a vehicle or person.
Definition: RORoutable.h:52
A vehicle as used by router.
Definition: ROVehicle.h:50
Structure representing possible vehicle parameter.
Definition of vehicle stop (position and duration)
double startPos
The stopping position start.
void write(OutputDevice &dev, const bool close=true, const bool writeTagAndParents=true) const
Writes the stop as XML.
double endPos
The stopping position end.
std::string busstop
(Optional) bus stop if one is assigned to the stop
SUMOTime duration
The stopping duration.
Structure representing possible vehicle parameter.