29 #include <xercesc/sax/HandlerBase.hpp> 30 #include <xercesc/sax/AttributeList.hpp> 31 #include <xercesc/sax/SAXParseException.hpp> 32 #include <xercesc/sax/SAXException.hpp> 60 myLastParameterised(nullptr) {
126 bool needConversion =
true;
127 if (node !=
nullptr) {
130 needConversion =
false;
137 needConversion =
true;
142 needConversion =
true;
166 bool updateEdgeGeometries,
171 if (node !=
nullptr) {
183 std::set<NBTrafficLightDefinition*> oldTLS;
185 if (node ==
nullptr) {
186 node =
new NBNode(nodeID, position, type);
188 throw ProcessError(
"Could not insert node though checked this before (id='" + nodeID +
"').");
193 node->
reinit(position, type, updateEdgeGeometries);
200 for (std::set<NBTrafficLightDefinition*>::iterator i = oldTLS.begin(); i != oldTLS.end(); ++i) {
201 if ((*i)->getNodes().size() == 0) {
210 if (shape.size() > 2) {
241 if (node ==
nullptr) {
254 const std::string clusterString = attrs.
get<std::string>(
SUMO_ATTR_NODES,
nullptr, ok);
280 std::set<NBTrafficLightDefinition*> tlDefs;
283 std::string oldTlID =
"";
288 oldTlID = oldDef->
getID();
293 if (tlID != oldTlID || typeS != oldTypeS) {
300 WRITE_ERROR(
"Unknown traffic light type '" + typeS +
"' for node '" + currentNode->
getID() +
"'.");
303 if (tlID !=
"" && tlc.
getPrograms(tlID).size() > 0) {
305 const std::map<std::string, NBTrafficLightDefinition*>& programs = tlc.
getPrograms(tlID);
306 std::map<std::string, NBTrafficLightDefinition*>::const_iterator it;
307 for (it = programs.begin(); it != programs.end(); it++) {
308 if (it->second->getType() != type) {
309 WRITE_ERROR(
"Mismatched traffic light type '" + typeS +
"' for tl '" + tlID +
"'.");
312 tlDefs.insert(it->second);
313 it->second->addNode(currentNode);
318 tlID = (tlID ==
"" ? currentNode->
getID() : tlID);
325 tlDefs.insert(tlDef);
328 std::vector<std::string> controlledInner;
330 if (controlledInner.size() != 0) {
331 for (std::set<NBTrafficLightDefinition*>::iterator it = tlDefs.begin(); it != tlDefs.end(); it++) {
332 (*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
node types
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 transformCoordinate(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)
void setRightOfWay(RightOfWay rightOfWay)
set method for computing right-of-way
static NBNode * 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)
A container for traffic light definitions and built programs.
~NIXMLNodesHandler()
Destructor.
void reinit(const Position &position, SumoXMLNodeType type, bool updateEdgeGeometries=false)
Resets initial values.
double y() const
Returns the y-position.
TrafficLightType getType() const
get the algorithm type (static etc..)
double x() const
Returns the x-position.
Position myPosition
The position of the currently parsed node.
The base class for traffic light logic definitions.
link,node: the traffic light id responsible for this link
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 set(double x, double y)
set positions x and y
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.
virtual std::string getString(int id) const =0
Returns the string-value of the named (by its enum-value) attribute.
NBNodeCont & myNodeCont
The node container to add built nodes to.
virtual RightOfWay getRightOfWay(bool &ok) const =0
Returns the right-of-way method.
void setRadius(double radius)
set the turning radius
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.
How to compute right of way.
The turning radius at an intersection in m.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Encapsulated SAX-Attributes.
static GeoConvHelper * loadLocation(const SUMOSAXAttributes &attrs)
Parses network location description and registers it with GeoConveHelper::setLoaded.
static StringBijection< TrafficLightType > TrafficLightTypes
traffic light types
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.
parameter associated to a certain key
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.
Parameterised * myLastParameterised
last item the could receive parameters
void setParameter(const std::string &key, const std::string &value)
Sets a parameter.
node: the type of traffic light
edge: the shape in xml-definition
void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag;.
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 (The set of tls that control this node) ...
void addJoinCluster(const SUMOSAXAttributes &attrs)
alternative definition for junction
A storage for options typed value containers)
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.
const Position & getPosition() const
Represents a single node (junction) during network building.
bool removeFully(const std::string id)
Removes a logic definition (and all programs) from the dictionary.
void myEndElement(int element)
Called when a closing tag occurs.
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.
void mul(double val)
Multiplies both positions with the given value.
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.
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.