SUMO - Simulation of Urban MObility
NIImporter_SUMO.h
Go to the documentation of this file.
1 /****************************************************************************/
9 // Importer for networks stored in SUMO format
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
12 // Copyright (C) 2001-2014 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 #ifndef NIImporter_SUMO_h
23 #define NIImporter_SUMO_h
24 
25 
26 // ===========================================================================
27 // included modules
28 // ===========================================================================
29 #ifdef _MSC_VER
30 #include <windows_config.h>
31 #else
32 #include <config.h>
33 #endif
34 
35 #include <string>
36 #include <map>
40 
41 
42 // ===========================================================================
43 // class declarations
44 // ===========================================================================
45 class NBNetBuilder;
46 class NBEdge;
47 class OptionsCont;
48 
49 
50 // ===========================================================================
51 // class definitions
52 // ===========================================================================
59 public:
75  static void loadNetwork(OptionsCont& oc, NBNetBuilder& nb);
76 
79 
81  static void addPhase(const SUMOSAXAttributes& attrs, NBLoadedSUMOTLDef* currentTL);
82 
84  static GeoConvHelper* loadLocation(const SUMOSAXAttributes& attrs);
85 
86 protected:
91 
92 
95 
96 
97 
99 
100 
111  void myStartElement(int element,
112  const SUMOSAXAttributes& attrs);
113 
114 
121  void myEndElement(int element);
123 
124 
125 private:
127  void _loadNetwork(OptionsCont& oc);
128 
130 
131 
135  void addEdge(const SUMOSAXAttributes& attrs);
136 
137 
141  void addLane(const SUMOSAXAttributes& attrs);
142 
143 
147  void addJunction(const SUMOSAXAttributes& attrs);
148 
149 
153  void addRequest(const SUMOSAXAttributes& attrs);
154 
155 
160  void addConnection(const SUMOSAXAttributes& attrs);
161 
165  void addProhibition(const SUMOSAXAttributes& attrs);
166 
168 
169 
170 
171 private:
176  struct Connection {
178  std::string toEdgeID;
180  unsigned int toLaneIdx;
182  std::string tlID;
184  unsigned int tlLinkNo;
187  };
188 
189 
193  struct LaneAttrs {
199  std::vector<Connection> connections;
201  std::string allow;
203  std::string disallow;
208  };
209 
210 
214  struct EdgeAttrs {
216  std::string id;
218  std::string streetName;
220  std::string type;
224  std::string fromNode;
226  std::string toNode;
232  int priority;
236  std::vector<LaneAttrs*> lanes;
241  };
242 
243 
247  struct Prohibition {
248  std::string prohibitorFrom;
249  std::string prohibitorTo;
250  std::string prohibitedFrom;
251  std::string prohibitedTo;
252  };
253 
257  struct Crossing {
258  std::string laneID;
259  std::vector<std::string> crossingEdges;
261  bool priority;
262  };
263 
267  struct JunctionAttrs {
269  // @the list of internal lanes corresponding to each link
270  std::vector<std::string> intLanes;
271  // @brief the complete response definition for all links
272  std::vector<std::string> response;
273  };
274 
275 
277  std::map<std::string, EdgeAttrs*> myEdges;
278 
280  std::vector<Prohibition> myProhibitions;
281 
284 
287 
290 
293 
296 
299 
302 
305 
307  std::map<std::string, std::vector<Crossing> > myPedestrianCrossings;
308 
311 
316  LaneAttrs* getLaneAttrsFromID(EdgeAttrs* edge, std::string lane_id);
317 
323  static void interpretLaneID(const std::string& lane_id, std::string& edge_id, unsigned int& index);
324 
330  static PositionVector reconstructEdgeShape(const EdgeAttrs* edge, const Position& from, const Position& to);
331 
333  static Position readPosition(const SUMOSAXAttributes& attrs, const std::string& id, bool& ok);
334 
341  void parseProhibitionConnection(const std::string& attr, std::string& from, std::string& to, bool& ok);
342 };
343 
344 
345 #endif
346 
347 /****************************************************************************/
348 
std::map< std::string, EdgeAttrs * > myEdges
Loaded edge definitions.
LaneAttrs * myCurrentLane
The currently parsed lanes's definition (to add the shape to)
PositionVector shape
This edges's shape.
std::vector< Prohibition > myProhibitions
Loaded prohibitions.
static void addPhase(const SUMOSAXAttributes &attrs, NBLoadedSUMOTLDef *currentTL)
adds a phase to the traffic lights logic currently build
NBNodeCont & myNodeCont
The node container to fill.
void addEdge(const SUMOSAXAttributes &attrs)
Parses an edge and stores the values in "myCurrentEdge".
SUMOReal maxSpeed
The maximum velocity allowed on this lane.
A loaded (complete) traffic light logic.
std::vector< LaneAttrs * > lanes
This edge's lanes.
A container for traffic light definitions and built programs.
Describes a pedestrian crossing.
The representation of a single edge during network building.
Definition: NBEdge.h:71
A connection description.
std::vector< std::string > response
static NBLoadedSUMOTLDef * initTrafficLightLogic(const SUMOSAXAttributes &attrs, NBLoadedSUMOTLDef *currentTL)
begins the reading of a traffic lights logic
SAX-handler base for SUMO-files.
NIImporter_SUMO(NBNetBuilder &nb)
Constructor.
Describes the values found in a lane's definition.
LaneAttrs * getLaneAttrsFromID(EdgeAttrs *edge, std::string lane_id)
Parses lane index from lane ID an retrieve lane from EdgeAttrs.
std::string toEdgeID
The id of the target edge.
bool myHaveSeenInternalEdge
whether the loaded network contains internal lanes
void addLane(const SUMOSAXAttributes &attrs)
Parses a lane and stores the values in "myCurrentLane".
NBNetBuilder & myNetBuilder
The network builder to fill.
void addConnection(const SUMOSAXAttributes &attrs)
Parses a connection and saves it into the lane's definition stored in "myCurrentLane".
std::string toNode
The node this edge ends at.
Describes the values found in an edge's definition and this edge's lanes.
JunctionAttrs myCurrentJunction
The currently parsed junction definition to help in reconstructing crossings.
static methods for processing the coordinates conversion for the current net
Definition: GeoConvHelper.h:59
std::vector< std::string > crossingEdges
std::string allow
This lane's allowed vehicle classes.
Describes the values found in a junction.
Encapsulated SAX-Attributes.
static GeoConvHelper * loadLocation(const SUMOSAXAttributes &attrs)
Parses network location description and registers it with GeoConveHelper::setLoaded.
Describes the values found in a prohibition.
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
Importer for networks stored in SUMO format.
std::string tlID
The id of the traffic light that controls this connection.
EdgeAttrs * myCurrentEdge
The currently parsed edge's definition (to add loaded lanes to)
A list of positions.
void parseProhibitionConnection(const std::string &attr, std::string &from, std::string &to, bool &ok)
parses connection string of a prohibition (very old school)
LaneSpreadFunction lsf
The lane spread function.
std::string disallow
This lane's disallowed vehicle classes.
unsigned int tlLinkNo
The index of this connection within the controlling traffic light.
NBEdge * builtEdge
The built edge.
static PositionVector reconstructEdgeShape(const EdgeAttrs *edge, const Position &from, const Position &to)
reconstructs the edge shape from the node positions and the given lane shapes since we do not know th...
SumoXMLEdgeFunc func
This edge's function.
void _loadNetwork(OptionsCont &oc)
load the network
SUMOReal width
The width of this lane.
static void interpretLaneID(const std::string &lane_id, std::string &edge_id, unsigned int &index)
parses edge-id and index from lane-id
std::vector< std::string > intLanes
SUMOReal endOffset
This lane's offset from the intersection.
std::string streetName
This edge's street name.
static void loadNetwork(OptionsCont &oc, NBNetBuilder &nb)
Loads content of the optionally given SUMO file.
SUMOReal maxSpeed
The maximum velocity allowed on this edge (!!!)
bool mayDefinitelyPass
Information about being definitely free to drive (on-ramps)
std::vector< Connection > connections
This lane's connections.
void addJunction(const SUMOSAXAttributes &attrs)
Parses a junction and saves it in the node control.
std::string type
This edge's type.
Instance responsible for building networks.
Definition: NBNetBuilder.h:113
unsigned int toLaneIdx
The index of the target lane.
static Position readPosition(const SUMOSAXAttributes &attrs, const std::string &id, bool &ok)
read position from the given attributes, attribute errors to id
std::map< std::string, std::vector< Crossing > > myPedestrianCrossings
The pedestrian crossings found in the network.
A storage for options typed value containers)
Definition: OptionsCont.h:108
int priority
This edge's priority.
std::string id
This edge's id.
SumoXMLEdgeFunc
Numbers representing special SUMO-XML-attribute values for representing edge functions used in netbui...
void myEndElement(int element)
Called when a closing tag occurs.
LaneSpreadFunction
Numbers representing special SUMO-XML-attribute values Information how the edge's lateral offset shal...
std::string fromNode
The node this edge starts at.
Represents a single node (junction) during network building.
Definition: NBNode.h:75
void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag;.
~NIImporter_SUMO()
Destructor.
void addRequest(const SUMOSAXAttributes &attrs)
Parses a reques and saves selected attributes in myCurrentJunction.
GeoConvHelper * myLocation
The coordinate transformation which was used to build the loaded network.
PositionVector shape
This lane's shape (needed to reconstruct edge shape for legacy networks)
#define SUMOReal
Definition: config.h:215
NBTrafficLightLogicCont & myTLLCont
The node container to fill.
SUMOReal length
The length of the edge if set explicitly.
Container for nodes during the netbuilding process.
Definition: NBNodeCont.h:64
void addProhibition(const SUMOSAXAttributes &attrs)
Parses a prohibition and saves it.
NBLoadedSUMOTLDef * myCurrentTL
The currently parsed traffic light.