35 #include <xercesc/sax/HandlerBase.hpp> 36 #include <xercesc/sax/AttributeList.hpp> 37 #include <xercesc/sax/SAXParseException.hpp> 38 #include <xercesc/sax/SAXException.hpp> 66 myLastParameterised(0) {
132 bool needConversion =
true;
136 needConversion =
false;
143 needConversion =
true;
148 needConversion =
true;
172 bool updateEdgeGeometries,
189 std::set<NBTrafficLightDefinition*> oldTLS;
192 node =
new NBNode(nodeID, position, type);
194 throw ProcessError(
"Could not insert node though checked this before (id='" + nodeID +
"').");
199 node->
reinit(position, type, updateEdgeGeometries);
206 for (std::set<NBTrafficLightDefinition*>::iterator i = oldTLS.begin(); i != oldTLS.end(); ++i) {
207 if ((*i)->getNodes().size() == 0) {
216 if (shape.size() > 2) {
281 std::set<NBTrafficLightDefinition*> tlDefs;
284 std::string oldTlID =
"";
289 oldTlID = oldDef->
getID();
294 if (tlID != oldTlID || typeS != oldTypeS) {
301 WRITE_ERROR(
"Unknown traffic light type '" + typeS +
"' for node '" + currentNode->
getID() +
"'.");
304 if (tlID !=
"" && tlc.
getPrograms(tlID).size() > 0) {
306 const std::map<std::string, NBTrafficLightDefinition*>& programs = tlc.
getPrograms(tlID);
307 std::map<std::string, NBTrafficLightDefinition*>::const_iterator it;
308 for (it = programs.begin(); it != programs.end(); it++) {
309 if (it->second->getType() != type) {
310 WRITE_ERROR(
"Mismatched traffic light type '" + typeS +
"' for tl '" + tlID +
"'.");
313 tlDefs.insert(it->second);
314 it->second->addNode(currentNode);
319 tlID = (tlID ==
"" ? currentNode->
getID() : tlID);
326 tlDefs.insert(tlDef);
329 std::vector<std::string> controlledInner;
331 if (controlledInner.size() != 0) {
332 for (std::set<NBTrafficLightDefinition*>::iterator it = tlDefs.begin(); it != tlDefs.end(); it++) {
333 (*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)
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.
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.
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.