54 for (std::vector<PlanItem*>::const_iterator it =
myPlan.begin(); it !=
myPlan.end(); ++it) {
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);
80 if (type ==
nullptr) {
82 throw InvalidArgument(
"The vehicle type '" + pars.
vtypeid +
"' in a trip for person '" +
id +
"' is not known.");
111 plan.push_back(trip);
117 double arrivalPos,
const std::string& destStop,
const std::string& group) {
119 plan.back()->addTripItem(
new Ride(-1, from, to, lines, group, -1., arrivalPos, -1., destStop));
124 ROPerson::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));
128 plan.back()->addTripItem(
new Walk(-1, edges, -1., duration, speed, departPos, arrivalPos, busStop));
134 plan.push_back(
new Stop(stopPar, stopEdge));
141 std::string comment =
"";
142 if ((extended || options.
getBool(
"write-costs")) &&
myCost >= 0.) {
145 if (
from !=
nullptr) {
156 comment =
" <!-- " + name +
" -->";
158 }
else if (
arrPos != 0 &&
arrPos != std::numeric_limits<double>::infinity()) {
171 if (options.
getBool(
"exit-times")) {
185 std::string comment =
"";
186 if ((extended || options.
getBool(
"write-costs")) && myCost >= 0.) {
196 if (options.
getBool(
"exit-times")) {
199 if (!exitTimes.empty()) {
203 if (options.
getBool(
"route-length")) {
205 for (
const ROEdge* roe : edges) {
206 length += roe->getLength();
210 if (destStop !=
"") {
215 comment =
" <!-- " + name +
" -->";
217 }
else if (arr != 0 && arr != std::numeric_limits<double>::infinity()) {
225 PersonTrip* result =
new PersonTrip(from, to, modes, dep, stopOrigin, arr, stopDest, walkFactor, group);
226 for (
auto* item : myTripItems) {
236 veh->saveAsXML(os, typeos, asAlternatives, options);
243 if ((asTrip || extended) && from !=
nullptr) {
244 const bool writeGeoTrip = asTrip && options.
getBool(
"write-trips.geo");
247 Position fromPos = from->getLanes()[0]->getShape().positionAtOffset2D(getDepartPos());
260 Position toPos = to->getLanes()[0]->getShape().positionAtOffset2D(
MIN2(getArrivalPos(), to->getLanes()[0]->getShape().length2D()));
272 std::vector<std::string> allowedModes;
274 allowedModes.push_back(
"public");
277 allowedModes.push_back(
"car");
280 allowedModes.push_back(
"taxi");
283 allowedModes.push_back(
"bicycle");
285 if (allowedModes.size() > 0) {
289 if (dep != 0 && dep != std::numeric_limits<double>::infinity()) {
292 if (arr != 0 && arr != std::numeric_limits<double>::infinity()) {
296 if (getStopDest() !=
"") {
299 if (walkFactor != 1) {
302 if (extended && myTripItems.size() != 0) {
303 std::vector<double> costs;
304 for (
const TripItem*
const tripItem : myTripItems) {
305 costs.push_back(tripItem->getCost());
311 for (
const TripItem*
const it : myTripItems) {
312 it->saveAsXML(os, extended, options);
320 for (
TripItem* tItem : myTripItems) {
321 result += tItem->getDuration();
330 std::vector<ROIntermodalRouter::TripItem> result;
334 speed, veh, trip->
getModes(), time, result);
335 bool carUsed =
false;
338 if (!item.edges.empty()) {
339 if (item.line ==
"") {
344 const ROEdge* first = item.edges.front();
353 const ROEdge* last = item.edges.back();
360 if (&item == &result.back() && trip->
getStopDest() ==
"") {
361 trip->
addTripItem(
new Walk(start, item.edges, item.cost, item.exitTimes, depPos, arrPos));
363 trip->
addTripItem(
new Walk(start, item.edges, item.cost, item.exitTimes, depPos, arrPos, item.destStop));
365 }
else if (veh !=
nullptr && item.line == veh->
getID()) {
366 trip->
addTripItem(
new Ride(start, item.edges.front(), item.edges.back(), veh->
getID(), trip->
getGroup(), item.cost, item.arrivalPos, item.length, item.destStop));
374 trip->
addTripItem(
new Ride(start,
nullptr,
nullptr, item.line, trip->
getGroup(), item.cost, item.arrivalPos, item.length, item.destStop, item.intended,
TIME2STEPS(item.depart)));
379 if (result.empty()) {
380 errorHandler->
inform(
"No route for trip in person '" +
getID() +
"'.");
392 for (std::vector<PlanItem*>::iterator it =
myPlan.begin(); it !=
myPlan.end(); ++it) {
393 if ((*it)->needsRouting()) {
395 std::vector<ROVehicle*>& vehicles = trip->
getVehicles();
396 if (vehicles.empty()) {
399 for (std::vector<ROVehicle*>::iterator v = vehicles.begin(); v != vehicles.end();) {
401 v = vehicles.erase(v);
408 time += (*it)->getDuration();
416 const bool writeTrip = options.
exists(
"write-trips") && options.
getBool(
"write-trips");
419 it->saveVehicles(os, typeos, asAlternatives, options);
423 if (typeos !=
nullptr &&
getType() !=
nullptr && !
getType()->saved) {
436 it->saveAsXML(os, asAlternatives, writeTrip, options);
std::vector< const ROEdge * > ConstROEdgeVector
std::string time2string(SUMOTime t)
convert SUMOTime to string
@ 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_TAXITYPE_ID
const std::string DEFAULT_VTYPE_ID
int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
const std::string DEFAULT_BIKETYPE_ID
@ GIVEN
The position is given.
const int VEHPARS_DEPARTPOS_SET
const int VEHPARS_VTYPE_SET
@ DEPART_TRIGGERED
The departure is person triggered.
@ SUMO_ATTR_EDGES
the edges of a route
int gPrecision
the precision for floating point outputs
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
void cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
static const GeoConvHelper & getFinal()
the coordinate transformation for writing the location element and for tracking the original coordina...
virtual void inform(std::string msg, bool addType=true)
adds a new error to the list
const std::string & getID() const
Returns the id.
A storage for options typed value containers)
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 storage of an output device and its base (abstract) implementation.
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
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.
A basic edge for routing applications.
bool isTazConnector() const
const ROEdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges, restricted by vClass.
double getLength() const
Returns the length of the edge.
const ROEdgeVector & getPredecessors() const
Returns the edge at the given position from the list of incoming edges.
The router's network representation.
SUMOVTypeParameter * getVehicleTypeSecure(const std::string &id)
Retrieves the named vehicle type.
static RONet * getInstance()
Returns the pointer to the unique instance of RONet (singleton).
const std::string getStoppingPlaceElement(const std::string &id) const
return the element name for the given stopping place id
const std::string getStoppingPlaceName(const std::string &id) const
return the name for the given stopping place id
A planItem can be a Trip which contains multiple tripItems.
double getDepartPos(bool replaceDefault=true) const
void saveVehicles(OutputDevice &os, OutputDevice *const typeos, bool asAlternatives, OptionsCont &options) const
SVCPermissions getModes() const
void updateMOdes(SVCPermissions additionalModes)
const std::string & getStopDest() const
double getWalkFactor() const
SUMOTime getDuration() const
return duration sum of all trip items
double getArrivalPos(bool replaceDefault=true) const
const ROEdge * getDestination() const
const std::string & getStopOrigin() const
virtual void addTripItem(TripItem *tripIt)
std::vector< ROVehicle * > & getVehicles()
void saveAsXML(OutputDevice &os, const bool extended, const bool asTrip, OptionsCont &options) const
const std::string & getGroup() const
std::vector< TripItem * > myTripItems
the fully specified trips
void addVehicle(ROVehicle *veh)
const ROEdge * getOrigin() const
Every person has a plan comprising of multiple planItems.
static const std::string UNDEFINED_STOPPING_PLACE
A ride is part of a trip, e.g., go from here to here by car or bus.
const std::string destStop
const std::string intended
void saveAsXML(OutputDevice &os, const bool extended, OptionsCont &options) const
A planItem can be a Stop.
A TripItem is part of a trip, e.g., go from here to here by car.
SUMOTime getStart() const
SUMOTime getDuration() const
A walk is part of a trip, e.g., go from here to here by foot.
void saveAsXML(OutputDevice &os, const bool extended, OptionsCont &options) const
virtual ~ROPerson()
Destructor.
ROPerson(const SUMOVehicleParameter &pars, const SUMOVTypeParameter *type)
Constructor.
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)
static void addStop(std::vector< PlanItem * > &plan, const SUMOVehicleParameter::Stop &stopPar, const ROEdge *const stopEdge)
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)
void computeRoute(const RORouterProvider &provider, const bool removeLoops, MsgHandler *errorHandler)
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)
bool computeIntermodal(SUMOTime time, const RORouterProvider &provider, PersonTrip *const trip, const ROVehicle *const veh, MsgHandler *const errorHandler)
void saveAsXML(OutputDevice &os, OutputDevice *const typeos, bool asAlternatives, OptionsCont &options) const
Saves the complete person description.
std::vector< PlanItem * > myPlan
The plan of the person.
A routable thing such as a vehicle or person.
const SUMOVehicleParameter & getParameter() const
Returns the definition of the vehicle / person parameter.
const std::string & getID() const
Returns the id of the routable.
SUMOVehicleClass getVClass() const
const SUMOVTypeParameter * getType() const
Returns the type of the routable.
bool myRoutingSuccess
Whether the last routing was successful.
Base class for a vehicle's route definition.
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.
void setProbability(double prob)
Sets the probability of the route.
A vehicle as used by router.
RORouteDef * getRouteDefinition() const
Returns the definition of the route the vehicle takes.
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)
double maxSpeed
The vehicle type's maximum speed [m/s].
SUMOVehicleClass vehicleClass
The vehicle's class.
Definition of vehicle stop (position and duration)
Structure representing possible vehicle parameter.
int parametersSet
Information for the router which parameter were set, TraCI may modify this (when changing color)
std::string vtypeid
The vehicle's type id.
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