56 myEdgeCont(myTypeCont),
57 myNetworkHaveCrossings(false) {
87 const bool lefthand = oc.
getBool(
"lefthand");
95 int numRemovedEdges = 0;
98 if (mayAddOrRemove && oc.
exists(
"remove-edges.isolated") && oc.
getBool(
"remove-edges.isolated")) {
103 if (mayAddOrRemove && oc.
exists(
"keep-edges.components") && oc.
getInt(
"keep-edges.components") > 0) {
109 if (mayAddOrRemove && oc.
exists(
"keep-edges.postload") && oc.
getBool(
"keep-edges.postload")) {
116 if (oc.
isSet(
"keep-edges.explicit") || oc.
isSet(
"keep-edges.input-file")) {
123 numRemovedEdges += removed;
128 numRemovedEdges += removed2;
132 if (mayAddOrRemove && oc.
getFloat(
"keep-lanes.min-width") > 0.) {
135 numRemovedEdges += removed;
142 if (!(oc.
exists(
"ptline-output") && oc.
isSet(
"ptline-output"))
143 && !oc.
getBool(
"ptstop-output.no-bidi")) {
150 if (mayAddOrRemove && oc.
exists(
"keep-edges.components") && oc.
getInt(
"keep-edges.components") > 0) {
155 if (numRemovedEdges > 0) {
171 int numAddedBidi = 0;
172 if (oc.
exists(
"railway.topology.all-bidi") && oc.
getBool(
"railway.topology.all-bidi")) {
175 }
else if (oc.
exists(
"railway.topology.repair") && oc.
getBool(
"railway.topology.repair")) {
178 oc.
getFloat(
"geometry.min-radius"),
false,
179 oc.
getBool(
"geometry.min-radius.fix.railways"),
true);
184 if (numAddedBidi > 0) {
188 if (oc.
exists(
"railway.topology.direction-priority") && oc.
getBool(
"railway.topology.direction-priority")) {
191 }
else if (oc.
exists(
"railway.topology.extend-priority") && oc.
getBool(
"railway.topology.extend-priority")) {
195 if (oc.
exists(
"railway.topology.output") && oc.
isSet(
"railway.topology.output")) {
199 if (oc.
exists(
"railway.geometry.straighten") && oc.
getBool(
"railway.geometry.straighten")) {
205 if (mayAddOrRemove && oc.
exists(
"edges.join-tram-dist") && oc.
getFloat(
"edges.join-tram-dist") >= 0) {
210 if (numJoinedTramEdges > 0) {
214 if (oc.
getBool(
"junctions.join")
216 || oc.
getBool(
"tls.guess.joining")
217 || (oc.
exists(
"tls.guess-signals") && oc.
getBool(
"tls.guess-signals"))) {
227 if (oc.
getBool(
"roundabouts.guess")) {
231 for (std::set<EdgeSet>::const_iterator it_round = roundabouts.begin();
232 it_round != roundabouts.end(); ++it_round) {
233 std::vector<std::string> nodeIDs;
234 for (EdgeSet::const_iterator it_edge = it_round->begin(); it_edge != it_round->end(); ++it_edge) {
235 nodeIDs.push_back((*it_edge)->getToNode()->getID());
245 if (mayAddOrRemove && oc.
exists(
"junctions.join-exclude") && oc.
isSet(
"junctions.join-exclude")) {
249 if (mayAddOrRemove && oc.
getBool(
"junctions.join")) {
257 if (mayAddOrRemove && oc.
exists(
"junctions.join-same") && oc.
getBool(
"junctions.join-same")) {
261 if (numJoined2 > 0) {
266 if (mayAddOrRemove && oc.
exists(
"join-lanes") && oc.
getBool(
"join-lanes")) {
273 if (mayAddOrRemove) {
274 const bool removeGeometryNodes = oc.
exists(
"geometry.remove") && oc.
getBool(
"geometry.remove");
287 boundary.
add(it->second->getPosition());
290 boundary.
add(it->second->getGeometry().getBoxBoundary());
299 if (oc.
exists(
"geometry.min-dist") && !oc.
isDefault(
"geometry.min-dist")) {
306 if (mayAddOrRemove && oc.
getBool(
"edges.join")) {
308 const bool removeDuplicates = oc.
exists(
"junctions.join-same") && oc.
getBool(
"junctions.join-same");
311 if (oc.
exists(
"geometry.remove") && oc.
getBool(
"geometry.remove")) {
316 if (oc.
getBool(
"opposites.guess")) {
322 if (mayAddOrRemove && oc.
exists(
"geometry.split") && oc.
getBool(
"geometry.split")) {
327 if (oc.
getBool(
"junctions.join-same")) {
329 if (numJoined3 > 0) {
339 if (oc.
exists(
"geometry.avoid-overlap") && oc.
getBool(
"geometry.avoid-overlap")) {
345 if (oc.
isSet(
"tls.set")) {
346 std::vector<std::string> tlControlledNodes = oc.
getStringVector(
"tls.set");
348 for (std::vector<std::string>::const_iterator i = tlControlledNodes.begin(); i != tlControlledNodes.end(); ++i) {
350 if (node ==
nullptr) {
351 WRITE_WARNING(
"Building a tl-logic for junction '" + *i +
"' is not possible." +
"\n The junction '" + *i +
"' is not known.");
361 const bool modifyRamps = mayAddOrRemove && (
363 || (oc.
exists(
"ramps.set") && oc.
isSet(
"ramps.set")));
364 if (modifyRamps || (oc.
exists(
"ramps.guess-acceleration-lanes") && oc.
getBool(
"ramps.guess-acceleration-lanes"))) {
378 if (mayAddOrRemove && ((oc.
getBool(
"bikelanes.guess") || oc.
getBool(
"bikelanes.guess.from-permissions")))) {
380 oc.
getFloat(
"bikelanes.guess.min-speed"),
381 oc.
getFloat(
"bikelanes.guess.max-speed"),
382 oc.
getBool(
"bikelanes.guess.from-permissions"),
383 "bikelanes.guess.exclude",
389 if (mayAddOrRemove && ((oc.
getBool(
"sidewalks.guess") || oc.
getBool(
"sidewalks.guess.from-permissions")))) {
391 oc.
getFloat(
"sidewalks.guess.min-speed"),
392 oc.
getFloat(
"sidewalks.guess.max-speed"),
393 oc.
getBool(
"sidewalks.guess.from-permissions"),
394 "sidewalks.guess.exclude",
402 if (mayAddOrRemove) {
405 if (numChangedEdges + numChangedNodes > 0) {
411 if (oc.
exists(
"geometry.max-angle")) {
414 oc.
getBool(
"geometry.max-angle.fix"),
416 oc.
getBool(
"geometry.min-radius.fix"),
417 oc.
getBool(
"geometry.min-radius.fix.railways"));
428 if (oc.
exists(
"geometry.junction-mismatch-threshold")) {
443 if (oc.
exists(
"speed.offset")) {
444 const double speedOffset = oc.
getFloat(
"speed.offset");
445 const double speedFactor = oc.
getFloat(
"speed.factor");
446 const double speedMin = oc.
getFloat(
"speed.minimum");
447 if (speedOffset != 0 || speedFactor != 1 || speedMin > 0) {
450 NBEdge*
const e = it.second;
467 if (mayAddOrRemove && oc.
getBool(
"crossings.guess")) {
471 crossings += (*i).second->guessCrossings();
476 bool haveValidCrossings =
false;
479 if (i->second->getCrossings().size() > 0) {
481 haveValidCrossings =
true;
483 }
else if (i->second->getCrossingsIncludingInvalid().size() > 0) {
490 oc.
set(
"walkingareas",
"true");
497 oc.
set(
"no-internal-links",
"false");
509 if (oc.
getBool(
"roundabouts.guess")) {
512 if (numGuessed > 0) {
528 if (oc.
getBool(
"fringe.guess")) {
531 if (numGuessed > 0) {
538 if (!oc.
getBool(
"no-turnarounds")) {
540 oc.
getBool(
"no-turnarounds.tls"),
541 oc.
getBool(
"no-turnarounds.fringe"),
542 oc.
getBool(
"no-turnarounds.except-deadend"),
543 oc.
getBool(
"no-turnarounds.except-turnlane"),
544 oc.
getBool(
"no-turnarounds.geometry"));
548 if (oc.
exists(
"railway.topology.repair.stop-turn") && oc.
getBool(
"railway.topology.repair.stop-turn")
561 i->second->buildCrossingsAndWalkingAreas();
567 i->second->discardWalkingareas();
569 if (oc.
getBool(
"no-internal-links")) {
571 i->second->discardAllCrossings(
false);
586 if (oc.
exists(
"opendrive-files") && oc.
isSet(
"opendrive-files")) {
599 std::string progCount =
"";
600 if (numbers.first != numbers.second) {
601 progCount =
"(" +
toString(numbers.second) +
" programs) ";
604 if (oc.
exists(
"opendrive-files") && oc.
isSet(
"opendrive-files") && oc.
getBool(
"opendrive.signal-groups")) {
609 (*i).second->sortOutgoingConnectionsByIndex();
612 std::set<NBTrafficLightDefinition*> largeNodeTLS;
613 if (!oc.
getBool(
"no-internal-links")) {
618 const std::set<NBTrafficLightDefinition*>& tlDefs = item.second->getControllingTLS();
619 largeNodeTLS.insert(tlDefs.begin(), tlDefs.end());
625 if (oc.
getFloat(
"junctions.scurve-stretch") > 0) {
632 item.second->buildInnerEdges();
655 if (oc.
isSet(
"street-sign-output")) {
662 if (lefthand != oc.
getBool(
"flip-y-axis")) {
666 if (oc.
exists(
"geometry.check-overlap") && oc.
getFloat(
"geometry.check-overlap") > 0) {
683 int numBidiStops = 0;
684 if (!oc.
getBool(
"ptstop-output.no-bidi")) {
690 double maxRadius = oc.
getFloat(
"railway.access-distance");
691 double accessFactor = oc.
getFloat(
"railway.access-factor");
692 int maxCount = oc.
getInt(
"railway.max-accesses");
695 if (numBidiStops > 0) {
702 if (oc.
exists(
"ptline-clean-up") && oc.
getBool(
"ptline-clean-up")) {
709 if (numDeletedStops > 0) {
710 WRITE_WARNINGF(
TL(
"Removed % pt stops because they could not be assigned to the network"),
toString(numDeletedStops));
714 if (oc.
exists(
"ignore-change-restrictions") && !oc.
isDefault(
"ignore-change-restrictions")) {
723 WRITE_WARNING(
TL(
"Network contains very large coordinates and will probably flicker in the GUI. Check for outlying nodes and make sure the network is shifted to the coordinate origin"));
727 if (oc.
exists(
"osm-files") && oc.
isSet(
"osm-files")) {
739 const double x = -boundary.
xmin();
740 const double y = -(lefthand ? boundary.
ymax() : boundary.
ymin());
745 (*i).second->reshiftPosition(x, y);
748 (*i).second->reshiftPosition(x, y);
751 (*i).second->reshiftPosition(x, y);
754 stopIt.second->reshiftPosition(x, y);
765 (*i).second->mirrorX();
768 (*i).second->mirrorX();
771 (*i).second->mirrorX();
774 stopIt.second->mirrorX();
785 && from_srs !=
nullptr
811 const double eps = 1e-6;
812 from.
set(std::round(from.
x() / eps) * eps, std::round(from.
y() / eps) * eps, std::round(from.
z() / eps) * eps);
820 if (maxLength > 0 && from.size() > 1) {
823 for (
int i = 0; i < (int) from.size(); i++) {
829 for (
int i = 0; i < (int) from.size(); i++) {
841 for (
int i = 0; i < (int)cartesian.size() - 1; i++) {
842 Position start = from[i + inserted];
843 Position end = from[i + inserted + 1];
844 double length = cartesian[i].distanceTo(cartesian[i + 1]);
845 const Position step = (end - start) * (maxLength / length);
847 while (length > maxLength) {
850 from.insert(from.begin() + i + inserted + 1, start + (step * steps));
#define WRITE_WARNINGF(...)
#define WRITE_MESSAGEF(...)
#define WRITE_WARNING(msg)
#define PROGRESS_BEGIN_TIME_MESSAGE(msg)
#define PROGRESS_TIME_MESSAGE(before)
#define PROGRESS_DONE_MESSAGE()
#define PROGRESS_BEGIN_MESSAGE(msg)
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
@ SVC_IGNORING
vehicles ignoring classes
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_PEDESTRIAN
pedestrian
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
A class that stores a 2D geometrical boundary.
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
double ymin() const
Returns minimum y-coordinate.
double xmin() const
Returns minimum x-coordinate.
double ymax() const
Returns maximum y-coordinate.
double xmax() const
Returns maximum x-coordinate.
double getZRange() const
Returns the elevation range of the boundary (z-axis)
static methods for processing the coordinates conversion for the current net
const Position getOffset() const
Returns the network offset.
void setConvBoundary(const Boundary &boundary)
sets the converted boundary
bool x2cartesian(Position &from, bool includeInBoundary=true)
Converts the given coordinate into a cartesian and optionally update myConvBoundary.
void cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
void moveConvertedBy(double x, double y)
Shifts the converted boundary by the given amounts.
static GeoConvHelper & getProcessing()
the coordinate transformation to use for input conversion and processing
static int getNumLoaded()
static void computeFinal(bool lefthand=false)
compute the location attributes which will be used for output based on the loaded location data,...
bool usingGeoProjection() const
Returns whether a transformation from geo to metric coordinates will be performed.
const Boundary & getConvBoundary() const
Returns the converted boundary.
static GeoConvHelper & getLoaded()
the coordinate transformation that was loaded fron an input file
std::map< std::string, NBDistrict * >::const_iterator end() const
Returns the pointer to the end of the stored districts.
std::map< std::string, NBDistrict * >::const_iterator begin() const
Returns the pointer to the begin of the stored districts.
void computeEdgeShapes(double smoothElevationThreshold=-1)
Computes the shapes of all edges stored in the container.
const std::set< EdgeSet > getRoundabouts() const
Returns the determined roundabouts.
void computeEdge2Edges(bool noLeftMovers)
Computes for each edge the approached edges.
int guessRoundabouts()
Determines which edges belong to roundabouts and increases their priority.
void sortOutgoingLanesConnections()
Sorts all lanes of all edges within the container by their direction.
void appendRailwayTurnarounds(const NBPTStopCont &sc)
Appends turnarounds to all bidiRail edges with stops.
std::map< std::string, NBEdge * >::const_iterator begin() const
Returns the pointer to the begin of the stored edges.
void updateAllChangeRestrictions(SVCPermissions ignoring)
modify all restrictions on lane changing for edges and connections
void recheckPostProcessConnections()
Try to set any stored connections.
void recheckLanes()
Rechecks whether all lanes have a successor for each of the stored edges.
void checkGeometries(const double maxAngle, bool fixAngle, const double minRadius, bool fix, bool fixRailways, bool silent=false)
void reduceGeometries(const double minDist)
void cleanupRoundabouts()
std::map< std::string, NBEdge * >::const_iterator end() const
Returns the pointer to the end of the stored edges.
void splitGeometry(NBDistrictCont &dc, NBNodeCont &nc)
Splits edges into multiple if they have a complex geometry.
void computeLanes2Edges()
Computes for each edge which lanes approach the next edges.
int getNumEdgeSplits() const
Returns the number of edge splits.
int joinTramEdges(NBDistrictCont &dc, NBPTStopCont &sc, NBPTLineCont &lc, double maxDist)
join tram edges into adjacent lanes
int removeUnwishedEdges(NBDistrictCont &dc)
Removes unwished edges (not in keep-edges)
void generateStreetSigns()
assigns street signs to edges based on toNode types
bool hasGuessedRoundabouts() const
check if there is guessed roundabouts
void computeAngles()
compute all edge angles
void guessOpposites()
Sets opposite lane information for geometrically close edges.
void markRoundabouts()
mark edge priorities and prohibit turn-arounds for all roundabout edges
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
int joinLanes(SVCPermissions perms)
join adjacent lanes with the given permissions
void checkOverlap(double threshold, double zThreshold) const
check whether edges overlap
int guessSpecialLanes(SUMOVehicleClass svc, double width, double minSpeed, double maxSpeed, bool fromPermissions, const std::string &excludeOpt, NBTrafficLightLogicCont &tlc)
add sidwalks to edges within the given limits or permissions and return the number of edges affected
void appendTurnarounds(bool noTLSControlled, bool noFringe, bool onlyDeadends, bool onlyTurnlane, bool noGeometryLike)
Appends turnarounds to all edges stored in the container.
void computeLaneShapes()
Computes the shapes of all lanes of all edges stored in the container.
void fixSplitCustomLength()
adapt custom lengths of split edges to account for intersection size
int remapIDs(bool numericaIDs, bool reservedIDs, const std::string &prefix, NBPTStopCont &sc)
remap node IDs accoring to options –numerical-ids and –reserved-ids
int removeLanesByWidth(NBDistrictCont &dc, const double minWidth)
int removeEdgesBySpeed(NBDistrictCont &dc)
return number of edges removed
void checkGrade(double threshold) const
check whether edges are to steep
int removeEdgesByPermissions(NBDistrictCont &dc)
The representation of a single edge during network building.
double getLaneSpeed(int lane) const
get lane speed
void setSpeed(int lane, double speed)
set lane specific speed (negative lane implies set for all lanes)
int getNumLanes() const
Returns the number of lanes.
static void setDefaultConnectionLength(double length)
static void computeEdgePriorities(NBNodeCont &nc)
Computes edge priorities within a node.
Set z-values for all network positions based on data from a height map.
double getZ(const Position &geo) const
returns height for the given geo coordinate (WGS84)
static const NBHeightMapper & get()
return the singleton instance (maybe 0)
bool ready() const
returns whether the NBHeightMapper has data
static bool transformCoordinates(PositionVector &from, bool includeInBoundary=true, GeoConvHelper *from_srs=nullptr)
void mirrorX()
mirror the network along the X-axis
NBNetBuilder()
Constructor.
NBTrafficLightLogicCont myTLLCont
The used container for traffic light logics.
void moveToOrigin(GeoConvHelper &geoConvHelper, bool lefthand)
shift network so its lower left corner is at 0,0
bool myNetworkHaveCrossings
flag to indicate that network has crossings
NBDistrictCont myDistrictCont
The used container for districts.
static int addGeometrySegments(PositionVector &from, const PositionVector &cartesian, const double maxLength)
insertion geometry points to ensure maximum segment length between points
NBPTLineCont myPTLineCont
The used container for pt stops.
NBEdgeCont myEdgeCont
The used container for edges.
NBParkingCont myParkingCont
~NBNetBuilder()
Destructor.
NBTypeCont myTypeCont
The used container for street types.
NBPTStopCont myPTStopCont
The used container for pt stops.
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
static bool transformCoordinate(Position &from, bool includeInBoundary=true, GeoConvHelper *from_srs=nullptr)
transforms loaded coordinates handles projections, offsets (using GeoConvHelper) and import of height...
void compute(OptionsCont &oc, const std::set< std::string > &explicitTurnarounds=std::set< std::string >(), bool mayAddOrRemove=true)
Performs the network building steps.
NBNodeCont myNodeCont
The used container for nodes.
static bool runningNetedit()
whether netbuilding takes place in the context of netedit
void avoidOverlap()
fix overlap
int removeRailComponents(NBDistrictCont &dc, NBEdgeCont &ec, NBPTStopCont &sc)
std::map< std::string, NBNode * >::const_iterator begin() const
Returns the pointer to the begin of the stored nodes.
void recheckGuessedTLS(NBTrafficLightLogicCont &tlc)
recheck myGuessedTLS after node logics are computed
void computeKeepClear()
compute keepClear status for all connections
int removeSelfLoops(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tc)
Removes self-loop edges (edges where the source and the destination node are the same)
void addJoinExclusion(const std::vector< std::string > &ids)
int joinLoadedClusters(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc)
Joins loaded junction clusters (see NIXMLNodesHandler)
int remapIDs(bool numericaIDs, bool reservedIDs, const std::string &prefix, NBTrafficLightLogicCont &tlc)
remap node IDs according to options –numerical-ids and –reserved-ids
NBNode * retrieve(const std::string &id) const
Returns the node with the given name.
void joinTLS(NBTrafficLightLogicCont &tlc, double maxdist)
Builds clusters of tls-controlled junctions and joins the control if possible.
int removeUnwishedNodes(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc, NBPTStopCont &sc, NBPTLineCont &lc, NBParkingCont &pc, bool removeGeometryNodes)
Removes "unwished" nodes.
std::map< std::string, NBNode * >::const_iterator end() const
Returns the pointer to the end of the stored nodes.
int removeComponents(NBDistrictCont &dc, NBEdgeCont &ec, const int numKeep, bool hasPTStops)
Checks the network for weak connectivity and removes all but the largest components....
void computeLogics2(const NBEdgeCont &ec, OptionsCont &oc)
compute right-of-way logic for all lane-to-lane connections
void joinSimilarEdges(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc, bool removeDuplicates)
Joins edges connecting the same nodes.
int removeIsolatedRoads(NBDistrictCont &dc, NBEdgeCont &ec)
Removes sequences of edges that are not connected with a junction. Simple roads without junctions som...
void setAsTLControlled(NBNode *node, NBTrafficLightLogicCont &tlc, TrafficLightType type, std::string id="")
Sets the given node as being controlled by a tls.
void computeLogics(const NBEdgeCont &ec)
build the list of outgoing edges and lanes
void computeNodeShapes(double mismatchThreshold=-1)
Compute the junction shape for this node.
void guessTLs(OptionsCont &oc, NBTrafficLightLogicCont &tlc)
Guesses which junctions or junction clusters shall be controlled by tls.
int guessFringe()
guess and mark fringe nodes
int joinJunctions(double maxDist, NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc, NBPTStopCont &sc)
Joins junctions that are very close together.
void computeLanes2Lanes()
divides the incoming lanes on outgoing lanes
int joinSameJunctions(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc)
Joins junctions with the same coordinates regardless of topology.
bool resetNodeShapes()
reset all node shapes
Represents a single node (junction) during network building.
static void initRailSignalClasses(const NBNodeCont &nc)
initialize signalized rail classes
static void computeNodeTypes(NBNodeCont &nc, NBTrafficLightLogicCont &tlc)
Computes node types.
static void validateRailCrossings(NBNodeCont &nc, NBTrafficLightLogicCont &tlc)
Checks rail_crossing for validity.
static void sortNodesEdges(NBNodeCont &nc, bool useNodeShape=false)
Sorts a node's edges clockwise regarding driving direction.
void fixPermissions()
ensure that all turn lanes have sufficient permissions
void process(NBEdgeCont &ec, NBPTStopCont &sc, bool routeOnly=false)
std::set< std::string > getServedPTStops()
const std::map< std::string, NBPTLine * > & getLines() const
void removeInvalidEdges(const NBEdgeCont &ec)
filter out edges that were removed due to –geometry.remove
void fixBidiStops(const NBEdgeCont &ec)
select the correct stop on superposed rail edges
int cleanupDeleted(NBEdgeCont &cont)
remove stops on non existing (removed) edges
const std::map< std::string, std::shared_ptr< NBPTStop > > & getStops() const
Returns an unmodifiable reference to the stored pt stops.
void postprocess(std::set< std::string > &usedStops)
void localizePTStops(NBEdgeCont &cont)
void assignEdgeForFloatingStops(NBEdgeCont &cont, double maxRadius)
void findAccessEdgesForRailStops(NBEdgeCont &cont, double maxRadius, int maxCount, double accessFactor)
int generateBidiStops(NBEdgeCont &cont)
duplicate stops for superposed rail edges and return the number of generated stops
void assignLanes(NBEdgeCont &cont)
int countBidiStops(NBEdgeCont &cont) const
count number of stop-pairs for superposed rail-edges
static int straigthenCorrdidor(NBEdgeCont &ec, double maxAngle)
static int guessRailSignals(NBEdgeCont &ec, NBPTStopCont &sc)
static int repairTopology(NBEdgeCont &ec, NBPTStopCont &sc, NBPTLineCont &lc)
static void extendDirectionPriority(NBEdgeCont &ec, bool fromUniDir)
static void analyzeTopology(NBEdgeCont &ec)
static int makeAllBidi(NBEdgeCont &ec)
void computeRamps(NBNetBuilder &nb, OptionsCont &oc, bool mayAddOrRemove)
static void reportWarnings()
reports warnings if any occurred
The base class for traffic light logic definitions.
static const std::string OSM_DIRECTION
processing parameter for rail signal edges and nodes
static const int MIN_YELLOW_SECONDS
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
void setOpenDriveSignalParameters()
set OpenDRIVE signal reference parameters after all link indices are known
bool computeSingleLogic(OptionsCont &oc, NBTrafficLightDefinition *def)
Computes a specific traffic light logic (using by netedit)
void applyOpenDriveControllers(OptionsCont &oc)
post processing of signal programs to group tl indices according to OpenDrive controllers (signal gro...
std::pair< int, int > computeLogics(OptionsCont &oc)
Computes the traffic light logics using the stored definitions and stores the results.
void setTLControllingInformation(const NBEdgeCont &ec, const NBNodeCont &nc)
Informs the edges about being controlled by a tls.
static void computeTurnDirections(NBNodeCont &nc, bool warn=true)
Computes turnaround destinations for all edges (if exist)
void setEdgeTypeDefaults(int defaultNumLanes, double defaultLaneWidth, double defaultSpeed, double defaultFriction, int defaultPriority, SVCPermissions defaultPermissions, LaneSpreadFunction defaultSpreadType)
Sets the default values.
A storage for options typed value containers)
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool isDefault(const std::string &name) const
Returns the information whether the named option has still the default value.
bool exists(const std::string &name) const
Returns the information whether the named option is known.
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
const StringVector & getStringVector(const std::string &name) const
Returns the list of string-value of the named option (only for Option_StringVector)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
A point in 2D or 3D with translation and scaling methods.
void set(double x, double y)
set positions x and y
double x() const
Returns the x-position.
void setz(double z)
set position z
double z() const
Returns the z-position.
double y() const
Returns the y-position.
static StringBijection< LaneSpreadFunction > LaneSpreadFunctions
lane spread functions
static StringBijection< TrafficLightType > TrafficLightTypes
traffic light types
T get(const std::string &str) const
get key
static long getCurrentMillis()
Returns the current time in milliseconds.