36 #include <xercesc/sax/HandlerBase.hpp> 37 #include <xercesc/sax/AttributeList.hpp> 38 #include <xercesc/sax/SAXParseException.hpp> 39 #include <xercesc/sax/SAXException.hpp> 55 #ifdef CHECK_MEMORY_LEAKS 57 #endif // CHECK_MEMORY_LEAKS 116 bool needConversion =
true;
120 needConversion =
false;
127 needConversion =
true;
132 needConversion =
true;
155 bool updateEdgeGeometries,
172 std::set<NBTrafficLightDefinition*> oldTLS;
175 node =
new NBNode(nodeID, position, type);
177 throw ProcessError(
"Could not insert node though checked this before (id='" + nodeID +
"').");
182 node->
reinit(position, type, updateEdgeGeometries);
189 for (std::set<NBTrafficLightDefinition*>::iterator i = oldTLS.begin(); i != oldTLS.end(); ++i) {
190 if ((*i)->getNodes().size() == 0) {
199 if (shape.size() > 2) {
263 std::set<NBTrafficLightDefinition*> tlDefs;
266 std::string oldTlID =
"";
271 oldTlID = oldDef->
getID();
276 if (tlID != oldTlID || typeS != oldTypeS) {
283 WRITE_ERROR(
"Unknown traffic light type '" + typeS +
"' for node '" + currentNode->
getID() +
"'.");
286 if (tlID !=
"" && tlc.
getPrograms(tlID).size() > 0) {
288 const std::map<std::string, NBTrafficLightDefinition*>& programs = tlc.
getPrograms(tlID);
289 std::map<std::string, NBTrafficLightDefinition*>::const_iterator it;
290 for (it = programs.begin(); it != programs.end(); it++) {
291 if (it->second->getType() != type) {
292 WRITE_ERROR(
"Mismatched traffic light type '" + typeS +
"' for tl '" + tlID +
"'.");
295 tlDefs.insert(it->second);
296 it->second->addNode(currentNode);
301 tlID = (tlID ==
"" ? currentNode->
getID() : tlID);
308 tlDefs.insert(tlDef);
311 std::vector<std::string> controlledInner;
313 if (controlledInner.size() != 0) {
314 for (std::set<NBTrafficLightDefinition*>::iterator it = tlDefs.begin(); it != tlDefs.end(); it++) {
315 (*it)->addControlledInnerEdges(controlledInner);
const std::map< std::string, NBTrafficLightDefinition * > & getPrograms(const std::string &id) const
Returns all programs for the given tl-id.
NBNode * retrieve(const std::string &id) const
Returns the node with the given name.
static StringBijection< SumoXMLNodeType > NodeTypes
GeoConvHelper * myLocation
The coordinate transformation which was used compute the node coordinates.
a list of node ids, used for controlling joining
Whether vehicles must keep the junction clear.
static bool transformCoordinates(Position &from, bool includeInBoundary=true, GeoConvHelper *from_srs=0)
transforms loaded coordinates handles projections, offsets (using GeoConvHelper) and import of height...
std::string myID
The id of the currently parsed node.
void addJoinExclusion(const std::vector< std::string > &ids, bool check=false)
A container for traffic light definitions and built programs.
~NIXMLNodesHandler()
Destructor.
void reinit(const Position &position, SumoXMLNodeType type, bool updateEdgeGeometries=false)
Resets initial values.
TrafficLightType getType() const
get the algorithm type (static etc..)
Position myPosition
The position of the currently parsed node.
The base class for traffic light logic definitions.
NBTrafficLightLogicCont & myTLLogicCont
The traffic lights container to add built tls to.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
const std::string & getID() const
Returns the id.
void setCustomShape(const PositionVector &shape)
set the junction shape
SAX-handler base for SUMO-files.
virtual bool hasAttribute(int id) const =0
Returns the information whether the named (by its enum-value) attribute is within the current list...
#define WRITE_WARNING(msg)
static OptionsCont & getOptions()
Retrieves the options.
NBNodeCont & myNodeCont
The node container to add built nodes to.
bool isTLControlled() const
Returns whether this node is controlled by any tls.
static void parseStringVector(const std::string &def, std::vector< std::string > &into)
Splits the given string.
The turning radius at an intersection in m.
Encapsulated SAX-Attributes.
void setRadius(SUMOReal radius)
set the turning radius
static GeoConvHelper * loadLocation(const SUMOSAXAttributes &attrs)
Parses network location description and registers it with GeoConveHelper::setLoaded.
static StringBijection< TrafficLightType > TrafficLightTypes
T get(int attr, const char *objectid, bool &ok, bool report=true) const
Tries to read given attribute assuming it is an int.
A point in 2D or 3D with translation and scaling methods.
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 deleteNode(const SUMOSAXAttributes &attrs)
void removeTrafficLights()
Removes all references to traffic lights that control this tls.
SUMOReal x() const
Returns the x-position.
static void processNodeType(const SUMOSAXAttributes &attrs, NBNode *node, const std::string &nodeID, const Position &position, bool updateEdgeGeometries, NBNodeCont &nc, NBTrafficLightLogicCont &tlc)
parses node attributes (not related to positioning)
void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag;.
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
OptionsCont & myOptions
A reference to the program's options.
static void processTrafficLightDefinitions(const SUMOSAXAttributes &attrs, NBNode *currentNode, NBTrafficLightLogicCont &tlc)
Builds the defined traffic light or adds a node to it.
void setKeepClear(bool keepClear)
set the keepClear flag
void addJoinExclusion(const SUMOSAXAttributes &attrs)
std::vector< std::string > getVector()
T getOpt(int attr, const char *objectid, bool &ok, T defaultValue, bool report=true) const
Tries to read given attribute assuming it is an int.
void addCluster2Join(std::set< std::string > cluster)
add ids of nodes which shall be joined into a single node
SumoXMLNodeType
Numbers representing special SUMO-XML-attribute values for representing node- (junction-) types used ...
const std::set< NBTrafficLightDefinition * > & getControllingTLS() const
Returns the traffic lights that were assigned to this node.
void addJoinCluster(const SUMOSAXAttributes &attrs)
A storage for options typed value containers)
void set(SUMOReal x, SUMOReal y)
SumoXMLNodeType getType() const
Returns the type of this node.
bool insert(const std::string &id, const Position &position, NBDistrict *district=0)
Inserts a node into the map.
void mul(SUMOReal val)
Multiplies both positions with the given value.
const Position & getPosition() const
Returns the position of this node.
Represents a single node (junction) during network building.
bool removeFully(const std::string id)
Removes a logic definition (and all programs) from the dictionary.
bool insert(NBTrafficLightDefinition *logic, bool forceInsert=false)
Adds a logic definition to the dictionary.
void addNode(const SUMOSAXAttributes &attrs)
Container for nodes during the netbuilding process.
A traffic light logics which must be computed (only nodes/edges are given)
bool extract(NBNode *node, bool remember=false)
Removes the given node but does not delete it.
SUMOReal y() const
Returns the y-position.
void closePolygon()
ensures that the last position equals the first
static bool isTrafficLight(SumoXMLNodeType type)
return whether the given type is a traffic light
NIXMLNodesHandler(NBNodeCont &nc, NBTrafficLightLogicCont &tlc, OptionsCont &options)
Constructor.