57 #ifdef CHECK_MEMORY_LEAKS
59 #endif // CHECK_MEMORY_LEAKS
66 myEdgeCont(myTypeCont)
86 const std::set<std::string>& explicitTurnarounds,
87 bool removeElements) {
98 if (oc.
exists(
"remove-edges.isolated") && oc.
getBool(
"remove-edges.isolated")) {
104 if (oc.
exists(
"keep-edges.postload") && oc.
getBool(
"keep-edges.postload")) {
105 if (oc.
isSet(
"keep-edges.explicit") || oc.
isSet(
"keep-edges.input-file")) {
112 if (oc.
exists(
"junctions.join-exclude") && oc.
isSet(
"junctions.join-exclude")) {
116 if (oc.
getBool(
"junctions.join")) {
126 if (oc.
getBool(
"roundabouts.guess")) {
130 for (std::set<EdgeSet>::const_iterator it_round = roundabouts.begin();
131 it_round != roundabouts.end(); ++it_round) {
132 std::vector<std::string> nodeIDs;
133 for (EdgeSet::const_iterator it_edge = it_round->begin(); it_edge != it_round->end(); ++it_edge) {
134 nodeIDs.push_back((*it_edge)->getToNode()->getID());
140 myEdgeCont.computeLaneShapes();
148 if (removeElements) {
150 const bool removeGeometryNodes = oc.
exists(
"geometry.remove") && oc.
getBool(
"geometry.remove");
151 PROGRESS_BEGIN_MESSAGE(
"Removing empty nodes" + std::string(removeGeometryNodes ?
" and geometry nodes" :
""));
161 boundary.
add(it->second->getPosition());
164 boundary.
add(it->second->getGeometry().getBoxBoundary());
173 if (oc.
exists(
"geometry.min-dist") && oc.
isSet(
"geometry.min-dist")) {
180 if (removeElements) {
187 if (oc.
exists(
"geometry.split") && oc.
getBool(
"geometry.split")) {
206 if (oc.
getBool(
"sidewalks.guess") || oc.
getBool(
"sidewalks.guess.from-permissions")) {
208 oc.
getFloat(
"sidewalks.guess.min-speed"),
209 oc.
getFloat(
"sidewalks.guess.max-speed"),
210 oc.
getBool(
"sidewalks.guess.from-permissions"));
217 if (oc.
exists(
"geometry.max-angle")) {
221 oc.
getBool(
"geometry.min-radius.fix"));
232 if (oc.
exists(
"geometry.junction-mismatch-threshold")) {
247 if (oc.
exists(
"speed.offset")) {
250 if (speedOffset != 0 || speedFactor != 1) {
253 (*i).second->setSpeed(-1, (*i).second->getSpeed() * speedFactor + speedOffset);
265 bool buildCrossingsAndWalkingAreas =
false;
266 if (oc.
getBool(
"crossings.guess")) {
267 buildCrossingsAndWalkingAreas =
true;
270 crossings += (*i).second->guessCrossings();
274 if (!oc.
getBool(
"no-internal-links") && !buildCrossingsAndWalkingAreas) {
277 if (i->second->getCrossings().size() > 0) {
278 buildCrossingsAndWalkingAreas =
true;
292 if (oc.
getBool(
"roundabouts.guess")) {
309 if (!oc.
getBool(
"no-turnarounds")) {
323 if (oc.
isSet(
"tls.set")) {
324 std::vector<std::string> tlControlledNodes = oc.
getStringVector(
"tls.set");
326 for (std::vector<std::string>::const_iterator i = tlControlledNodes.begin(); i != tlControlledNodes.end(); ++i) {
329 WRITE_WARNING(
"Building a tl-logic for node '" + *i +
"' is not possible." +
"\n The node '" + *i +
"' is not known.");
358 std::string progCount =
"";
359 if (numbers.first != numbers.second) {
360 progCount =
"(" +
toString(numbers.second) +
" programs) ";
364 if (oc.
isSet(
"street-sign-output")) {
371 if (!oc.
getBool(
"no-internal-links")) {
374 (*i).second->sortOutgoingConnectionsByIndex();
378 (*i).second->buildInnerEdges(buildCrossingsAndWalkingAreas);
385 WRITE_MESSAGE(
"-----------------------------------------------------");
392 WRITE_MESSAGE(
"-----------------------------------------------------");
397 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");
409 (*i).second->reshiftPosition(x, y);
412 (*i).second->reshiftPosition(x, y);
415 (*i).second->reshiftPosition(x, y);
443 if (maxLength > 0 && from.size() > 1) {
446 for (
int i = 0; i < (int) from.size(); i++) {
452 for (
int i = 0; i < (int)copy.size() - 1; i++) {
453 Position start = from[i + inserted];
454 Position end = from[i + inserted + 1];
455 SUMOReal length = copy[i].distanceTo(copy[i + 1]);
456 const Position step = (end - start) * (maxLength / length);
458 while (length > maxLength) {
461 from.
insertAt(i + inserted + 1, start + (step * steps));
469 for (
int i = 0; i < (int) from.size(); i++) {
void moveToOrigin(GeoConvHelper &geoConvHelper)
shift network so its lower left corner is at 0,0
NBNetBuilder()
Constructor.
NBTypeCont myTypeCont
The used container for street types.
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 ...
void joinSimilarEdges(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc)
Joins edges connecting the same nodes.
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) ...
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 cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
void setConvBoundary(const Boundary &boundary)
sets the converted boundary
void computeNodeShapes(bool leftHand, SUMOReal mismatchThreshold=-1)
Compute the junction shape for this node.
static bool transformCoordinates(Position &from, bool includeInBoundary=true, GeoConvHelper *from_srs=0)
transforms loaded coordinates handles projections, offsets (using GeoConvHelper) and import of height...
NBJoinedEdgesMap myJoinedEdges
Map of joined edges.
void addJoinExclusion(const std::vector< std::string > &ids, bool check=false)
bool ready() const
returns whether the NBHeightMapper has data
unsigned int removeUnwishedNodes(NBDistrictCont &dc, NBEdgeCont &ec, NBJoinedEdgesMap &je, NBTrafficLightLogicCont &tlc, bool removeGeometryNodes)
Removes "unwished" nodes.
const std::set< EdgeSet > getRoundabouts() const
Returns the determined roundabouts.
void insertAt(int index, const Position &p)
SUMOReal getZ(const Position &geo) const
returns height for the given geo coordinate (WGS84)
void compute(OptionsCont &oc, const std::set< std::string > &explicitTurnarounds=std::set< std::string >(), bool removeElements=true)
Performs the network building steps.
unsigned int joinJunctions(SUMOReal maxDist, NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc)
Joins junctions that are very close together.
~NBNetBuilder()
Destructor.
SUMOReal ymin() const
Returns minimum y-coordinate.
static GeoConvHelper & getProcessing()
the coordinate transformation to use for input conversion and processing
bool x2cartesian(Position &from, bool includeInBoundary=true)
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
SUMOReal xmin() const
Returns minimum x-coordinate.
void generateStreetSigns()
assigns street signs to edges based on toNode types
void recheckPostProcessConnections()
Try to set any stored connections.
void guessTLs(OptionsCont &oc, NBTrafficLightLogicCont &tlc)
Guesses which junctions or junction clusters shall be controlled by tls.
SUMOReal getFloat(const std::string &name) const
Returns the SUMOReal-value of the named option (only for Option_Float)
void avoidOverlap()
fix overlap
SUMOReal x() const
Returns the x-position.
SUMOReal xmax() const
Returns maximum x-coordinate.
A class that stores a 2D geometrical boundary.
#define WRITE_WARNING(msg)
void computeLanes2Lanes(const bool buildCrossingsAndWalkingAreas)
divides the incoming lanes on outgoing lanes
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)
static void computeFinal()
compute the location attributes which will be used for output based on the loaded location data...
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
static void reportWarnings()
reports warnings if any occured
void reduceGeometries(const SUMOReal minDist)
void computeLanes2Edges(const bool buildCrossingsAndWalkingAreas)
Computes for each edge which lanes approach the next edges.
std::map< std::string, NBEdge * >::const_iterator end() const
Returns the pointer to the end of the stored edges.
bool usingGeoProjection() const
Returns whether a transformation from geo to metric coordinates will be performed.
static methods for processing the coordinates conversion for the current net
std::map< std::string, NBDistrict * >::const_iterator begin() const
Returns the pointer to the begin of the stored districts.
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.
std::map< std::string, NBDistrict * >::const_iterator end() const
Returns the pointer to the end of the stored districts.
void guessRoundabouts()
Determines which edges belong to roundabouts and increases their priority.
static void computeEdgePriorities(NBNodeCont &nc)
Computes edge priorities within a node.
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
void setDefaults(int defaultNoLanes, SUMOReal defaultSpeed, int defaultPriority)
Sets the default values.
NBEdgeCont myEdgeCont
The used container for edges.
unsigned int joinLoadedClusters(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tlc)
Joins loaded junction clusters (see NIXMLNodesHandler)
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.
static void computeTurnDirections(NBNodeCont &nc)
Computes turnaround destinations for all edges (if exist)
#define PROGRESS_BEGIN_MESSAGE(msg)
void splitGeometry(NBNodeCont &nc)
Splits edges into multiple if they have a complex geometry.
const Position getOffsetBase() const
Returns the network base.
std::pair< unsigned int, unsigned int > computeLogics(NBEdgeCont &ec, OptionsCont &oc)
Computes the traffic light logics using the stored definitions and stores the results.
bool isDefault(const std::string &name) const
Returns the information whether the named option has still the default value.
std::map< std::string, NBNode * >::const_iterator end() const
Returns the pointer to the end of the stored nodes.
const Boundary & getConvBoundary() const
Returns the converted boundary.
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
std::map< std::string, NBEdge * >::const_iterator begin() const
Returns the pointer to the begin of the stored edges.
void setAsTLControlled(NBNode *node, NBTrafficLightLogicCont &tlc, TrafficLightType type, std::string id="")
Sets the given node as being controlled by a tls.
void add(SUMOReal x, SUMOReal y)
Makes the boundary include the given coordinate.
static void computeRamps(NBNetBuilder &nb, OptionsCont &oc)
Computes highway on-/off-ramps (if wished)
void appendTurnarounds(bool noTLSControlled)
Appends turnarounds to all edges stored in the container.
static void computeNodeTypes(NBNodeCont &nc)
Computes node types.
void removeIsolatedRoads(NBDistrictCont &dc, NBEdgeCont &ec, NBTrafficLightLogicCont &tc)
Removes sequences of edges that are not connected with a junction. Simple roads without junctions som...
SUMOReal y() const
Returns the y-position.
A storage for options typed value containers)
void recheckLanes(const bool buildCrossingsAndWalkingAreas)
Rechecks whether all lanes have a successor for each of the stored edges.
void computeEdgeShapes()
Computes the shapes of all edges stored in the container.
Represents a single node (junction) during network building.
T get(const std::string &str) const
NBDistrictCont myDistrictCont
The used container for districts.
SUMOReal ymax() const
Returns maximum y-coordinate.
const Boundary & getOrigBoundary() const
Returns the original boundary.
void init(NBEdgeCont &ec)
Initialises the map using the list of edge names.
NBNode * retrieve(const std::string &id) const
Returns the node with the given name.
#define PROGRESS_DONE_MESSAGE()
void printBuiltNodesStatistics() const
Prints statistics about built nodes.
int getInt(const std::string &name) const
Returns the int-value of the named option (only for Option_Integer)
#define WRITE_MESSAGE(msg)
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::map< std::string, NBNode * >::const_iterator begin() const
Returns the pointer to the begin of the stored nodes.
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.
bool exists(const std::string &name) const
Returns the information whether the named option is known.
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
static void sortNodesEdges(NBNodeCont &nc, bool leftHand, bool useNodeShape=false)
Sorts a node's edges clockwise regarding driving direction.