62 #ifdef CHECK_MEMORY_LEAKS
64 #endif // CHECK_MEMORY_LEAKS
73 myVehicleClasses2Keep(0),
74 myVehicleClasses2Remove(0),
75 myNeedGeoTransformedPrunningBoundary(false)
90 if (oc.
isSet(
"keep-edges.input-file")) {
91 std::ifstream strm(oc.
getString(
"keep-edges.input-file").c_str());
93 throw ProcessError(
"Could not load names of edges too keep from '" + oc.
getString(
"keep-edges.input-file") +
"'.");
105 if (oc.
isSet(
"remove-edges.input-file")) {
106 std::ifstream strm(oc.
getString(
"remove-edges.input-file").c_str());
108 throw ProcessError(
"Could not load names of edges too remove from '" + oc.
getString(
"remove-edges.input-file") +
"'.");
110 while (strm.good()) {
120 if (oc.
isSet(
"keep-edges.explicit")) {
121 const std::vector<std::string> edges = oc.
getStringVector(
"keep-edges.explicit");
124 if (oc.
isSet(
"remove-edges.explicit")) {
125 const std::vector<std::string> edges = oc.
getStringVector(
"remove-edges.explicit");
128 if (oc.
exists(
"keep-edges.by-vclass") && oc.
isSet(
"keep-edges.by-vclass")) {
131 if (oc.
exists(
"remove-edges.by-vclass") && oc.
isSet(
"remove-edges.by-vclass")) {
134 if (oc.
exists(
"keep-edges.by-type") && oc.
isSet(
"keep-edges.by-type")) {
135 const std::vector<std::string> types = oc.
getStringVector(
"keep-edges.by-type");
138 if (oc.
exists(
"remove-edges.by-type") && oc.
isSet(
"remove-edges.by-type")) {
139 const std::vector<std::string> types = oc.
getStringVector(
"remove-edges.by-type");
143 if (oc.
isSet(
"keep-edges.in-boundary") || oc.
isSet(
"keep-edges.in-geo-boundary")) {
145 "keep-edges.in-boundary" :
"keep-edges.in-geo-boundary");
147 std::vector<SUMOReal> poly;
148 for (std::vector<std::string>::iterator i = polyS.begin(); i != polyS.end(); ++i) {
151 if (poly.size() < 4) {
152 throw ProcessError(
"Invalid boundary: need at least 2 coordinates");
153 }
else if (poly.size() % 2 != 0) {
154 throw ProcessError(
"Invalid boundary: malformed coordinate");
155 }
else if (poly.size() == 4) {
162 for (std::vector<SUMOReal>::iterator j = poly.begin(); j != poly.end();) {
175 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); i++) {
200 if (oc.
exists(
"dismiss-vclasses") && oc.
getBool(
"dismiss-vclasses")) {
258 WRITE_ERROR(
"Cannot prune edges using a geo-boundary because no projection has been loaded");
275 EdgeCont::const_iterator i =
myEdges.find(
id);
277 if (retrieveExtracted) {
318 if (downstream ==
true) {
342 hints.push_back(hintedge);
345 for (EdgeVector::iterator i = hints.begin(); i != hints.end(); i++) {
347 for (EdgeVector::iterator j = candidates.begin(); j != candidates.end(); j++) {
348 NBEdge* poss_searched = (*j);
350 ? poss_searched->
myTo : poss_searched->
myFrom;
353 if (find(cont.begin(), cont.end(), hintedge) != cont.end()) {
354 return poss_searched;
369 size_t maxLength = 0;
370 std::string tid =
id +
"[";
371 for (EdgeCont::const_iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
372 if ((*i).first.find(tid) == 0) {
373 maxLength =
MAX2(maxLength, (*i).first.length());
378 std::vector<std::string> names;
379 names.push_back(
id +
"[1]");
380 names.push_back(
id +
"[0]");
381 while (names.size() > 0) {
383 std::string cid = names.back();
389 if (cid.length() + 3 < maxLength) {
390 names.push_back(cid +
"[1]");
391 names.push_back(cid +
"[0]");
428 if (
myEdges.count(newID) != 0) {
429 throw ProcessError(
"Attempt to rename edge using existing id '" + newID +
"'");
441 (
unsigned int) edge->
myLanes.size(), (
unsigned int) edge->
myLanes.size());
447 const std::string& firstEdgeName,
448 const std::string& secondEdgeName,
449 unsigned int noLanesFirstEdge,
unsigned int noLanesSecondEdge,
451 const int changedLeft) {
462 return splitAt(dc, edge, pos, node, firstEdgeName, secondEdgeName,
463 noLanesFirstEdge, noLanesSecondEdge, speed, changedLeft);
470 const std::string& firstEdgeName,
471 const std::string& secondEdgeName,
472 unsigned int noLanesFirstEdge,
unsigned int noLanesSecondEdge,
474 const int changedLeft
477 assert(changedLeft > -((
int)noLanesFirstEdge));
478 assert(changedLeft < (
int)noLanesSecondEdge);
481 std::pair<PositionVector, PositionVector> geoms =
484 geoms.first.pop_back();
489 geoms.second.pop_front();
493 NBEdge* one =
new NBEdge(firstEdgeName, edge->
myFrom, node, edge, geoms.first, noLanesFirstEdge);
494 NBEdge* two =
new NBEdge(secondEdgeName, node, edge->
myTo, edge, geoms.second, noLanesSecondEdge);
511 for (
int i2 = 0; i2 < (int)two->
getNumLanes(); i2++) {
538 std::vector<std::string>
540 std::vector<std::string> ret;
541 for (EdgeCont::const_iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
542 ret.push_back((*i).first);
552 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
553 NBEdge* edge = (*i).second;
557 toRemove.push_back(edge);
560 for (EdgeVector::iterator j = toRemove.begin(); j != toRemove.end(); ++j) {
568 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
569 if ((*i).second->getGeometry().size() < 3) {
572 (*i).second->splitGeometry(*
this, nc);
579 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
580 (*i).second->reduceGeometry(minDist);
587 if (maxAngle > 0 || minRadius > 0) {
588 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
589 (*i).second->checkGeometry(maxAngle, minRadius, fix);
598 for (EdgeCont::const_iterator i =
myEdges.begin(); i !=
myEdges.end(); i++) {
599 (*i).second->clearControllingTLInformation();
606 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); i++) {
607 (*i).second->sortOutgoingConnectionsByAngle();
614 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); i++) {
615 (*i).second->computeEdge2Edges(noLeftMovers);
622 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); i++) {
623 (*i).second->computeLanes2Edges();
630 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); i++) {
631 (*i).second->recheckLanes();
638 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); i++) {
639 (*i).second->appendTurnaround(noTLSControlled);
646 for (std::set<std::string>::const_iterator it = ids.begin(); it != ids.end(); it++) {
647 myEdges[*it]->appendTurnaround(noTLSControlled);
654 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); i++) {
655 (*i).second->computeEdgeShape();
662 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
663 (*i).second->computeLaneShapes();
678 unsigned int nolanes = 0;
684 NBEdge* tpledge = *(edges.begin());
685 NBNode* from = tpledge->getFromNode();
686 NBNode* to = tpledge->getToNode();
687 EdgeVector::const_iterator i;
688 for (i = edges.begin(); i != edges.end(); i++) {
690 assert((*i)->getFromNode() == from);
691 assert((*i)->getToNode() == to);
693 nolanes += (*i)->getNumLanes();
695 if (i != edges.begin()) {
700 speed += (*i)->getSpeed();
702 priority =
MAX2(priority, (*i)->getPriority());
704 speed /= edges.size();
706 NBEdge* newEdge =
new NBEdge(
id, from, to,
"", speed, nolanes, priority,
708 tpledge->getStreetName(), tpledge->myLaneSpreadFunction);
711 for (i = edges.begin(); i != edges.end(); ++i) {
712 const std::vector<NBEdge::Lane>& lanes = (*i)->
getLanes();
713 for (
int j = 0; j < (int)lanes.size(); ++j) {
727 for (i = edges.begin(); i != edges.end(); i++) {
729 for (EdgeVector::iterator j = ev.begin(); j != ev.end(); j++) {
734 unsigned int currLane = 0;
735 for (i = edges.begin(); i != edges.end(); i++) {
737 currLane += (*i)->getNumLanes();
741 for (i = edges.begin(); i != edges.end(); i++) {
742 unsigned int noLanes = (*i)->getNumLanes();
743 for (
unsigned int j = 0; j < noLanes; j++, currLane++) {
749 for (i = edges.begin(); i != edges.end(); i++) {
757 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
758 std::string oppositeID;
759 if ((*i).first[0] ==
'-') {
760 oppositeID = (*i).first.substr(1);
762 oppositeID =
"-" + (*i).first;
787 if (from != 0 && to != 0) {
789 WRITE_WARNING(
"Could not insert connection between '" + (*i).from +
"' and '" + (*i).to +
"' after build.");
795 for (EdgeCont::iterator it =
myEdges.begin(); it !=
myEdges.end(); ++it) {
796 NBEdge* edge = it->second;
799 std::vector<NBEdge::Connection> connections = edge->
getConnections();
800 for (std::vector<NBEdge::Connection>::iterator it_con = connections.begin(); it_con != connections.end(); ++it_con) {
814 size_t len =
id.length();
816 for (EdgeCont::const_iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
817 std::string curr = (*i).first;
820 if (curr.length() <= len) {
825 if (curr.substr(0, len) ==
id && curr[len] ==
'[') {
826 ret.push_back((*i).second);
830 size_t pos = curr.find(
id);
832 if (pos == std::string::npos) {
837 if (curr[pos - 1] !=
']' && curr[pos - 1] !=
'+') {
842 if (pos +
id.length() < curr.length()) {
843 if (curr[pos +
id.length()] !=
'[' && curr[pos +
id.length()] !=
'+') {
848 ret.push_back((*i).second);
857 std::set<NBEdge*> loadedRoundaboutEdges;
859 loadedRoundaboutEdges.insert(it->begin(), it->end());
863 std::set<NBEdge*> candidates;
864 for (EdgeCont::const_iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
868 candidates.insert(e);
873 std::set<NBEdge*> visited;
874 for (std::set<NBEdge*>::const_iterator i = candidates.begin(); i != candidates.end(); ++i) {
881 if (visited.count(e) > 0) {
885 loopEdges.push_back(e);
890 if (edges.size() < 2) {
899 EdgeVector::const_iterator me = find(edges.begin(), edges.end(), e);
908 EdgeVector::const_iterator loopClosed = find(loopEdges.begin(), loopEdges.end(), left);
909 const size_t loopSize = loopEdges.end() - loopClosed;
914 }
else if (loopSize < loopEdges.size()) {
916 EdgeVector(loopEdges.begin() + (loopEdges.size() - loopSize), loopEdges.end()).swap(loopEdges);
920 for (EdgeVector::const_iterator j = loopEdges.begin(); j != loopEdges.end(); ++j) {
921 if ((*j)->getToNode()->getEdges().size() > 2) {
925 if (attachments < 3) {
930 if (visited.count(left) > 0) {
934 loopEdges.push_back(left);
946 const std::set<EdgeSet>
967 for (std::set<EdgeSet>::const_iterator it = roundabouts.begin(); it != roundabouts.end(); ++it) {
968 const EdgeSet roundaboutSet = *it;
969 for (std::set<NBEdge*>::const_iterator j = roundaboutSet.begin(); j != roundaboutSet.end(); ++j) {
971 NBNode* node = (*j)->getToNode();
973 for (EdgeVector::const_iterator k = incoming.begin(); k != incoming.end(); ++k) {
975 if (roundaboutSet.count(inEdge) > 0) {
984 (*j)->setJunctionPriority(node, 1000);
992 for (EdgeCont::iterator i =
myEdges.begin(); i !=
myEdges.end(); ++i) {
1030 int sidewalksCreated = 0;
1031 for (EdgeCont::iterator it =
myEdges.begin(); it !=
myEdges.end(); it++) {
1032 NBEdge* edge = it->second;
1037 || (!fromPermissions && edge->
getSpeed() > minSpeed && edge->
getSpeed() <= maxSpeed))
1041 sidewalksCreated += 1;
1044 return sidewalksCreated;
int guessSidewalks(SUMOReal width, SUMOReal minSpeed, SUMOReal maxSpeed, bool fromPermissions)
add sidwalks to edges within the given limits or permissions and return the number of edges affected ...
std::vector< Lane > myLanes
Lane information.
void replaceIncoming(NBEdge *which, NBEdge *by, unsigned int laneOff)
Replaces occurences of the first edge within the list of incoming by the second Connections are remap...
std::vector< std::string > getStringVector(const std::string &name) const
Returns the list of string-vector-value of the named option (only for Option_String) ...
const EdgeVector & getIncomingEdges() const
Returns this node's incoming edges.
const std::string & getTypeID() const
A structure which describes a connection between edges or lanes.
void sortOutgoingLanesConnections()
Sorts all lanes of all edges within the container by their direction.
void markRoundabouts()
mark edge priorities and prohibit turn-arounds for all roundabout edges
void setRoundabout()
update the type of this node as a roundabout
NBEdge * retrievePossiblySplit(const std::string &id, bool downstream) const
Tries to retrieve an edge, even if it is splitted.
static const SUMOReal UNSPECIFIED_WIDTH
unspecified lane width
A class representing a single street sign.
bool x2cartesian_const(Position &from) const
Converts the given coordinate into a cartesian using the previous initialisation. ...
SUMOReal nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
std::vector< std::string > getAllNames() const
Returns all ids of known edges.
static bool transformCoordinates(Position &from, bool includeInBoundary=true, GeoConvHelper *from_srs=0)
transforms loaded coordinates handles projections, offsets (using GeoConvHelper) and import of height...
void addSign(NBSign sign)
NBEdge * toEdge
The edge the connections yields in.
const std::set< EdgeSet > getRoundabouts() const
Returns the determined roundabouts.
static SUMOReal _2SUMOReal(const E *const data)
bool myNeedGeoTransformedPrunningBoundary
whether a geo transform has been applied to the pruning boundary
A container for traffic light definitions and built programs.
void setLaneWidth(int lane, SUMOReal width)
set lane specific width (negative lane implies set for all lanes)
bool myRemoveEdgesAfterJoining
Whether edges shall be joined first, then removed.
void setSpeed(int lane, SUMOReal speed)
set lane specific speed (negative lane implies set for all lanes)
const std::vector< NBEdge::Lane > & getLanes() const
Returns the lane definitions.
void moveOutgoingConnectionsFrom(NBEdge *e, unsigned int laneOff)
void addSidewalk(SUMOReal width)
add a pedestrian sidewalk of the given width and shift existing connctions
static GeoConvHelper & getProcessing()
the coordinate transformation to use for input conversion and processing
void removeEdge(NBEdge *edge, bool removeFromConnections=true)
Removes edge from this node and optionally removes connections as well.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
The representation of a single edge during network building.
A container for districts.
static GeoConvHelper & getLoaded()
the coordinate transformation that was loaded fron an input file
void clearControllingTLInformation() const
Clears information about controlling traffic lights for all connenections of all edges.
void setPermissions(SVCPermissions permissions, int lane=-1)
set allowed/disallowed classes for the given lane or for all lanes if -1 is given ...
void generateStreetSigns()
assigns street signs to edges based on toNode types
void rename(NBEdge *edge, const std::string &newID)
Renames the edge. Throws exception if newID already exists.
bool splitAt(NBDistrictCont &dc, NBEdge *edge, NBNode *node)
Splits the edge at the position nearest to the given node.
void recheckPostProcessConnections()
Try to set any stored connections.
SUMOReal getFloat(const std::string &name) const
Returns the SUMOReal-value of the named option (only for Option_Float)
static void nextCW(const EdgeVector &edges, EdgeVector::const_iterator &from)
void addPostProcessConnection(const std::string &from, int fromLane, const std::string &to, int toLane, bool mayDefinitelyPass, bool keepClear)
Adds a connection which could not be set during loading.
unsigned int myEdgesSplit
the number of splits of edges during the building
static const SUMOReal UNSPECIFIED_OFFSET
unspecified lane offset
void computeLanes2Edges()
Computes for each edge which lanes approach the next edges.
std::vector< PostProcessConnection > myConnections
The list of connections to recheck.
#define WRITE_WARNING(msg)
static OptionsCont & getOptions()
Retrieves the options.
void checkGeometries(const SUMOReal maxAngle, const SUMOReal minRadius, bool fix)
NBEdgeCont(NBTypeCont &tc)
Constructor.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
const EdgeVector & getOutgoingEdges() const
Returns this node's outgoing edges.
const std::string & getID() const
Returns the id.
bool addEdge2EdgeConnection(NBEdge *dest)
Adds a connection to another edge.
bool overlapsWith(const AbstractPoly &poly, SUMOReal offset=0) const
Returns whether the boundary overlaps with the given polygon.
static SUMOReal nearest_offset_on_line_to_point2D(const Position &l1, const Position &l2, const Position &p, bool perpendicular=true)
SVCPermissions myVehicleClasses2Keep
Set of vehicle types which must be allowed on edges in order to keep them.
const Position & getPosition() const
Returns the position of this node.
void reduceGeometries(const SUMOReal minDist)
static bool startsWith(const std::string &str, const std::string prefix)
Checks whether a given string starts with the prefix.
Lanes to lanes - relationships are loaded; no recheck is necessary/wished.
std::set< NBEdge * > EdgeSet
bool usingGeoProjection() const
Returns whether a transformation from geo to metric coordinates will be performed.
bool insert(NBEdge *edge, bool ignorePrunning=false)
Adds an edge to the dictionary.
void removeUnwishedEdges(NBDistrictCont &dc)
Removes unwished edges (not in keep-edges)
void extract(NBDistrictCont &dc, NBEdge *edge, bool remember=false)
Removes the given edge from the container like erase but does not delete it.
A point in 2D or 3D with translation and scaling methods.
void guessRoundabouts()
Determines which edges belong to roundabouts and increases their priority.
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
unsigned int getNumLanes() const
Returns the number of lanes.
std::set< std::string > myEdges2Keep
Set of ids of edges which shall explicitly be kept.
SumoXMLNodeType getType() const
Returns the type of this node.
void computeEdge2Edges(bool noLeftMovers)
Computes for each edge the approached edges.
void computeLaneShapes()
Computes the shapes of all lanes of all edges stored in the container.
const EdgeVector & getEdges() const
Returns all edges which participate in this node.
void splitGeometry(NBNodeCont &nc)
Splits edges into multiple if they have a complex geometry.
EdgeCont myEdges
The instance of the dictionary (id->edge)
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
void clear()
Deletes all edges.
EdgeCont myExtractedEdges
The extracted nodes which are kept for reference.
bool knows(const std::string &type) const
Returns whether the named type is in the container.
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
The connection was given by the user.
std::set< EdgeSet > myGuessedRoundabouts
Edges marked as belonging to a roundabout after guessing.
void removeFromConnections(NBEdge *toEdge, int fromLane=-1, int toLane=-1, bool tryLater=false)
Removes the specified connection(s)
std::set< EdgeSet > myRoundabouts
Edges marked as belonging to a roundabout by the user (each EdgeVector is a roundabout) ...
NBEdge * getConnectionTo(NBNode *n) const
int getJunctionPriority(const NBNode *const node) const
Returns the junction priority (normalised for the node currently build)
void joinSameNodeConnectingEdges(NBDistrictCont &dc, NBTrafficLightLogicCont &tlc, EdgeVector edges)
Joins the given edges because they connect the same nodes.
std::pair< PositionVector, PositionVector > splitAt(SUMOReal where) const
Returns the two lists made when this list vector is splitted at the given point.
SVCPermissions myVehicleClasses2Remove
Set of vehicle types which need not be supported (edges which allow ONLY these are removed) ...
SVCPermissions getPermissions(int lane=-1) const
get the union of allowed classes over all lanes or for a specific lane
PositionVector myPrunningBoundary
Boundary within which an edge must be located in order to be kept.
SUMOReal length() const
Returns the length.
void push_back(const PositionVector &p)
Appends all positions from the given vector.
std::set< std::string > myTypes2Keep
Set of edges types which shall be kept.
Boundary & grow(SUMOReal by)
extends the boundary by the given amount
bool addLane2LaneConnection(unsigned int fromLane, NBEdge *dest, unsigned int toLane, Lane2LaneInfoType type, bool mayUseSameDestination=false, bool mayDefinitelyPass=false, bool keepClear=true)
Adds a connection between the specified this edge's lane and an approached one.
NBNode * getToNode() const
Returns the destination node of the edge.
SUMOReal myEdgesMinSpeed
The minimum speed an edge may have in order to be kept (default: -1)
void setID(const std::string &newID)
resets the id
void replaceOutgoing(NBEdge *which, NBEdge *by, unsigned int laneOff)
Replaces occurences of the first edge within the list of outgoing by the second Connections are remap...
NBEdge * retrieve(const std::string &id, bool retrieveExtracted=false) const
Returns the edge that has the given id.
void appendTurnarounds(bool noTLSControlled)
Appends turnarounds to all edges stored in the container.
std::vector< NBEdge * > EdgeVector
bool getShallBeDiscarded(const std::string &type) const
Returns the information whether edges of this type shall be discarded.
const PositionVector & getGeometry() const
Returns the geometry of the edge.
A storage for options typed value containers)
void erase(NBDistrictCont &dc, NBEdge *edge)
Removes the given edge from the container (deleting it)
A structure representing a connection between two lanes.
void computeEdgeShapes()
Computes the shapes of all edges stored in the container.
The connection was computed.
Represents a single node (junction) during network building.
void dismissVehicleClassInformation()
NBTypeCont & myTypeCont
The network builder; used to obtain type information.
void recheckLaneSpread()
Rechecks whether the lane spread is proper.
void setEndOffset(int lane, SUMOReal offset)
set lane specific end-offset (negative lane implies set for all lanes)
static SUMOReal relAngle(SUMOReal angle1, SUMOReal angle2)
void removeFromSinksAndSources(NBEdge *const e)
Removes the given edge from the lists of sources and sinks in all stored districts.
std::set< std::string > myTypes2Remove
Set of edges types which shall be removed.
void recheckLanes()
Rechecks whether all lanes have a successor for each of the stored edges.
SUMOReal getSpeed() const
Returns the speed allowed on this edge.
Container for nodes during the netbuilding process.
std::set< std::string > myIgnoredEdges
The ids of ignored edges.
EdgeVector getGeneratedFrom(const std::string &id) const
Returns the edges which have been built by splitting the edge of the given id.
void replaceRemoved(NBEdge *removed, int removedLane, NBEdge *by, int byLane)
Replaces occurences of the removed edge/lane in all definitions by the given edge.
void addRoundabout(const EdgeSet &roundabout)
add user specified roundabout
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
const std::vector< Connection > & getConnections() const
Returns the connections.
NBNode * myFrom
The source and the destination node.
NBEdge * getTurnDestination(bool possibleDestination=false) const
bool exists(const std::string &name) const
Returns the information whether the named option is known.
void copyConnectionsFrom(NBEdge *src)
bool ignoreFilterMatch(NBEdge *edge)
Returns true if this edge matches one of the removal criteria.
A storage for available types of edges.
SUMOReal getLength() const
Returns the computed length of the edge.
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
SUMOReal getAngleAtNode(const NBNode *const node) const
Returns the angle of the edge's geometry at the given node.
std::set< std::string > myEdges2Remove
Set of ids of edges which shall explicitly be removed.
NBNode * getFromNode() const
Returns the origin node of the edge.