59 #ifdef CHECK_MEMORY_LEAKS 61 #endif // CHECK_MEMORY_LEAKS 68 myEdgeCont(myTypeCont),
69 myHaveLoadedNetworkWithoutInternalEdges(false) {
90 const std::set<std::string>& explicitTurnarounds,
91 bool removeElements) {
95 const bool lefthand = oc.
getBool(
"lefthand");
108 if (oc.
exists(
"remove-edges.isolated") && oc.
getBool(
"remove-edges.isolated")) {
115 if (oc.
exists(
"keep-edges.postload") && oc.
getBool(
"keep-edges.postload")) {
116 if (oc.
isSet(
"keep-edges.explicit") || oc.
isSet(
"keep-edges.input-file")) {
133 if (oc.
getBool(
"roundabouts.guess")) {
137 for (std::set<EdgeSet>::const_iterator it_round = roundabouts.begin();
138 it_round != roundabouts.end(); ++it_round) {
139 std::vector<std::string> nodeIDs;
140 for (EdgeSet::const_iterator it_edge = it_round->begin(); it_edge != it_round->end(); ++it_edge) {
141 nodeIDs.push_back((*it_edge)->getToNode()->getID());
147 if (oc.
exists(
"junctions.join-exclude") && oc.
isSet(
"junctions.join-exclude")) {
151 if (oc.
getBool(
"junctions.join")) {
166 if (removeElements) {
168 const bool removeGeometryNodes = oc.
exists(
"geometry.remove") && oc.
getBool(
"geometry.remove");
170 PROGRESS_BEGIN_MESSAGE(
"Removing empty nodes" + std::string(removeGeometryNodes ?
" and geometry nodes" :
""));
182 boundary.
add(it->second->getPosition());
185 boundary.
add(it->second->getGeometry().getBoxBoundary());
194 if (oc.
exists(
"geometry.min-dist") && !oc.
isDefault(
"geometry.min-dist")) {
202 if (removeElements && oc.
getBool(
"edges.join")) {
208 if (oc.
getBool(
"opposites.guess")) {
214 if (oc.
exists(
"geometry.split") && oc.
getBool(
"geometry.split")) {
236 if (oc.
getBool(
"sidewalks.guess") || oc.
getBool(
"sidewalks.guess.from-permissions")) {
238 oc.
getFloat(
"sidewalks.guess.min-speed"),
239 oc.
getFloat(
"sidewalks.guess.max-speed"),
240 oc.
getBool(
"sidewalks.guess.from-permissions"));
248 if (oc.
getBool(
"numerical-ids")) {
251 if (numChangedEdges + numChangedNodes > 0) {
257 if (oc.
exists(
"geometry.max-angle")) {
261 oc.
getBool(
"geometry.min-radius.fix"));
275 if (oc.
exists(
"geometry.junction-mismatch-threshold")) {
291 if (oc.
exists(
"speed.offset")) {
294 if (speedOffset != 0 || speedFactor != 1) {
299 (*i).second->setSpeed(-1,
MAX2((*i).second->getSpeed() * speedFactor + speedOffset, speedMin));
312 bool haveCrossings =
false;
313 if (oc.
getBool(
"crossings.guess")) {
314 haveCrossings =
true;
317 crossings += (*i).second->guessCrossings();
321 if (!haveCrossings) {
324 if (i->second->getCrossings().size() > 0) {
325 haveCrossings =
true;
332 oc.
set(
"no-internal-links",
"true");
346 if (oc.
getBool(
"roundabouts.guess")) {
350 if (numGuessed > 0) {
370 if (!oc.
getBool(
"no-turnarounds")) {
382 if (haveCrossings && !oc.
getBool(
"no-internal-links")) {
384 i->second->buildCrossingsAndWalkingAreas();
391 if (oc.
isSet(
"tls.set")) {
392 std::vector<std::string> tlControlledNodes = oc.
getStringVector(
"tls.set");
394 for (std::vector<std::string>::const_iterator i = tlControlledNodes.begin(); i != tlControlledNodes.end(); ++i) {
397 WRITE_WARNING(
"Building a tl-logic for junction '" + *i +
"' is not possible." +
"\n The junction '" + *i +
"' is not known.");
430 std::string progCount =
"";
431 if (numbers.first != numbers.second) {
432 progCount =
"(" +
toString(numbers.second) +
" programs) ";
436 if (oc.
isSet(
"street-sign-output")) {
444 if (!oc.
getBool(
"no-internal-links")) {
448 (*i).second->sortOutgoingConnectionsByIndex();
452 (*i).second->buildInnerEdges();
465 (*i).second->buildInnerEdges();
474 WRITE_MESSAGE(
"-----------------------------------------------------");
481 WRITE_MESSAGE(
"-----------------------------------------------------");
486 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");
502 (*i).second->reshiftPosition(x, y);
505 (*i).second->reshiftPosition(x, y);
508 (*i).second->reshiftPosition(x, y);
519 (*i).second->mirrorX();
522 (*i).second->mirrorX();
525 (*i).second->mirrorX();
551 if (maxLength > 0 && from.size() > 1) {
554 for (
int i = 0; i < (int) from.size(); i++) {
560 for (
int i = 0; i < (int)copy.size() - 1; i++) {
561 Position start = from[i + inserted];
562 Position end = from[i + inserted + 1];
563 SUMOReal length = copy[i].distanceTo(copy[i + 1]);
564 const Position step = (end - start) * (maxLength / length);
566 while (length > maxLength) {
569 from.insert(from.begin() + i + inserted + 1, start + (step * steps));
577 for (
int i = 0; i < (int) from.size(); i++) {
NBNetBuilder()
Constructor.
NBTypeCont myTypeCont
The used container for street types.
SUMOReal getZ(const Position &geo) const
returns height for the given geo coordinate (WGS84)
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 ...
NBNode * retrieve(const std::string &id) const
Returns the node with the given name.
void joinSimilarEdges(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc)
Joins edges connecting the same nodes.
void removeSelfLoops(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tc)
Removes self-loop edges (edges where the source and the destination node are the same) ...
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 setConvBoundary(const Boundary &boundary)
sets the converted boundary
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
std::map< std::string, NBNode * >::const_iterator begin() const
Returns the pointer to the begin of the stored nodes.
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 addJoinExclusion(const std::vector< std::string > &ids, bool check=false)
const Boundary & getConvBoundary() const
Returns the converted boundary.
std::map< std::string, NBNode * >::const_iterator end() const
Returns the pointer to the end of the stored nodes.
int removeUnwishedNodes(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc, bool removeGeometryNodes)
Removes "unwished" nodes.
void mirrorX()
mirror the network along the X-axis
int guessRoundabouts()
Determines which edges belong to roundabouts and increases their priority.
void compute(OptionsCont &oc, const std::set< std::string > &explicitTurnarounds=std::set< std::string >(), bool removeElements=true)
Performs the network building steps.
static void computeFinal(bool lefthand=false)
compute the location attributes which will be used for output based on the loaded location data...
~NBNetBuilder()
Destructor.
static GeoConvHelper & getProcessing()
the coordinate transformation to use for input conversion and processing
bool x2cartesian(Position &from, bool includeInBoundary=true)
std::map< std::string, NBDistrict * >::const_iterator end() const
Returns the pointer to the end of the stored districts.
bool usingGeoProjection() const
Returns whether a transformation from geo to metric coordinates will be performed.
void guessOpposites()
Sets opposite lane information for geometrically close edges.
SUMOReal ymin() const
Returns minimum y-coordinate.
int joinLoadedClusters(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc)
Joins loaded junction clusters (see NIXMLNodesHandler)
const Boundary & getOrigBoundary() const
Returns the original boundary.
void generateStreetSigns()
assigns street signs to edges based on toNode types
void recheckPostProcessConnections()
Try to set any stored connections.
int mapToNumericalIDs()
ensure that all node ids are integers
void guessTLs(OptionsCont &oc, NBTrafficLightLogicCont &tlc)
Guesses which junctions or junction clusters shall be controlled by tls.
std::map< std::string, NBEdge * >::const_iterator end() const
Returns the pointer to the end of the stored edges.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
SUMOReal ymax() const
Returns maximum y-coordinate.
void avoidOverlap()
fix overlap
std::map< std::string, NBDistrict * >::const_iterator begin() const
Returns the pointer to the begin of the stored districts.
bool isDefault(const std::string &name) const
Returns the information whether the named option has still the default value.
void setDefaults(int defaultNumLanes, SUMOReal defaultLaneWidth, SUMOReal defaultSpeed, int defaultPriority, SVCPermissions defaultPermissions)
Sets the default values.
int mapToNumericalIDs()
ensure that all edge ids are integers
static void sortNodesEdges(NBNodeCont &nc, bool useNodeShape=false)
Sorts a node's edges clockwise regarding driving direction.
void computeLanes2Edges()
Computes for each edge which lanes approach the next edges.
A class that stores a 2D geometrical boundary.
SUMOReal xmin() const
Returns minimum x-coordinate.
#define WRITE_WARNING(msg)
static OptionsCont & getOptions()
Retrieves the options.
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
void checkGeometries(const SUMOReal maxAngle, const SUMOReal minRadius, bool fix)
void computeLogics(const NBEdgeCont &ec, OptionsCont &oc)
build the list of outgoing edges and lanes
static const NBHeightMapper & get()
return the singleton instance (maybe 0)
void cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
static void reportWarnings()
reports warnings if any occured
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
#define PROGRESS_TIME_MESSAGE(before)
void reduceGeometries(const SUMOReal minDist)
std::map< std::string, NBEdge * >::const_iterator begin() const
Returns the pointer to the begin of the stored edges.
static methods for processing the coordinates conversion for the current net
void computeLanes2Lanes()
divides the incoming lanes on outgoing lanes
int joinJunctions(SUMOReal maxDist, NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc)
Joins junctions that are very close together.
void removeUnwishedEdges(NBDistrictCont &dc)
Removes unwished edges (not in keep-edges)
void joinTLS(NBTrafficLightLogicCont &tlc, SUMOReal maxdist)
Builds clusters of tls-controlled junctions and joins the control if possible.
static StringBijection< TrafficLightType > TrafficLightTypes
A point in 2D or 3D with translation and scaling methods.
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
static void computeEdgePriorities(NBNodeCont &nc)
Computes edge priorities within a node.
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
NBEdgeCont myEdgeCont
The used container for edges.
T get(const std::string &str) const
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
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.
NBTrafficLightLogicCont myTLLCont
The used container for traffic light logics.
bool exists(const std::string &name) const
Returns the information whether the named option is known.
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) ...
SUMOReal x() const
Returns the x-position.
#define PROGRESS_BEGIN_MESSAGE(msg)
void splitGeometry(NBNodeCont &nc)
Splits edges into multiple if they have a complex geometry.
const std::set< EdgeSet > getRoundabouts() const
Returns the determined roundabouts.
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
void setAsTLControlled(NBNode *node, NBTrafficLightLogicCont &tlc, TrafficLightType type, std::string id="")
Sets the given node as being controlled by a tls.
static void computeRamps(NBNetBuilder &nb, OptionsCont &oc)
Computes highway on-/off-ramps (if wished)
bool set(const std::string &name, const std::string &value)
Sets the given value for the named option.
void appendTurnarounds(bool noTLSControlled)
Appends turnarounds to all edges stored in the container.
SUMOReal xmax() const
Returns maximum x-coordinate.
static void computeNodeTypes(NBNodeCont &nc)
Computes node types.
void moveToOrigin(GeoConvHelper &geoConvHelper, bool lefthand)
shift network so its lower left corner is at 0,0
void add(SUMOReal x, SUMOReal y, SUMOReal z=0)
Makes the boundary include the given coordinate.
void removeIsolatedRoads(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tc)
Removes sequences of edges that are not connected with a junction. Simple roads without junctions som...
A storage for options typed value containers)
const Position getOffsetBase() const
Returns the network base.
void computeNodeShapes(SUMOReal mismatchThreshold=-1)
Compute the junction shape for this node.
void computeEdgeShapes()
Computes the shapes of all edges stored in the container.
Represents a single node (junction) during network building.
static void computeTurnDirections(NBNodeCont &nc, bool warn=true)
Computes turnaround destinations for all edges (if exist)
NBDistrictCont myDistrictCont
The used container for districts.
void printBuiltNodesStatistics() const
Prints statistics about built nodes.
void recheckLanes()
Rechecks whether all lanes have a successor for each of the stored edges.
static long getCurrentMillis()
Returns the current time in milliseconds.
#define PROGRESS_DONE_MESSAGE()
bool myHaveLoadedNetworkWithoutInternalEdges
whether a .net.xml without internal edges was loaded
#define WRITE_MESSAGE(msg)
SUMOReal y() const
Returns the y-position.
NBNodeCont myNodeCont
The used container for nodes.
void setTLControllingInformation(const NBEdgeCont &ec, const NBNodeCont &nc)
Informs the edges about being controlled by a tls.
std::pair< int, int > computeLogics(OptionsCont &oc)
Computes the traffic light logics using the stored definitions and stores the results.
bool ready() const
returns whether the NBHeightMapper has data
Set z-values for all network positions based on data from a height map.
void moveConvertedBy(SUMOReal x, SUMOReal y)
Shifts the converted boundary by the given amounts.
SUMOReal getFloat(const std::string &name) const
Returns the SUMOReal-value of the named option (only for Option_Float)