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>
30#include "RORoutable.h"
31#include "RORouteDef.h"
32#include "ROVehicle.h"
33
34
35// ===========================================================================
36// class declarations
37// ===========================================================================
38class OutputDevice;
39class ROEdge;
40
41
42// ===========================================================================
43// class definitions
44// ===========================================================================
49class ROPerson : public RORoutable {
50
51public:
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 }
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;
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
423private:
424 bool computeIntermodal(SUMOTime time, const RORouterProvider& provider,
425 PersonTrip* const trip, const ROVehicle* const veh, MsgHandler* const errorHandler);
426
427private:
431 std::vector<PlanItem*> myPlan;
432
433
434private:
436 ROPerson(const ROPerson& src);
437
440
441};
long long int SUMOTime
Definition: GUI.h:36
std::vector< const ROEdge * > ConstROEdgeVector
Definition: ROEdge.h:54
#define TIME2STEPS(x)
Definition: SUMOTime.h:56
@ 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
PersonTrip & operator=(const PersonTrip &src)
Invalidated assignment operator.
const std::string & getStopOrigin() const
Definition: ROPerson.h:351
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 * getDestination() const
Definition: ROPerson.h:324
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
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 double arr
Definition: ROPerson.h:375
virtual void addTripItem(TripItem *tripIt)
Definition: ROPerson.h:312
std::vector< ROVehicle * > & getVehicles()
Definition: ROPerson.h:318
const std::string & getGroup() const
Definition: ROPerson.h:347
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
const ROEdge * getOrigin() const
Definition: ROPerson.h:321
PlanItem * clone() const
Definition: ROPerson.cpp:224
const ROEdge * to
Definition: ROPerson.h:373
SVCPermissions modes
Definition: ROPerson.h:374
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
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
virtual const ROEdge * getOrigin() const =0
static const std::string UNDEFINED_STOPPING_PLACE
Definition: ROPerson.h:109
virtual PlanItem * clone() const =0
virtual bool isStop() const
Definition: ROPerson.h:97
virtual const ROEdge * getDestination() const =0
virtual bool needsRouting() const
Definition: ROPerson.h:100
virtual const std::string & getStopDest() const
Definition: ROPerson.h:105
virtual void saveVehicles(OutputDevice &, OutputDevice *const, bool, OptionsCont &) const
Definition: ROPerson.h:95
virtual SUMOTime getDuration() 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
const double length
Definition: ROPerson.h:237
double getDestinationPos() const
Definition: ROPerson.h:223
const std::string lines
Definition: ROPerson.h:231
const ROEdge * getDestination() const
Definition: ROPerson.h:220
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 ROEdge * getOrigin() const
Definition: ROPerson.h:217
TripItem * clone() const
Definition: ROPerson.h:213
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 *const to
Definition: ROPerson.h:230
void saveAsXML(OutputDevice &os, const bool extended, OptionsCont &options) const
Definition: ROPerson.cpp:139
Ride & operator=(const Ride &src)
Invalidated assignment operator.
const double arrPos
Definition: ROPerson.h:236
const ROEdge *const from
Definition: ROPerson.h:229
A planItem can be a Stop.
Definition: ROPerson.h:116
bool isStop() const
Definition: ROPerson.h:137
PlanItem * clone() const
Definition: ROPerson.h:121
SUMOTime getDuration() const
Definition: ROPerson.h:140
double getDestinationPos() const
Definition: ROPerson.h:131
const ROEdge * getDestination() const
Definition: ROPerson.h:128
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
SUMOVehicleParameter::Stop stopDesc
Definition: ROPerson.h:148
const std::string & getStopDest() const
Definition: ROPerson.h:143
const ROEdge * getOrigin() const
Definition: ROPerson.h:125
Stop & operator=(const Stop &src)
Invalidated assignment operator.
A TripItem is part of a trip, e.g., go from here to here by car.
Definition: ROPerson.h:161
double getCost() const
Definition: ROPerson.h:184
SUMOTime getStart() const
Definition: ROPerson.h:176
virtual TripItem * clone() const =0
TripItem(const SUMOTime start, const double cost)
Definition: ROPerson.h:163
virtual const ROEdge * getOrigin() const =0
SUMOTime getDuration() const
Definition: ROPerson.h:180
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 const ROEdge * getDestination() 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 ROEdge * getDestination() const
Definition: ROPerson.h:268
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
TripItem * clone() const
Definition: ROPerson.h:261
const ROEdge * getOrigin() const
Definition: ROPerson.h:265
const double arr
Definition: ROPerson.h:279
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
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
A person as used by router.
Definition: ROPerson.h:49
virtual ~ROPerson()
Destructor.
Definition: ROPerson.cpp:53
ROPerson & operator=(const ROPerson &src)
Invalidated assignment operator.
ROPerson(const SUMOVehicleParameter &pars, const SUMOVTypeParameter *type)
Constructor.
Definition: ROPerson.cpp:48
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
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
std::vector< PlanItem * > & getPlan()
Definition: ROPerson.h:419
ROPerson(const ROPerson &src)
Invalidated copy constructor.
const ROEdge * getDepartEdge() const
Returns the first edge the person takes.
Definition: ROPerson.h:398
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.