Eclipse SUMO - Simulation of Urban MObility
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ROPerson.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2002-2025 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/****************************************************************************/
21// A vehicle as used by router
22/****************************************************************************/
23#include <config.h>
24
25#include <string>
26#include <iostream>
35#include "RORouteDef.h"
36#include "RORoute.h"
37#include "ROVehicle.h"
38#include "ROHelper.h"
39#include "RONet.h"
40#include "ROLane.h"
41#include "ROPerson.h"
42
44
45// ===========================================================================
46// method definitions
47// ===========================================================================
49 : RORoutable(pars, type) {
50}
51
52
54 for (PlanItem* const it : myPlan) {
55 delete it;
56 }
57}
58
59
60void
61ROPerson::addTrip(std::vector<PlanItem*>& plan, const std::string& id,
62 const ROEdge* const from, const ROEdge* const to, const SVCPermissions modeSet,
63 const std::string& vTypes,
64 const double departPos, const std::string& stopOrigin,
65 const double arrivalPos, const std::string& busStop,
66 double walkFactor, const std::string& group) {
67 PersonTrip* trip = new PersonTrip(from, to, modeSet, departPos, stopOrigin, arrivalPos, busStop, walkFactor, group);
71 if (departPos != 0) {
73 pars.departPos = departPos;
75 }
76 for (StringTokenizer st(vTypes); st.hasNext();) {
77 pars.vtypeid = st.next();
79 const SUMOVTypeParameter* type = net->getVehicleTypeSecure(pars.vtypeid);
80 if (type == nullptr) {
81 delete trip;
82 throw InvalidArgument("The vehicle type '" + pars.vtypeid + "' in a trip for person '" + id + "' is not known.");
83 }
84 pars.id = id + "_" + toString(trip->getVehicles().size());
85 trip->addVehicle(new ROVehicle(pars, new RORouteDef("!" + pars.id, 0, false, false), type, net));
86 // update modeset with routing-category vClass
87 if (type->vehicleClass == SVC_BICYCLE) {
89 } else {
91 }
92 }
93 if (trip->getVehicles().empty()) {
94 if ((modeSet & SVC_PASSENGER) != 0) {
95 pars.id = id + "_0";
96 trip->addVehicle(new ROVehicle(pars, new RORouteDef("!" + pars.id, 0, false, false), net->getVehicleTypeSecure(DEFAULT_VTYPE_ID), net));
97 }
98 if ((modeSet & SVC_BICYCLE) != 0) {
99 pars.id = id + "_b0";
102 trip->addVehicle(new ROVehicle(pars, new RORouteDef("!" + pars.id, 0, false, false), net->getVehicleTypeSecure(DEFAULT_BIKETYPE_ID), net));
103 }
104 if ((modeSet & SVC_TAXI) != 0) {
105 // add dummy taxi for routing (never added to output)
106 pars.id = "taxi"; // id is written as 'line'
108 trip->addVehicle(new ROVehicle(pars, new RORouteDef("!" + pars.id, 0, false, false), net->getVehicleTypeSecure(DEFAULT_TAXITYPE_ID), net));
109 }
110 }
111 plan.push_back(trip);
112}
113
114
115void
116ROPerson::addRide(std::vector<PlanItem*>& plan, const ROEdge* const from, const ROEdge* const to, const std::string& lines,
117 double arrivalPos, const std::string& destStop, const std::string& group) {
118 plan.push_back(new PersonTrip(to, destStop));
119 plan.back()->addTripItem(new Ride(-1, from, to, lines, group, -1., arrivalPos, -1., destStop));
120}
121
122
123void
124ROPerson::addWalk(std::vector<PlanItem*>& plan, const ConstROEdgeVector& edges, const double duration, const double speed, const double departPos, const double arrivalPos, const std::string& busStop) {
125 if (plan.empty() || plan.back()->isStop()) {
126 plan.push_back(new PersonTrip(edges.back(), busStop));
127 }
128 plan.back()->addTripItem(new Walk(-1, edges, -1., duration, speed, departPos, arrivalPos, busStop));
129}
130
131
132void
133ROPerson::addStop(std::vector<PlanItem*>& plan, const SUMOVehicleParameter::Stop& stopPar, const ROEdge* const stopEdge) {
134 plan.push_back(new Stop(stopPar, stopEdge));
135}
136
137
138void
139ROPerson::Ride::saveAsXML(OutputDevice& os, const bool extended, OptionsCont& options) const {
141 std::string comment = "";
142 if ((extended || options.getBool("write-costs")) && myCost >= 0.) {
144 }
145 if (from != nullptr) {
147 }
148 if (to != nullptr) {
150 }
151 if (destStop != "") {
152 const std::string element = RONet::getInstance()->getStoppingPlaceElement(destStop);
153 os.writeAttr(element, destStop);
154 const std::string name = RONet::getInstance()->getStoppingPlaceName(destStop);
155 if (name != "") {
156 comment = " <!-- " + name + " -->";
157 }
158 } else if (arrPos != 0 && arrPos != std::numeric_limits<double>::infinity()) {
160 }
161 if (lines != LINE_ANY) {
162 // no need to write the default
164 }
165 if (group != "") {
167 }
168 if (intended != "" && intended != lines) {
170 }
171 if (depart >= 0) {
173 }
174 if (options.getBool("exit-times")) {
175 os.writeAttr("started", time2string(getStart()));
176 os.writeAttr("ended", time2string(getStart() + getDuration()));
177 }
178 if (options.getBool("route-length") && length != -1) {
179 os.writeAttr("routeLength", length);
180 }
181 os.closeTag(comment);
182}
183
184
185void
186ROPerson::Stop::saveAsXML(OutputDevice& os, const bool /*extended*/, const bool /*asTrip*/, OptionsCont& /*options*/) const {
187 stopDesc.write(os, false);
188 std::string comment = "";
189 for (std::string sID : stopDesc.getStoppingPlaceIDs()) {
190 const std::string name = RONet::getInstance()->getStoppingPlaceName(sID);
191 if (name != "") {
192 comment += name + " ";
193 }
194 }
195 if (comment != "") {
196 comment = " <!-- " + comment + " -->";
197 }
198 stopDesc.writeParams(os);
199 os.closeTag(comment);
200}
201
202void
203ROPerson::Walk::saveAsXML(OutputDevice& os, const bool extended, OptionsCont& options) const {
205 std::string comment = "";
206 if ((extended || options.getBool("write-costs")) && myCost >= 0.) {
207 os.writeAttr(SUMO_ATTR_COST, myCost);
208 }
209 if (dur > 0) {
211 }
212 if (v > 0) {
214 }
215 os.writeAttr(SUMO_ATTR_EDGES, edges);
216 if (options.getBool("exit-times")) {
217 os.writeAttr("started", time2string(getStart()));
218 os.writeAttr("ended", time2string(getStart() + getDuration()));
219 if (!exitTimes.empty()) {
220 os.writeAttr("exitTimes", exitTimes);
221 }
222 }
223 if (options.getBool("route-length")) {
224 double length = 0;
225 for (const ROEdge* roe : edges) {
226 length += roe->getLength();
227 }
228 os.writeAttr("routeLength", length);
229 }
230 if (destStop != "") {
231 const std::string element = RONet::getInstance()->getStoppingPlaceElement(destStop);
232 os.writeAttr(element, destStop);
233 const std::string name = RONet::getInstance()->getStoppingPlaceName(destStop);
234 if (name != "") {
235 comment = " <!-- " + name + " -->";
236 }
237 } else if (arr != 0 && arr != std::numeric_limits<double>::infinity()) {
239 }
240 os.closeTag(comment);
241}
242
245 PersonTrip* result = new PersonTrip(from, to, modes, dep, stopOrigin, arr, stopDest, walkFactor, group);
246 for (auto* item : myTripItems) {
247 result->myTripItems.push_back(item->clone());
248 }
249 return result;
250}
251
252void
253ROPerson::PersonTrip::saveVehicles(OutputDevice& os, OutputDevice* const typeos, bool asAlternatives, OptionsCont& options) const {
254 for (ROVehicle* veh : myVehicles) {
255 if (!RONet::getInstance()->knowsVehicle(veh->getID())) {
256 veh->saveAsXML(os, typeos, asAlternatives, options);
257 }
258 }
259}
260
261void
262ROPerson::PersonTrip::saveAsXML(OutputDevice& os, const bool extended, const bool asTrip, OptionsCont& options) const {
263 if ((asTrip || extended) && from != nullptr) {
264 const bool writeGeoTrip = asTrip && options.getBool("write-trips.geo");
266 if (writeGeoTrip) {
267 Position fromPos = from->getLanes()[0]->getShape().positionAtOffset2D(getDepartPos());
268 if (GeoConvHelper::getFinal().usingGeoProjection()) {
271 os.writeAttr(SUMO_ATTR_FROMLONLAT, fromPos);
273 } else {
274 os.writeAttr(SUMO_ATTR_FROMXY, fromPos);
275 }
276 } else {
277 os.writeAttr(SUMO_ATTR_FROM, from->getID());
278 }
279 if (writeGeoTrip) {
280 Position toPos = to->getLanes()[0]->getShape().positionAtOffset2D(MIN2(getArrivalPos(), to->getLanes()[0]->getShape().length2D()));
281 if (GeoConvHelper::getFinal().usingGeoProjection()) {
284 os.writeAttr(SUMO_ATTR_TOLONLAT, toPos);
286 } else {
287 os.writeAttr(SUMO_ATTR_TOXY, toPos);
288 }
289 } else {
290 os.writeAttr(SUMO_ATTR_TO, to->getID());
291 }
292 std::vector<std::string> allowedModes;
293 if ((modes & SVC_BUS) != 0) {
294 allowedModes.push_back("public");
295 }
296 if ((modes & SVC_PASSENGER) != 0) {
297 allowedModes.push_back("car");
298 }
299 if ((modes & SVC_TAXI) != 0) {
300 allowedModes.push_back("taxi");
301 }
302 if ((modes & SVC_BICYCLE) != 0) {
303 allowedModes.push_back("bicycle");
304 }
305 if (allowedModes.size() > 0) {
306 os.writeAttr(SUMO_ATTR_MODES, toString(allowedModes));
307 }
308 if (!writeGeoTrip) {
309 if (dep != 0 && dep != std::numeric_limits<double>::infinity()) {
311 }
312 if (arr != 0 && arr != std::numeric_limits<double>::infinity()) {
314 }
315 }
316 if (getStopDest() != "") {
317 os.writeAttr(SUMO_ATTR_BUS_STOP, getStopDest());
318 }
319 if (walkFactor != 1) {
320 os.writeAttr(SUMO_ATTR_WALKFACTOR, walkFactor);
321 }
322 if (extended && myTripItems.size() != 0) {
323 std::vector<double> costs;
324 for (const TripItem* const tripItem : myTripItems) {
325 costs.push_back(tripItem->getCost());
326 }
327 os.writeAttr(SUMO_ATTR_COSTS, costs);
328 }
329 os.closeTag();
330 } else {
331 for (const TripItem* const it : myTripItems) {
332 it->saveAsXML(os, extended, options);
333 }
334 }
335}
336
339 SUMOTime result = 0;
340 for (TripItem* tItem : myTripItems) {
341 result += tItem->getDuration();
342 }
343 return result;
344}
345
346bool
348 const PersonTrip* const trip, const ROVehicle* const veh,
349 std::vector<TripItem*>& resultItems, MsgHandler* const errorHandler) {
350 const double speed = getMaxSpeed() * trip->getWalkFactor();
351 std::vector<ROIntermodalRouter::TripItem> result;
352 provider.getIntermodalRouter().compute(trip->getOrigin(), trip->getDestination(),
353 trip->getDepartPos(), trip->getStopOrigin(),
354 trip->getArrivalPos(), trip->getStopDest(),
355 speed, veh, trip->getModes(), time, result);
356 bool carUsed = false;
357 SUMOTime start = time;
358 for (const ROIntermodalRouter::TripItem& item : result) {
359 if (!item.edges.empty()) {
360 if (item.line == "") {
361 double depPos = trip->getDepartPos(false);
362 double arrPos = trip->getArrivalPos(false);
363 if (trip->getOrigin()->isTazConnector()) {
364 // walk the whole length of the first edge
365 const ROEdge* first = item.edges.front();
366 if (std::find(first->getPredecessors().begin(), first->getPredecessors().end(), trip->getOrigin()) != first->getPredecessors().end()) {
367 depPos = 0;
368 } else {
369 depPos = first->getLength();
370 }
371 }
372 if (trip->getDestination()->isTazConnector()) {
373 // walk the whole length of the last edge
374 const ROEdge* last = item.edges.back();
375 if (std::find(last->getSuccessors().begin(), last->getSuccessors().end(), trip->getDestination()) != last->getSuccessors().end()) {
376 arrPos = last->getLength();
377 } else {
378 arrPos = 0;
379 }
380 }
381 if (&item == &result.back() && trip->getStopDest() == "") {
382 resultItems.push_back(new Walk(start, item.edges, item.cost, item.exitTimes, depPos, arrPos));
383 } else {
384 resultItems.push_back(new Walk(start, item.edges, item.cost, item.exitTimes, depPos, arrPos, item.destStop));
385 }
386 } else if (veh != nullptr && item.line == veh->getID()) {
387 double cost = item.cost;
388 if (veh->getVClass() != SVC_TAXI) {
389 RORoute* route = new RORoute(veh->getID() + "_RouteDef", item.edges);
390 route->setProbability(1);
392 carUsed = true;
393 } else if (resultItems.empty()) {
394 // if this is the first plan item the initial taxi waiting time wasn't added yet
395 const double taxiWait = STEPS2TIME(string2time(OptionsCont::getOptions().getString("persontrip.taxi.waiting-time")));
396 cost += taxiWait;
397 }
398 resultItems.push_back(new Ride(start, item.edges.front(), item.edges.back(), veh->getID(), trip->getGroup(), cost, item.arrivalPos, item.length, item.destStop));
399 } else {
400 // write origin for first element of the plan
401 const ROEdge* origin = trip == myPlan.front() && resultItems.empty() ? trip->getOrigin() : nullptr;
402 const std::string line = OptionsCont::getOptions().getBool("persontrip.ride-public-line") ? item.line : LINE_ANY;
403 resultItems.push_back(new Ride(start, origin, nullptr, line, trip->getGroup(), item.cost, item.arrivalPos, item.length, item.destStop, item.intended, TIME2STEPS(item.depart)));
404 }
405 }
406 start += TIME2STEPS(item.cost);
407 }
408 if (result.empty()) {
409 errorHandler->inform("No route for trip in person '" + getID() + "'.");
410 myRoutingSuccess = false;
411 }
412 return carUsed;
413}
414
415
416void
418 const bool /* removeLoops */, MsgHandler* errorHandler) {
419 myRoutingSuccess = true;
421 for (PlanItem* const it : myPlan) {
422 if (it->needsRouting()) {
423 PersonTrip* trip = static_cast<PersonTrip*>(it);
424 const std::vector<ROVehicle*>& vehicles = trip->getVehicles();
425 std::vector<TripItem*> resultItems;
426 std::vector<TripItem*> best;
427 const ROVehicle* bestVeh = nullptr;
428 if (vehicles.empty()) {
429 computeIntermodal(time, provider, trip, nullptr, best, errorHandler);
430 } else {
431 double bestCost = std::numeric_limits<double>::infinity();
432 for (const ROVehicle* const v : vehicles) {
433 const bool carUsed = computeIntermodal(time, provider, trip, v, resultItems, errorHandler);
434 double cost = 0.;
435 for (const TripItem* const tripIt : resultItems) {
436 cost += tripIt->getCost();
437 }
438 if (cost < bestCost) {
439 bestCost = cost;
440 bestVeh = carUsed ? v : nullptr;
441 best.swap(resultItems);
442 }
443 for (const TripItem* const tripIt : resultItems) {
444 delete tripIt;
445 }
446 resultItems.clear();
447 }
448 }
449 trip->setItems(best, bestVeh);
450 }
451 time += it->getDuration();
452 }
453}
454
455
456void
457ROPerson::saveAsXML(OutputDevice& os, OutputDevice* const typeos, bool asAlternatives, OptionsCont& options, int cloneIndex) const {
458 // write the person's vehicles
459 const bool writeTrip = options.exists("write-trips") && options.getBool("write-trips");
460 if (!writeTrip) {
461 for (const PlanItem* const it : myPlan) {
462 it->saveVehicles(os, typeos, asAlternatives, options);
463 }
464 }
465
466 if (typeos != nullptr && getType() != nullptr && !getType()->saved) {
467 getType()->write(*typeos);
468 getType()->saved = true;
469 }
470 if (getType() != nullptr && !getType()->saved) {
471 getType()->write(os);
472 getType()->saved = asAlternatives;
473 }
474
475 // write the person
476 if (cloneIndex == 0) {
477 getParameter().write(os, options, SUMO_TAG_PERSON);
478 } else {
480 // @note id collisions may occur if scale-suffic occurs in other vehicle ids
481 p.id += options.getString("scale-suffix") + toString(cloneIndex);
482 p.write(os, options, SUMO_TAG_PERSON);
483 }
484
485 for (const PlanItem* const it : myPlan) {
486 it->saveAsXML(os, asAlternatives, writeTrip, options);
487 }
488
489 // write params
491 os.closeTag();
492}
493
494
495/****************************************************************************/
long long int SUMOTime
Definition GUI.h:36
std::vector< const ROEdge * > ConstROEdgeVector
Definition ROEdge.h:56
SUMOTime string2time(const std::string &r)
convert string to SUMOTime
Definition SUMOTime.cpp:46
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
Definition SUMOTime.cpp:91
#define STEPS2TIME(x)
Definition SUMOTime.h:55
#define TIME2STEPS(x)
Definition SUMOTime.h:57
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
const std::string DEFAULT_TAXITYPE_ID
const std::string DEFAULT_VTYPE_ID
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_TAXI
vehicle is a taxi
@ SVC_BUS
vehicle is a bus
const std::string DEFAULT_BIKETYPE_ID
@ GIVEN
The position is given.
const std::string LINE_ANY
const long long int VEHPARS_DEPARTPOS_SET
const long long int VEHPARS_VTYPE_SET
@ TRIGGERED
The departure is person triggered.
@ SUMO_TAG_WALK
@ SUMO_TAG_RIDE
@ SUMO_TAG_PERSON
@ SUMO_TAG_PERSONTRIP
@ SUMO_ATTR_COSTS
@ SUMO_ATTR_LINES
@ SUMO_ATTR_DEPART
@ SUMO_ATTR_SPEED
@ SUMO_ATTR_BUS_STOP
@ SUMO_ATTR_ARRIVALPOS
@ SUMO_ATTR_EDGES
the edges of a route
@ SUMO_ATTR_TOLONLAT
@ SUMO_ATTR_MODES
@ SUMO_ATTR_DEPARTPOS
@ SUMO_ATTR_GROUP
@ SUMO_ATTR_COST
@ SUMO_ATTR_TO
@ SUMO_ATTR_FROM
@ SUMO_ATTR_FROMXY
@ SUMO_ATTR_WALKFACTOR
@ SUMO_ATTR_TOXY
@ SUMO_ATTR_DURATION
@ SUMO_ATTR_FROMLONLAT
@ SUMO_ATTR_INTENDED
int gPrecision
the precision for floating point outputs
Definition StdDefs.cpp:26
int gPrecisionGeo
Definition StdDefs.cpp:27
T MIN2(T a, T b)
Definition StdDefs.h:76
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
static const GeoConvHelper & getFinal()
the coordinate transformation for writing the location element and for tracking the original coordina...
void cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
virtual void inform(std::string msg, bool addType=true)
adds a new error to the list
const std::string & getID() const
Returns the id.
Definition Named.h:74
A storage for options typed value containers)
Definition OptionsCont.h:89
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool exists(const std::string &name) const
Returns the information whether the named option is known.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
static OptionsCont & getOptions()
Retrieves the options.
Static storage of an output device and its base (abstract) implementation.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
void setPrecision(int precision=gPrecision)
Sets the precision or resets it to default.
void writeParams(OutputDevice &device) const
write Params in the given outputdevice
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
A basic edge for routing applications.
Definition ROEdge.h:72
bool isTazConnector() const
Definition ROEdge.h:173
const ROEdgeVector & getPredecessors() const
Returns the edge at the given position from the list of incoming edges.
Definition ROEdge.h:375
const ROEdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges, restricted by vClass.
Definition ROEdge.cpp:389
double getLength() const
Returns the length of the edge.
Definition ROEdge.h:224
The router's network representation.
Definition RONet.h:63
SUMOVTypeParameter * getVehicleTypeSecure(const std::string &id)
Retrieves the named vehicle type.
Definition RONet.cpp:364
static RONet * getInstance()
Returns the pointer to the unique instance of RONet (singleton).
Definition RONet.cpp:56
bool knowsVehicle(const std::string &id) const
returns whether a vehicle with the given id was already loaded
Definition RONet.cpp:488
const std::string getStoppingPlaceElement(const std::string &id) const
return the element name for the given stopping place id
Definition RONet.cpp:898
const std::string getStoppingPlaceName(const std::string &id) const
return the name for the given stopping place id
Definition RONet.cpp:886
A planItem can be a Trip which contains multiple tripItems.
Definition ROPerson.h:298
double getDepartPos(bool replaceDefault=true) const
Definition ROPerson.h:340
void saveVehicles(OutputDevice &os, OutputDevice *const typeos, bool asAlternatives, OptionsCont &options) const
Definition ROPerson.cpp:253
const std::string & getStopOrigin() const
Definition ROPerson.h:357
SVCPermissions getModes() const
Definition ROPerson.h:346
const std::string & getStopDest() const
Definition ROPerson.h:361
double getWalkFactor() const
Definition ROPerson.h:385
const ROEdge * getDestination() const
Definition ROPerson.h:330
SUMOTime getDuration() const
return duration sum of all trip items
Definition ROPerson.cpp:338
double getArrivalPos(bool replaceDefault=true) const
Definition ROPerson.h:343
std::vector< ROVehicle * > & getVehicles()
Definition ROPerson.h:324
const std::string & getGroup() const
Definition ROPerson.h:353
void saveAsXML(OutputDevice &os, const bool extended, const bool asTrip, OptionsCont &options) const
Definition ROPerson.cpp:262
const ROEdge * getOrigin() const
Definition ROPerson.h:327
PlanItem * clone() const
Definition ROPerson.cpp:244
std::vector< TripItem * > myTripItems
the fully specified trips
Definition ROPerson.h:400
void setItems(std::vector< TripItem * > &newItems, const ROVehicle *const veh)
Definition ROPerson.h:368
void addVehicle(ROVehicle *veh)
Definition ROPerson.h:321
void updateModes(SVCPermissions additionalModes)
Definition ROPerson.h:349
Every person has a plan comprising of multiple planItems.
Definition ROPerson.h:83
static const std::string UNDEFINED_STOPPING_PLACE
Definition ROPerson.h:113
A ride is part of a trip, e.g., go from here to here by car or bus.
Definition ROPerson.h:202
const double length
Definition ROPerson.h:243
const std::string lines
Definition ROPerson.h:237
const std::string destStop
Definition ROPerson.h:239
const std::string group
Definition ROPerson.h:238
const std::string intended
Definition ROPerson.h:240
const SUMOTime depart
Definition ROPerson.h:241
const ROEdge *const to
Definition ROPerson.h:236
void saveAsXML(OutputDevice &os, const bool extended, OptionsCont &options) const
Definition ROPerson.cpp:139
const double arrPos
Definition ROPerson.h:242
const ROEdge *const from
Definition ROPerson.h:235
A planItem can be a Stop.
Definition ROPerson.h:120
void saveAsXML(OutputDevice &os, const bool extended, const bool asTrip, OptionsCont &options) const
Definition ROPerson.cpp:186
A TripItem is part of a trip, e.g., go from here to here by car.
Definition ROPerson.h:167
SUMOTime getStart() const
Definition ROPerson.h:182
SUMOTime getDuration() const
Definition ROPerson.h:186
const double myCost
Definition ROPerson.h:195
A walk is part of a trip, e.g., go from here to here by foot.
Definition ROPerson.h:255
void saveAsXML(OutputDevice &os, const bool extended, OptionsCont &options) const
Definition ROPerson.cpp:203
virtual ~ROPerson()
Destructor.
Definition ROPerson.cpp:53
bool computeIntermodal(SUMOTime time, const RORouterProvider &provider, const PersonTrip *const trip, const ROVehicle *const veh, std::vector< TripItem * > &resultItems, MsgHandler *const errorHandler)
Definition ROPerson.cpp:347
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:417
void saveAsXML(OutputDevice &os, OutputDevice *const typeos, bool asAlternatives, OptionsCont &options, int cloneIndex=0) const
Saves the complete person description.
Definition ROPerson.cpp:457
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 * > myPlan
The plan of the person.
Definition ROPerson.h:453
A routable thing such as a vehicle or person.
Definition RORoutable.h:52
SUMOVehicleClass getVClass() const
Definition RORoutable.h:109
bool myRoutingSuccess
Whether the last routing was successful.
Definition RORoutable.h:193
const SUMOVTypeParameter * getType() const
Returns the type of the routable.
Definition RORoutable.h:82
const std::string & getID() const
Returns the id of the routable.
Definition RORoutable.h:91
const SUMOVehicleParameter & getParameter() const
Returns the definition of the vehicle / person parameter.
Definition RORoutable.h:71
double getMaxSpeed() const
Returns the vehicle's maximum speed.
Definition RORoutable.h:121
Base class for a vehicle's route definition.
Definition RORouteDef.h:53
void addLoadedAlternative(RORoute *alternative)
Adds a single alternative loaded from the file An alternative may also be generated during DUA.
A complete router's route.
Definition RORoute.h:52
void setProbability(double prob)
Sets the probability of the route.
Definition RORoute.cpp:70
A vehicle as used by router.
Definition ROVehicle.h:50
RORouteDef * getRouteDefinition() const
Returns the definition of the route the vehicle takes.
Definition ROVehicle.h:73
IntermodalRouter< E, L, N, V > & getIntermodalRouter() const
Structure representing possible vehicle parameter.
void write(OutputDevice &dev) const
Writes the vtype.
bool saved
Information whether this type was already saved (needed by routers)
SUMOVehicleClass vehicleClass
The vehicle's class.
Definition of vehicle stop (position and duration)
Structure representing possible vehicle parameter.
std::string vtypeid
The vehicle's type id.
long long int parametersSet
Information for the router which parameter were set, TraCI may modify this (when changing color)
void write(OutputDevice &dev, const OptionsCont &oc, const SumoXMLTag altTag=SUMO_TAG_VEHICLE, const std::string &typeID="") const
Writes the parameters as a beginning element.
double departPos
(optional) The position the vehicle shall depart from
std::string id
The vehicle's id.
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
DepartPosDefinition departPosProcedure
Information how the vehicle shall choose the departure position.
bool hasNext()
returns the information whether further substrings exist