60 double departPos,
double arrivalPos,
double departPosLat) :
63 "person '" + personID +
"' walking to " + route.back()->getID()),
64 MOVING_WITHOUT_VEHICLE),
65 myWalkingTime(walkingTime),
67 myCurrentInternalEdge(nullptr),
68 myDepartPos(departPos),
69 myDepartPosLat(departPosLat),
71 myPedestrianState(&myDummyState) {
73 "person '" + personID +
"' walking from " + route.front()->getID());
74 if (walkingTime > 0) {
144 if (!person->
proceed(net, now)) {
160 (*myRouteStep)->addPerson(person);
186 length += edge->getLength();
190 for (ConstMSEdgeVector::const_iterator i = myRoute.begin(); i != myRoute.end() - 1; ++i) {
191 const MSEdge* fromEdge = *i;
192 const MSEdge* toEdge = *(i + 1);
193 const MSLane* from = getSidewalk<MSEdge, MSLane>(fromEdge);
194 const MSLane* to = getSidewalk<MSEdge, MSLane>(toEdge);
197 if (from !=
nullptr && to !=
nullptr) {
200 toPos = to->getShape().front();
203 toPos = to->getShape().back();
206 toPos = to->getShape().front();
209 toPos = to->getShape().back();
224 const double lengthBwd = (length - (myRoute.front()->getLength() -
myDepartPos) - (
229 if (myRoute.size() == 1) {
236 if (mayStartForward && mayStartBackward) {
237 length = lengthFwd < lengthBwd ? lengthFwd : lengthBwd;
238 }
else if (mayStartForward) {
240 }
else if (mayStartBackward) {
281 std::string comment =
"";
293 if (withRouteLength) {
328 if (nextInternal ==
nullptr) {
341 assert(routeOffset >= 0);
342 assert(routeOffset < (
int)
myRoute.size());
359 return "walking to " + dest;
367 MSStoppingPlace* toStop,
const double arrivalPos,
const std::vector<std::string>& lines,
368 const std::string& intendedVeh,
SUMOTime intendedDepart) :
373 intendedVeh, intendedDepart) {
424 "driving to " + dest;
452 std::string comment =
"";
466 if (withRouteLength) {
477 const double arrivalPos,
const double dist,
const bool isExit) :
479 myDist(dist), myAmExit(isExit) {
536 myStopEdge->removePerson(myPerson);
576 if (accessDist > 0.) {
586 if (accessDist > 0.) {
591 (*myStep)->proceed(net,
this, time, prior);
616 if (nextEdge !=
nullptr) {
617 return nextEdge->
getID();
627 assert(walkingStage != 0);
642 for (MSTransportablePlan::const_iterator i =
myPlan->begin(); i !=
myPlan->end(); ++i) {
643 (*i)->tripInfoOutput(os,
this);
656 for (MSTransportablePlan::const_iterator i =
myPlan->begin(); i !=
myPlan->end(); ++i) {
657 (*i)->routeOutput(os, withRouteLength);
666 assert(nextIndex > firstIndex);
682 for (
int i = nextIndex - 1; i >= firstIndex; i--) {
716 myRemoteXYPos = xyPos;
719 myRemotePosLat = posLat;
720 myRemoteAngle = angle;
721 myRemoteEdgeOffset = edgeOffset;
722 myRemoteRoute = route;
723 myLastRemoteAccess = t;
735 return myLastRemoteAccess >= t -
TIME2STEPS(10);
757 s->
getPedestrianState()->
moveToXY(p, myRemoteXYPos, myRemoteLane, myRemotePos, myRemotePosLat, myRemoteAngle, myRemoteEdgeOffset, myRemoteRoute,
The departure is person triggered.
Position getWaitPosition() const
Returns the next free waiting place for pedestrians / containers.
virtual const MSEdge * getNextEdge(const MSPerson::MSPersonStage_Walking &stage) const =0
return the list of internal edges if the pedestrian is on an intersection
void addWaiting(const MSEdge *edge, MSTransportable *person)
adds a transportable to the list of transportables waiting for a vehicle on the specified edge ...
double getAccessPos(const MSEdge *edge) const
the position on the given edge which is connected to this stop, -1 on failure
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
SUMOTime myEstimatedArrival
MSEdge & getEdge() const
Returns the lane's edge.
static void addPedestrianData(double walkLength, SUMOTime walkDuration, SUMOTime walkTimeLoss)
record tripinfo data for pedestrians
virtual bool hasDeparted() const =0
Returns whether this vehicle has departed.
double getBeginLanePosition() const
Returns the begin position of this stop.
virtual void endEventOutput(const MSTransportable &p, SUMOTime t, OutputDevice &os) const
Called for writing the events output (end of an action)
~MSPersonStage_Access()
destructor
virtual ~MSPerson()
destructor
virtual double getAngle(const MSPerson::MSPersonStage_Walking &stage, SUMOTime now) const =0
return the direction in which the person faces in degrees
double getArrivalPos() const
returns the final arrival pos
virtual void setArrived(MSNet *net, MSTransportable *transportable, SUMOTime now)
logs end of the step
double getWaitingPositionOnLane() const
Returns the lane position corresponding to getWaitPosition()
A lane area vehicles can halt at.
virtual SUMOTime getWaitingTime(const MSPerson::MSPersonStage_Walking &stage, SUMOTime now) const =0
return the time the person spent standing
std::string getStageDescription() const
returns the stage description as a string
virtual void routeOutput(OutputDevice &os, const bool withRouteLength) const
Called on writing vehroute output.
virtual void proceed(MSNet *net, MSTransportable *person, SUMOTime now, Stage *previous)
proceeds to the next step
double distanceTo2D(const Position &p2) const
returns the euclidean distance in the x-y-plane
MSEdge * myCurrentInternalEdge
The current internal edge this person is on or 0.
bool hasArrived() const
return whether the person has reached the end of its plan
const MSEdge * getDestination() const
returns the destination edge
virtual const MSEdge * getEdge() const
Returns the current edge.
void postProcessRemoteControl(MSPerson *p)
virtual double getEdgePos(SUMOTime now) const
const MSEdge * getEdge() const
Returns the current edge.
static void addRideData(double rideLength, SUMOTime rideDuration, SUMOVehicleClass vClass, const std::string &line, SUMOTime waitingTime)
record tripinfo data for rides
std::string time2string(SUMOTime t)
Position getPosition(SUMOTime now) const
returns the position of the transportable
virtual void remove(PedestrianState *state)=0
remove the specified person from the pedestrian simulation
std::string myIntendedVehicleID
void setRemoteControlled(Position xyPos, MSLane *l, double pos, double posLat, double angle, int edgeOffset, const ConstMSEdgeVector &route, SUMOTime t)
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
const std::string & getNextEdge() const
return the list of internal edges if this person is walking and the pedestrian model allows it ...
virtual void tripInfoOutput(OutputDevice &os) const
Called on writing tripinfo output.
MSPersonStage_Driving(const MSEdge *destination, MSStoppingPlace *toStop, const double arrivalPos, const std::vector< std::string > &lines, const std::string &intendedVeh="", SUMOTime intendedDepart=-1)
constructor
const PositionVector & getShape() const
Returns this lane's shape.
const std::set< std::string > myLines
the lines to choose from
virtual bool usingInternalLanes()=0
whether movements on intersections are modelled
PositionVector reverse() const
reverse position vector
void tripInfoOutput(OutputDevice &os, const MSTransportable *const transportable) const
Called on writing tripinfo output.
std::vector< const MSEdge * > ConstMSEdgeVector
virtual bool proceed(MSNet *net, SUMOTime time)=0
const std::string & getID() const
Returns the id.
MSStoppingPlace * myDestinationStop
the stop to reach by getting transported (if any)
MSTransportablePlan::iterator myStep
the iterator over the route
const MSJunction * getToJunction() const
const MSEdge * getFromEdge() const
const std::string & getMyName() const
bool isRemoteAffected(SUMOTime t) const
std::string myVehicleLine
The simulated network and simulation perfomer.
The car-following model and parameter.
virtual void erase(MSTransportable *transportable)
removes a single transportable
void addTransportable(MSTransportable *p)
adds a transportable to this stop
static OptionsCont & getOptions()
Retrieves the options.
virtual Position getPosition(const MSPerson::MSPersonStage_Walking &stage, SUMOTime now) const =0
return the network coordinate of the person
PedestrianState * getPedestrianState() const
const SUMOVehicleParameter * myParameter
the plan of the transportable
virtual PedestrianState * add(MSPerson *person, MSPerson::MSPersonStage_Walking *stage, SUMOTime now)=0
register the given person as a pedestrian
void removeStage(int next)
removes the nth next stage
std::string getStageSummary() const
return string summary of the current stage
virtual void beginEventOutput(const MSTransportable &p, SUMOTime t, OutputDevice &os) const
Called for writing the events output.
static double interpretEdgePos(double pos, double maximumValue, SumoXMLAttr attr, const std::string &id)
Interprets negative edge positions and fits them onto a given edge.
bool isWaiting4Vehicle() const
Whether the person waits for a vehicle.
SUMOTime myWaitingSince
The time since which this person is waiting for a ride.
std::string getStageSummary() const
return string summary of the current stage
virtual void proceed(MSNet *net, MSTransportable *person, SUMOTime now, Stage *previous)
proceeds to the next step
ConstMSEdgeVector myRoute
The route of the person.
A road/street connecting two junctions.
static int canTraverse(int dir, const ConstMSEdgeVector &route)
std::vector< MSTransportable::Stage * > MSTransportablePlan
the structure holding the plan of a transportable
MSPersonStage_Access(const MSEdge *destination, MSStoppingPlace *toStop, const double arrivalPos, const double dist, const bool isExit)
constructor
double getEndLanePosition() const
Returns the end position of this stop.
MSTransportable::Stage * getCurrentStage() const
Return the current stage.
MSTransportable::Stage * getNextStage(int next) const
Return the current stage.
static const int UNDEFINED_DIRECTION
void abort(MSTransportable *)
abort this stage (TraCI)
SUMOTime myArrived
the time at which this stage ended
Influencer & getInfluencer()
Returns the velocity/lane influencer.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
SUMOTime myDeparted
the time at which this stage started
Representation of a vehicle.
static MSPModel * getModel()
virtual MSTransportableControl & getPersonControl()
Returns the person control.
A point in 2D or 3D with translation and scaling methods.
SUMOTime getDesiredDepart() const
Returns the desired departure time.
ConstMSEdgeVector getEdges() const
the edges of the current stage
void setVehicle(SUMOVehicle *v)
virtual void addPerson(MSTransportable *p) const
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
~MSPersonStage_Driving()
destructor
MSEventControl * getBeginOfTimestepEvents()
Returns the event control for events executed at the begin of a time step.
virtual double getEdgePos(const MSPerson::MSPersonStage_Walking &stage, SUMOTime now) const =0
return the offset from the start of the current edge measured in its natural direction ...
virtual void addEvent(Command *operation, SUMOTime execTimeStep=-1)
Adds an Event.
double getAngle(SUMOTime now) const
returns the angle of the transportable
virtual void routeOutput(OutputDevice &os, const bool withRouteLength) const
Called on writing vehroute output.
DepartDefinition departProcedure
Information how the vehicle shall choose the depart time.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
std::string getStageDescription() const
returns the stage description as a string
void write(OutputDevice &dev, const OptionsCont &oc, const SumoXMLTag tag=SUMO_TAG_VEHICLE, const std::string &typeID="") const
Writes the parameters as a beginning element.
double getMaxSpeed() const
Get vehicle's maximum speed [m/s].
virtual double getSpeed(const MSPerson::MSPersonStage_Walking &stage) const =0
return the current speed of the person
SUMOVehicle * getWaitingVehicle(const MSEdge *const edge, const std::set< std::string > &lines, const double position, const std::string ridingID)
std::string myVehicleID
cached vehicle data for output after the vehicle has been removed
const std::string & getID() const
returns the id of the transportable
double getMaxSpeed(const MSTransportable *const person) const
accessors to be used by MSPModel
virtual void removePerson(MSTransportable *p) const
ConstMSEdgeVector::iterator myRouteStep
SUMOVehicle * myVehicle
The taken vehicle.
SUMOVehicleClass myVehicleVClass
void setSpeed(double speed)
sets the walking speed (ignored in other stages)
static std::string escapeXML(const std::string &orig, const bool maskDoubleHyphen=false)
Replaces the standard escapes by their XML entities.
SUMOTime myIntendedDepart
MSPerson(const SUMOVehicleParameter *pars, MSVehicleType *vtype, MSTransportable::MSTransportablePlan *plan, const double speedFactor)
constructor
double getAccessDistance(const MSEdge *edge) const
the distance from the access on the given edge to the stop, -1 on failure
static std::string emptyString
An empty string.
MSStoppingPlace * getDestinationStop() const
returns the destination stop (if any)
virtual double getSpeedFactor() const
the current speed factor of the transportable (where applicable)
void appendStage(Stage *stage, int next=-1)
Appends the given stage to the current plan.
Position getPosition(SUMOTime now) const
returns the position of the transportable
Changes the wished person speed and position.
double computeAverageSpeed() const
Structure representing possible vehicle parameter.
double length() const
Returns the length.
SUMOTime getWaitingTime(SUMOTime now) const
the time this transportable spent waiting
void reroute(ConstMSEdgeVector &newEdges, double departPos, int firstIndex, int nextIndex)
set new walk and replace the stages with relative indices in the interval [firstIndex, nextIndex[
MSInsertionControl & getInsertionControl()
Returns the insertion control.
const std::string DEFAULT_PEDTYPE_ID
const double myChosenSpeedFactor
virtual const SUMOVehicleParameter & getParameter() const =0
Returns the vehicle's parameter (including departure definition)
const MSJunction * getFromJunction() const
SUMOTime myWalkingTime
the time the person is walking
double getSpeed() const
the speed of the transportable
bool moveToNextEdge(MSPerson *person, SUMOTime currentTime, MSEdge *nextInternal=nullptr)
move forward and return whether the person arrived
StageType getStageType() const
virtual void tripInfoOutput(OutputDevice &os, const MSTransportable *const transportable) const
Called on writing tripinfo output.
~MSPersonStage_Walking()
destructor
const std::string & getID() const
Returns the name of the vehicle type.
MSPersonStage_Walking(const std::string &personID, const ConstMSEdgeVector &route, MSStoppingPlace *toStop, SUMOTime walkingTime, double speed, double departPos, double arrivalPos, double departPosLat)
constructor
double angleAt2D(int pos) const
get angle in certain position of position vector
const Position geometryPositionAtOffset(double offset, double lateralOffset=0) const
StageType getStageType(int next) const
the stage type for the nth next stage
PedestrianState * myPedestrianState
state that is to be manipulated by MSPModel
bool proceed(MSNet *net, SUMOTime time)
virtual void addPerson(MSTransportable *person)=0
Adds a person to this vehicle.
static DummyState myDummyState
static const int BACKWARD
const MSEdge * getNextEdgePtr() const
returns the next edge ptr if this person is walking and the pedestrian model allows it ...
const MSVehicleType & getVehicleType() const
Static storage of an output device and its base (abstract) implementation.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
MSTransportablePlan * myPlan
the plan of the transportable
virtual void proceed(MSNet *net, MSTransportable *person, SUMOTime now, Stage *previous)
proceeds to the next step
double getAngle(SUMOTime now) const
returns the angle of the transportable
SUMOTime execute(SUMOTime currentTime)
Executes the command.
const MSEdge * myWaitingEdge
virtual void routeOutput(OutputDevice &os, const bool withRouteLength) const
Called on writing vehroute output.
const MSLane & getLane() const
Returns the lane this stop is located at.
double walkDistance() const
compute total walking distance
Influencer * myInfluencer
An instance of a speed/position influencing instance; built in "getInfluencer".
void add(SUMOVehicle *veh)
Adds a single vehicle for departure.
bool isRemoteControlled() const
Position positionAtOffset(double pos, double lateralOffset=0) const
Returns the position at the given length.
Representation of a lane in the micro simulation.
const MSEdge * getFromEdge() const
void unregisterOneWaiting(const bool isPerson)
decreases the count of vehicles waiting for a transport to allow recognition of person / container re...
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
double getEdgePos(SUMOTime now) const
void lf()
writes a line feed if applicable
virtual void tripInfoOutput(OutputDevice &os, const MSTransportable *const transportable) const
Called on writing tripinfo output.
static const Position INVALID
used to indicate that a position is valid
void removeWaiting(const MSEdge *const edge, const SUMOVehicle *vehicle)
Removes a vehicle from the list of waiting vehicles to a given edge.
double myArrivalPos
the position at which we want to arrive
StageType getCurrentStageType() const
the current stage type of the transportable
void setRouteIndex(MSPerson *person, int routeOffset)
place person on a previously passed edge
virtual void moveToXY(MSPerson *p, Position pos, MSLane *lane, double lanePos, double lanePosLat, double angle, int routeOffset, const ConstMSEdgeVector &edges, SUMOTime t)
try to move person to the given position
std::string getStageSummary() const
return string summary of the current stage