61 for (std::vector<SUMOVehicleParameter::Stop>::const_iterator s = pars.
stops.begin(); s != pars.
stops.end(); ++s) {
64 if (pars.
via.size() != 0) {
68 for (std::vector<std::string>::const_iterator it = pars.
via.begin(); it != pars.
via.end(); ++it) {
79 assert(stopEdge != 0);
81 if (errorHandler !=
nullptr) {
82 errorHandler->
inform(
"Stop edge '" + stopEdge->
getID() +
"' does not allow vehicle '" +
getID() +
"'.");
87 std::vector<SUMOVehicleParameter::Stop>::iterator iter =
getParameter().
stops.begin();
88 ConstROEdgeVector::iterator edgeIter =
myStopEdges.begin();
97 ConstROEdgeVector::const_iterator stopEdgeIt = std::find(edges.begin(), edges.end(), stopEdge);
98 if (stopEdgeIt == edges.end()) {
103 if (edgeIter > stopEdgeIt || (edgeIter == stopEdgeIt && iter->endPos >= stopPar.
endPos)) {
111 iter += stopPar.
index;
112 edgeIter += stopPar.
index;
117 if (stopPar.
jump >= 0) {
119 if (errorHandler !=
nullptr) {
120 errorHandler->
inform(
"Jumps are not supported from internal stop edge '" + stopEdge->
getID() +
"'.");
143 const bool removeLoops,
MsgHandler* errorHandler) {
145 std::string noRouteMsg =
"The vehicle '" +
getID() +
"' has no valid route.";
148 if (routeDef ==
nullptr) {
149 errorHandler->
inform(noRouteMsg);
154 if (current ==
nullptr || current->
size() == 0) {
157 errorHandler->
inform(noRouteMsg);
170 if (current->
size() == 0) {
172 errorHandler->
inform(noRouteMsg +
" (after removing loops)");
187 mandatory.push_back(requiredStart);
190 if (e->isInternal()) {
194 if (mandatory.size() == 0 || after != mandatory.back()) {
195 mandatory.push_back(before);
196 mandatory.push_back(after);
199 if (mandatory.size() == 0 || e != mandatory.back()) {
200 mandatory.push_back(e);
205 if (mandatory.size() < 2 || mandatory.back() != requiredEnd) {
206 mandatory.push_back(requiredEnd);
215 auto itM = mandatory.begin();
218 while (itM != mandatory.end() && itS != itSEnd) {
219 bool repeatMandatory =
false;
222 if ((*itM)->getID() == itS->edge) {
223 if (itS->jump >= 0) {
224 jumpStarts.insert(itM);
227 if (itS != itSEnd && itS->edge == (itS - 1)->edge) {
228 repeatMandatory =
true;
231 if (!repeatMandatory) {
240 if (typeos !=
nullptr &&
getType() !=
nullptr && !
getType()->saved) {
249 const bool writeTrip = options.
exists(
"write-trips") && options.
getBool(
"write-trips");
250 const bool writeGeoTrip = writeTrip && options.
getBool(
"write-trips.geo");
251 const bool writeJunctions = writeTrip && options.
getBool(
"write-trips.junctions");
252 const bool writeNamedRoute = !asAlternatives && options.
getBool(
"named-routes");
253 const bool writeCosts = options.
exists(
"write-costs") && options.
getBool(
"write-costs");
254 const bool writeExit = options.
exists(
"exit-times") && options.
getBool(
"exit-times");
255 const bool writeLength = options.
exists(
"route-length") && options.
getBool(
"route-length");
258 if (writeNamedRoute) {
264 writeLength, routeID);
267 routeID = it->second;
276 const ROEdge* from =
nullptr;
277 const ROEdge* to =
nullptr;
278 if (edges.size() > 0) {
279 if (edges.front()->isTazConnector()) {
280 if (edges.size() > 1) {
282 if (from->
isTazConnector() && writeJunctions && edges.front()->getSuccessors().size() > 0) {
290 if (edges.back()->isTazConnector()) {
291 if (edges.size() > 1) {
292 to = edges[edges.size() - 2];
293 if (to->
isTazConnector() && writeJunctions && edges.back()->getPredecessors().size() > 0) {
299 to = edges[edges.size() - 1];
302 if (from !=
nullptr) {
313 }
else if (writeJunctions) {
330 }
else if (writeJunctions) {
337 std::vector<std::string> viaOut;
350 assert(viaEdge !=
nullptr);
352 Position viaPos = viaEdge->
getLanes()[0]->getShape().positionAtOffset2D(viaEdge->
getLanes()[0]->getShape().length2D() / 2);
359 }
else if (writeJunctions) {
362 viaOut.push_back(viaEdge->
getID());
367 }
else if (writeNamedRoute) {
372 for (std::vector<SUMOVehicleParameter::Stop>::const_iterator stop =
getParameter().stops.begin(); stop !=
getParameter().
stops.end(); ++stop) {
std::vector< const ROEdge * > ConstROEdgeVector
@ GIVEN
The lane is given.
@ GIVEN
The position is given.
@ GIVEN
The arrival lane is given.
@ GIVEN
The arrival position is given.
@ SUMO_TAG_VEHICLE
description of a vehicle
@ SUMO_TAG_TRIP
a single trip definition (used by router)
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ SUMO_ATTR_FROM_JUNCTION
int gPrecision
the precision for floating point outputs
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
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.
bool usingGeoProjection() const
Returns whether a transformation from geo to metric coordinates will be performed.
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 & 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.
const ROEdge * getNormalBefore() const
if this edge is an internal edge, return its first normal predecessor, otherwise the edge itself
const ROEdge * getNormalAfter() const
if this edge is an internal edge, return its first normal successor, otherwise the edge itself
const RONode * getToJunction() const
bool isTazConnector() const
bool prohibits(const ROVehicle *const vehicle) const
Returns whether this edge prohibits the given vehicle to pass it.
const RONode * getFromJunction() const
bool isInternal() const
return whether this edge is an internal edge
const ROEdgeVector & getPredecessors() const
Returns the edge at the given position from the list of incoming edges.
const ROEdgeVector & getSuccessors(SUMOVehicleClass vClass=SVC_IGNORING) const
Returns the following edges, restricted by vClass.
const std::vector< ROLane * > & getLanes() const
Returns this edge's lanes.
The router's network representation.
static RONet * getInstance()
Returns the pointer to the unique instance of RONet (singleton).
ROEdge * getEdge(const std::string &name) const
Retrieves an edge from the network.
A routable thing such as a vehicle or person.
SUMOVehicleClass getVClass() const
bool myRoutingSuccess
Whether the last routing was successful.
const SUMOVTypeParameter * getType() const
Returns the type of the routable.
const std::string & getID() const
Returns the id of the routable.
const SUMOVehicleParameter & getParameter() const
Returns the definition of the vehicle / person parameter.
Base class for a vehicle's route definition.
const RORoute * getFirstRoute() const
OutputDevice & writeXMLDefinition(OutputDevice &dev, const ROVehicle *const veh, bool asAlternatives, bool withExitTimes, bool withCost, bool withLength) const
Saves the built route / route alternatives.
RORoute * buildCurrentRoute(SUMOAbstractRouter< ROEdge, ROVehicle > &router, SUMOTime begin, const ROVehicle &veh) const
Triggers building of the complete route (via preComputeCurrentRoute) or returns precomputed route.
const RORoute * getUsedRoute() const
void addAlternative(SUMOAbstractRouter< ROEdge, ROVehicle > &router, const ROVehicle *const, RORoute *current, SUMOTime begin)
Adds an alternative to the list of routes.
bool discardSilent() const
whether this route shall be silently discarded
A complete router's route.
int size() const
Returns the number of edges in this route.
ConstROEdgeVector getNormalEdges() const
return edges that shall be written in the route definition
void recheckForLoops(const ConstROEdgeVector &mandatory)
Checks whether this route contains loops and removes such.
const std::vector< SUMOVehicleParameter::Stop > & getStops() const
Returns the list of stops this route contains.
const ConstROEdgeVector & getEdgeVector() const
Returns the list of edges this route consists of.
const ROEdge * getFirst() const
Returns the first edge in the route.
OutputDevice & writeXMLDefinition(OutputDevice &dev, const ROVehicle *const veh, const bool withCosts, const bool withProb, const bool withExitTimes, const bool withLength, const std::string &id="") const
void collectJumps(const ConstROEdgeVector &mandatory, std::set< ConstROEdgeVector::const_iterator > &jumpStarts) const
collect mandatory-edge iterators that define jumps in the route
static std::map< ConstROEdgeVector, std::string > mySavedRoutes
map of all routes that were already saved with a name
const ROEdge * getDepartEdge() const
Returns the first edge the vehicle takes.
SUMOTime getDepartureTime() const
Returns the time the vehicle starts at, 0 for triggered vehicles.
ConstROEdgeVector getMandatoryEdges(const ROEdge *requiredStart, const ROEdge *requiredEnd) const
compute mandatory edges
void saveAsXML(OutputDevice &os, OutputDevice *const typeos, bool asAlternatives, OptionsCont &options) const
Saves the complete vehicle description.
RORouteDef * getRouteDefinition() const
Returns the definition of the route the vehicle takes.
ConstROEdgeVector myStopEdges
The edges where the vehicle stops.
ROVehicle(const SUMOVehicleParameter &pars, RORouteDef *route, const SUMOVTypeParameter *type, const RONet *net, MsgHandler *errorHandler=0)
Constructor.
const ConstROEdgeVector & getStopEdges() const
virtual ~ROVehicle()
Destructor.
SUMOTime myJumpTime
Whether this vehicle has any jumps defined.
void addStop(const SUMOVehicleParameter::Stop &stopPar, const RONet *net, MsgHandler *errorHandler)
Adds a stop to this vehicle.
void computeRoute(const RORouterProvider &provider, const bool removeLoops, MsgHandler *errorHandler)
RORouteDef *const myRoute
The route the vehicle takes.
SUMOAbstractRouter< E, V > & getVehicleRouter(SUMOVehicleClass svc) 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)
Definition of vehicle stop (position and duration)
std::string edge
The edge to stop at.
int index
at which position in the stops list
SUMOTime jump
transfer time if there shall be a jump from this stop to the next route edge
double endPos
The stopping position end.
Structure representing possible vehicle parameter.
std::vector< std::string > via
List of the via-edges the vehicle must visit.
ArrivalLaneDefinition arrivalLaneProcedure
Information how the vehicle shall choose the lane to arrive on.
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.
DepartLaneDefinition departLaneProcedure
Information how the vehicle shall choose the lane to depart from.
std::vector< Stop > stops
List of the stops the vehicle will make, TraCI may add entries here.
ArrivalPosDefinition arrivalPosProcedure
Information how the vehicle shall choose the arrival position.
DepartPosDefinition departPosProcedure
Information how the vehicle shall choose the departure position.