 |
Eclipse SUMO - Simulation of Urban MObility
|
Go to the documentation of this file.
57 myEdgeCont(myTypeCont),
58 myNetworkHaveCrossings(false) {
81 const bool lefthand = oc.
getBool(
"lefthand");
95 if (mayAddOrRemove && oc.
exists(
"remove-edges.isolated") && oc.
getBool(
"remove-edges.isolated")) {
101 if (mayAddOrRemove && oc.
exists(
"keep-edges.components") && oc.
getInt(
"keep-edges.components") > 0) {
107 if (mayAddOrRemove && oc.
exists(
"keep-edges.postload") && oc.
getBool(
"keep-edges.postload")) {
108 if (oc.
isSet(
"keep-edges.explicit") || oc.
isSet(
"keep-edges.input-file")) {
116 if (oc.
exists(
"ptstop-output") && oc.
isSet(
"ptstop-output")) {
119 if (!(oc.
exists(
"ptline-output") && oc.
isSet(
"ptline-output"))) {
126 if (oc.
exists(
"ptline-output") && oc.
isSet(
"ptline-output")) {
133 if (oc.
exists(
"ptline-output") && oc.
isSet(
"ptline-output") && oc.
exists(
"ptline-clean-up") && oc.
getBool(
"ptline-clean-up")) {
140 if (oc.
exists(
"ptstop-output") && oc.
isSet(
"ptstop-output")) {
148 if (oc.
exists(
"railway.topology.all-bidi") && oc.
getBool(
"railway.topology.all-bidi")) {
151 }
else if (oc.
exists(
"railway.topology.repair") && oc.
getBool(
"railway.topology.repair")) {
155 if (oc.
exists(
"railway.topology.output") && oc.
isSet(
"railway.topology.output")) {
170 if (oc.
getBool(
"roundabouts.guess")) {
174 for (std::set<EdgeSet>::const_iterator it_round = roundabouts.begin();
175 it_round != roundabouts.end(); ++it_round) {
176 std::vector<std::string> nodeIDs;
177 for (EdgeSet::const_iterator it_edge = it_round->begin(); it_edge != it_round->end(); ++it_edge) {
178 nodeIDs.push_back((*it_edge)->getToNode()->getID());
185 if (mayAddOrRemove && oc.
exists(
"junctions.join-exclude") && oc.
isSet(
"junctions.join-exclude")) {
189 if (mayAddOrRemove && oc.
getBool(
"junctions.join")) {
204 if (mayAddOrRemove && oc.
exists(
"join-lanes") && oc.
getBool(
"join-lanes")) {
212 if (mayAddOrRemove) {
214 const bool removeGeometryNodes = oc.
exists(
"geometry.remove") && oc.
getBool(
"geometry.remove");
216 PROGRESS_BEGIN_MESSAGE(
"Removing empty nodes" + std::string(removeGeometryNodes ?
" and geometry nodes" :
""));
228 boundary.
add(it->second->getPosition());
231 boundary.
add(it->second->getGeometry().getBoxBoundary());
240 if (oc.
exists(
"geometry.min-dist") && !oc.
isDefault(
"geometry.min-dist")) {
248 if (mayAddOrRemove && oc.
getBool(
"edges.join")) {
254 if (oc.
getBool(
"opposites.guess")) {
260 if (mayAddOrRemove && oc.
exists(
"geometry.split") && oc.
getBool(
"geometry.split")) {
272 if (oc.
exists(
"geometry.avoid-overlap") && oc.
getBool(
"geometry.avoid-overlap")) {
279 if (oc.
isSet(
"tls.set")) {
280 std::vector<std::string> tlControlledNodes = oc.
getStringVector(
"tls.set");
282 for (std::vector<std::string>::const_iterator i = tlControlledNodes.begin(); i != tlControlledNodes.end(); ++i) {
284 if (node ==
nullptr) {
285 WRITE_WARNING(
"Building a tl-logic for junction '" + *i +
"' is not possible." +
"\n The junction '" + *i +
"' is not known.");
295 if (mayAddOrRemove) {
296 const bool modifyRamps = (oc.
exists(
"ramps.guess") && oc.
getBool(
"ramps.guess"))
297 || (oc.
exists(
"ramps.set") && oc.
isSet(
"ramps.set"));
299 || (oc.
exists(
"ramps.guess-acceleration-lanes") && oc.
getBool(
"ramps.guess-acceleration-lanes"))) {
312 if (mayAddOrRemove && ((oc.
getBool(
"bikelanes.guess") || oc.
getBool(
"bikelanes.guess.from-permissions")))) {
314 oc.
getFloat(
"bikelanes.guess.min-speed"),
315 oc.
getFloat(
"bikelanes.guess.max-speed"),
316 oc.
getBool(
"bikelanes.guess.from-permissions"),
317 "bikelanes.guess.exclude");
322 if (mayAddOrRemove && ((oc.
getBool(
"sidewalks.guess") || oc.
getBool(
"sidewalks.guess.from-permissions")))) {
324 oc.
getFloat(
"sidewalks.guess.min-speed"),
325 oc.
getFloat(
"sidewalks.guess.max-speed"),
326 oc.
getBool(
"sidewalks.guess.from-permissions"),
327 "sidewalks.guess.exclude");
337 if (numChangedEdges + numChangedNodes > 0) {
342 if (oc.
exists(
"geometry.max-angle")) {
346 oc.
getBool(
"geometry.min-radius.fix"));
359 if (oc.
exists(
"geometry.junction-mismatch-threshold")) {
375 if (oc.
exists(
"speed.offset")) {
376 const double speedOffset = oc.
getFloat(
"speed.offset");
377 const double speedFactor = oc.
getFloat(
"speed.factor");
378 const double speedMin = oc.
getFloat(
"speed.minimum");
379 if (speedOffset != 0 || speedFactor != 1 || speedMin > 0) {
383 (*i).second->setSpeed(-1,
MAX2((*i).second->getSpeed() * speedFactor + speedOffset, speedMin));
397 if (mayAddOrRemove && oc.
getBool(
"crossings.guess")) {
401 crossings += (*i).second->guessCrossings();
408 if (i->second->getCrossingsIncludingInvalid().size() > 0) {
418 oc.
set(
"no-internal-links",
"false");
432 if (oc.
getBool(
"roundabouts.guess")) {
436 if (numGuessed > 0) {
456 if (!oc.
getBool(
"no-turnarounds")) {
461 if (oc.
exists(
"railway.topology.repair") && oc.
getBool(
"railway.topology.repair")
475 i->second->buildCrossingsAndWalkingAreas();
481 i->second->discardWalkingareas();
483 if (oc.
getBool(
"no-internal-links")) {
485 i->second->discardAllCrossings(
false);
513 std::string progCount =
"";
514 if (numbers.first != numbers.second) {
515 progCount =
"(" +
toString(numbers.second) +
" programs) ";
519 if (oc.
isSet(
"street-sign-output")) {
527 (*i).second->sortOutgoingConnectionsByIndex();
530 if (!oc.
getBool(
"no-internal-links")) {
535 (*i).second->buildInnerEdges();
540 if (oc.
getFloat(
"junctions.scurve-stretch") > 0) {
548 (*i).second->buildInnerEdges();
559 if (oc.
exists(
"geometry.check-overlap") && oc.
getFloat(
"geometry.check-overlap") > 0) {
574 if (oc.
exists(
"ptstop-output") && oc.
isSet(
"ptstop-output")) {
578 double maxRadius = oc.
getFloat(
"railway.access-distance");
579 double accessFactor = oc.
getFloat(
"railway.access-factor");
580 int maxCount = oc.
getInt(
"railway.max-accesses");
583 if (numBidiStops > 0) {
584 if (oc.
exists(
"ptline-output") && oc.
isSet(
"ptline-output")) {
591 WRITE_MESSAGE(
"-----------------------------------------------------");
598 WRITE_MESSAGE(
"-----------------------------------------------------");
603 WRITE_WARNING(
"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");
625 const double x = -boundary.
xmin();
626 const double y = -(lefthand ? boundary.
ymax() : boundary.
ymin());
631 (*i).second->reshiftPosition(x, y);
634 (*i).second->reshiftPosition(x, y);
637 (*i).second->reshiftPosition(x, y);
640 (*i).second->reshiftPosition(x, y);
651 (*i).second->mirrorX();
654 (*i).second->mirrorX();
657 (*i).second->mirrorX();
668 && from_srs !=
nullptr
681 double z = hm.
getZ(orig);
692 if (maxLength > 0 && from.size() > 1) {
695 for (
int i = 0; i < (int) from.size(); i++) {
701 for (
int i = 0; i < (int)copy.size() - 1; i++) {
702 Position start = from[i + inserted];
703 Position end = from[i + inserted + 1];
704 double length = copy[i].distanceTo(copy[i + 1]);
705 const Position step = (end - start) * (maxLength / length);
707 while (length > maxLength) {
710 from.insert(from.begin() + i + inserted + 1, start + (step * steps));
718 for (
int i = 0; i < (int) from.size(); i++) {
int removeUnwishedNodes(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc, NBPTStopCont &sc, NBPTLineCont &lc, NBParkingCont &pc, bool removeGeometryNodes)
Removes "unwished" nodes.
void process(NBEdgeCont &cont)
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
static void validateRailCrossings(NBNodeCont &nc, NBTrafficLightLogicCont &tlc)
Checks rail_crossing for validity.
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
double getZRange() const
Returns the elevation range of the boundary (z-axis)
void checkGeometries(const double maxAngle, const double minRadius, bool fix)
void computeNodeShapes(double mismatchThreshold=-1)
Compute the junction shape for this node.
static void makeAllBidi(NBNetBuilder &nb)
void mirrorX()
mirror the network along the X-axis
NBNetBuilder()
Constructor.
#define WRITE_WARNING(msg)
const Boundary & getConvBoundary() const
Returns the converted boundary.
static const NBHeightMapper & get()
return the singleton instance (maybe 0)
NBPTStopCont myPTStopCont
The used container for pt stops.
void setAsTLControlled(NBNode *node, NBTrafficLightLogicCont &tlc, TrafficLightType type, std::string id="")
Sets the given node as being controlled by a tls.
void computeLanes2Lanes()
divides the incoming lanes on outgoing lanes
std::map< std::string, NBDistrict * >::const_iterator begin() const
Returns the pointer to the begin of the stored districts.
void localizePTStops(NBEdgeCont &cont)
double ymin() const
Returns minimum y-coordinate.
void setDefaults(int defaultNumLanes, double defaultLaneWidth, double defaultSpeed, int defaultPriority, SVCPermissions defaultPermissions)
Sets the default values.
NBPTLineCont myPTLineCont
The used container for pt stops.
std::map< std::string, NBNode * >::const_iterator end() const
Returns the pointer to the end of the stored nodes.
Set z-values for all network positions based on data from a height map.
void resetWritable()
Resets all options to be writeable.
void guessTLs(OptionsCont &oc, NBTrafficLightLogicCont &tlc)
Guesses which junctions or junction clusters shall be controlled by tls.
bool set(const std::string &name, const std::string &value)
Sets the given value for the named option.
bool ready() const
returns whether the NBHeightMapper has data
std::map< std::string, NBPTStop * >::const_iterator begin() const
Returns the pointer to the begin of the stored pt stops.
void setConvBoundary(const Boundary &boundary)
sets the converted boundary
NBTypeCont myTypeCont
The used container for street types.
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
void checkGrade(double threshold) const
check whether edges are to steep
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
static GeoConvHelper & getProcessing()
the coordinate transformation to use for input conversion and processing
static bool transformCoordinates(PositionVector &from, bool includeInBoundary=true, GeoConvHelper *from_srs=0)
bool exists(const std::string &name) const
Returns the information whether the named option is known.
double xmax() const
Returns maximum x-coordinate.
std::map< std::string, NBNode * >::const_iterator begin() const
Returns the pointer to the begin of the stored nodes.
void computeLaneShapes()
Computes the shapes of all lanes of all edges stored in the container.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
void removeComponents(NBDistrictCont &dc, NBEdgeCont &ec, const int numKeep)
Checks the network for weak connectivity and removes all but the largest components....
void avoidOverlap()
fix overlap
static OptionsCont & getOptions()
Retrieves the options.
static void computeEdgePriorities(NBNodeCont &nc)
Computes edge priorities within a node.
static bool transformCoordinate(Position &from, bool includeInBoundary=true, GeoConvHelper *from_srs=0)
transforms loaded coordinates handles projections, offsets (using GeoConvHelper) and import of height...
static void sortNodesEdges(NBNodeCont &nc, bool useNodeShape=false)
Sorts a node's edges clockwise regarding driving direction.
static GeoConvHelper & getLoaded()
the coordinate transformation that was loaded fron an input file
#define PROGRESS_TIME_MESSAGE(before)
int remapIDs(bool numericaIDs, bool reservedIDs, const std::string &prefix)
remap node IDs accoring to options –numerical-ids and –reserved-ids
void markRoundabouts()
mark edge priorities and prohibit turn-arounds for all roundabout edges
static methods for processing the coordinates conversion for the current net
int remapIDs(bool numericaIDs, bool reservedIDs, const std::string &prefix, NBPTStopCont &sc)
remap node IDs accoring to options –numerical-ids and –reserved-ids
bool x2cartesian(Position &from, bool includeInBoundary=true)
Converts the given coordinate into a cartesian and optionally update myConvBoundary.
bool usingGeoProjection() const
Returns whether a transformation from geo to metric coordinates will be performed.
void fixBidiStops(const NBEdgeCont &ec)
select the correct stop on superposed rail edges
static long getCurrentMillis()
Returns the current time in milliseconds.
void moveConvertedBy(double x, double y)
Shifts the converted boundary by the given amounts.
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
void computeLogics(const NBEdgeCont &ec, OptionsCont &oc)
build the list of outgoing edges and lanes
void computeLanes2Edges()
Computes for each edge which lanes approach the next edges.
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
void checkOverlap(double threshold, double zThreshold) const
check whether edges overlap
void removeIsolatedRoads(NBDistrictCont &dc, NBEdgeCont &ec)
Removes sequences of edges that are not connected with a junction. Simple roads without junctions som...
double xmin() const
Returns minimum x-coordinate.
void generateStreetSigns()
assigns street signs to edges based on toNode types
std::set< std::string > & getServedPTStops()
void removeSelfLoops(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tc)
Removes self-loop edges (edges where the source and the destination node are the same)
void joinSimilarEdges(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc)
Joins edges connecting the same nodes.
bool myNetworkHaveCrossings
flag to indicate that network has crossings
int guessRoundabouts()
Determines which edges belong to roundabouts and increases their priority.
T get(const std::string &str) const
NBTrafficLightLogicCont myTLLCont
The used container for traffic light logics.
static void repairTopology(NBNetBuilder &nb)
A class that stores a 2D geometrical boundary.
void recheckPostProcessConnections()
Try to set any stored connections.
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
void printBuiltNodesStatistics() const
Prints statistics about built nodes.
const Boundary & getOrigBoundary() const
Returns the original boundary.
void cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
A point in 2D or 3D with translation and scaling methods.
double x() const
Returns the x-position.
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
void removeUnwishedEdges(NBDistrictCont &dc)
Removes unwished edges (not in keep-edges)
const Position getOffsetBase() const
Returns the network base.
void recheckLanes()
Rechecks whether all lanes have a successor for each of the stored edges.
void addJoinExclusion(const std::vector< std::string > &ids, bool check=false)
A storage for options typed value containers)
void joinTLS(NBTrafficLightLogicCont &tlc, double maxdist)
Builds clusters of tls-controlled junctions and joins the control if possible.
void appendTurnarounds(bool noTLSControlled, bool onlyDeadends, bool noGeometryLike)
Appends turnarounds to all edges stored in the container.
std::map< std::string, NBEdge * >::const_iterator end() const
Returns the pointer to the end of the stored edges.
void splitGeometry(NBNodeCont &nc)
Splits edges into multiple if they have a complex geometry.
std::map< std::string, NBPTStop * >::const_iterator end() const
Returns the pointer to the end of the stored pt stops.
NBNode * retrieve(const std::string &id) const
Returns the node with the given name.
bool isDefault(const std::string &name) const
Returns the information whether the named option has still the default value.
void appendRailwayTurnarounds(const NBPTStopCont &sc)
Appends turnarounds to all bidiRail edges with stops.
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
void moveToOrigin(GeoConvHelper &geoConvHelper, bool lefthand)
shift network so its lower left corner is at 0,0
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
void sortOutgoingLanesConnections()
Sorts all lanes of all edges within the container by their direction.
const std::map< std::string, NBPTStop * > & getStops() const
NBEdgeCont myEdgeCont
The used container for edges.
void reduceGeometries(const double minDist)
NBDistrictCont myDistrictCont
The used container for districts.
double y() const
Returns the y-position.
#define PROGRESS_BEGIN_MESSAGE(msg)
static void analyzeTopology(NBNetBuilder &nb)
Computes highway on-/off-ramps (if wished)
int guessSpecialLanes(SUMOVehicleClass svc, double width, double minSpeed, double maxSpeed, bool fromPermissions, const std::string &excludeOpt)
add sidwalks to edges within the given limits or permissions and return the number of edges affected
#define PROGRESS_DONE_MESSAGE()
static void computeFinal(bool lefthand=false)
compute the location attributes which will be used for output based on the loaded location data,...
void computeEdgeShapes(double smoothElevationThreshold=-1)
Computes the shapes of all edges stored in the container.
static StringBijection< TrafficLightType > TrafficLightTypes
traffic light types
void compute(OptionsCont &oc, const std::set< std::string > &explicitTurnarounds=std::set< std::string >(), bool mayAddOrRemove=true)
Performs the network building steps.
int joinLanes(SVCPermissions perms)
join adjacent lanes with the given permissions
int joinLoadedClusters(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc)
Joins loaded junction clusters (see NIXMLNodesHandler)
static void computeRamps(NBNetBuilder &nb, OptionsCont &oc)
Computes highway on-/off-ramps (if wished)
static bool runningNetedit()
whether netbuilding takes place in the context of NETEDIT
NBParkingCont myParkingCont
void assignLanes(NBEdgeCont &cont)
int joinJunctions(double maxDist, NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc, NBPTStopCont &sc)
Joins junctions that are very close together.
void setTLControllingInformation(const NBEdgeCont &ec, const NBNodeCont &nc)
Informs the edges about being controlled by a tls.
int generateBidiStops(NBEdgeCont &cont)
duplicate stops for superposed rail edges and return the number of generated stops
std::map< std::string, NBDistrict * >::const_iterator end() const
Returns the pointer to the end of the stored districts.
void guessOpposites()
Sets opposite lane information for geometrically close edges.
static void computeTurnDirections(NBNodeCont &nc, bool warn=true)
Computes turnaround destinations for all edges (if exist)
Represents a single node (junction) during network building.
void computeEdge2Edges(bool noLeftMovers)
Computes for each edge the approached edges.
void postprocess(std::set< std::string > &usedStops)
std::pair< int, int > computeLogics(OptionsCont &oc)
Computes the traffic light logics using the stored definitions and stores the results.
vehicles ignoring classes
void findAccessEdgesForRailStops(NBEdgeCont &cont, double maxRadius, int maxCount, double accessFactor)
double getZ(const Position &geo) const
returns height for the given geo coordinate (WGS84)
std::map< std::string, NBEdge * >::const_iterator begin() const
Returns the pointer to the begin of the stored edges.
static void reportWarnings()
reports warnings if any occurred
static void computeNodeTypes(NBNodeCont &nc, NBTrafficLightLogicCont &tlc)
Computes node types.
#define WRITE_MESSAGE(msg)
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 std::set< EdgeSet > getRoundabouts() const
Returns the determined roundabouts.
NBNodeCont myNodeCont
The used container for nodes.
double ymax() const
Returns maximum y-coordinate.
void computeLogics2(const NBEdgeCont &ec, OptionsCont &oc)
compute right-of-way logic for all lane-to-lane connections
~NBNetBuilder()
Destructor.
static int getNumLoaded()