47 #ifdef CHECK_MEMORY_LEAKS
49 #endif // CHECK_MEMORY_LEAKS
62 if (!oc.
isSet(
"opendrive-output")) {
72 device <<
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
73 device <<
"<OpenDRIVE>\n";
75 std::string dstr(ctime(&now));
79 device <<
" <header revMajor=\"1\" revMinor=\"3\" name=\"\" version=\"1.00\" date=\"" << dstr.substr(0, dstr.length() - 1)
80 <<
"\" north=\"" << b.
ymax() <<
"\" south=\"" << b.
ymin() <<
"\" east=\"" << b.
xmax() <<
"\" west=\"" << b.
xmin()
81 <<
"\" maxRoad=\"" << ec.
size() <<
"\" maxJunc=\"" << nc.
size() <<
"\" maxPrg=\"0\"/>\n";
83 for (std::map<std::string, NBEdge*>::const_iterator i = ec.
begin(); i != ec.
end(); ++i) {
84 const NBEdge* e = (*i).second;
86 device <<
" <link>\n";
87 device <<
" <predecessor elementType=\"junction\" elementId=\"" <<
getID(e->
getFromNode()->
getID(), nodeMap, nodeID) <<
"\"/>\n";
88 device <<
" <successor elementType=\"junction\" elementId=\"" <<
getID(e->
getToNode()->
getID(), nodeMap, nodeID) <<
"\"/>\n";
89 device <<
" </link>\n";
90 device <<
" <type s=\"0\" type=\"town\"/>\n";
91 const std::vector<NBEdge::Lane>& lanes = e->
getLanes();
92 unsigned int li = (
unsigned int)lanes.size() - 1;
100 device <<
" <elevationProfile><elevation s=\"0\" a=\"0\" b=\"0\" c=\"0\" d=\"0\"/></elevationProfile>\n";
101 device <<
" <lateralProfile/>\n";
102 device <<
" <lanes>\n";
103 device <<
" <laneSection s=\"0\">\n";
105 device <<
" <right>\n";
107 device <<
" <lane id=\"-" << e->
getNumLanes() - j <<
"\" type=\"driving\" level=\"0\">\n";
108 device <<
" <link>\n";
109 device <<
" <predecessor id=\"-1\"/>\n";
110 device <<
" <successor id=\"-1\"/>\n";
111 device <<
" </link>\n";
112 device <<
" <width sOffset=\"0\" a=\"" << e->
getLaneWidth(j) <<
"\" b=\"0\" c=\"0\" d=\"0\"/>\n";
113 std::string markType =
"broken";
117 device <<
" <roadMark sOffset=\"0\" type=\"" << markType <<
"\" weight=\"standard\" color=\"standard\" width=\"0.13\"/>\n";
118 device <<
" <speed sOffset=\"0\" max=\"" << lanes[j].speed <<
"\"/>\n";
119 device <<
" </lane>\n";
121 device <<
" </right>\n";
122 device <<
" </laneSection>\n";
123 device <<
" </lanes>\n";
124 device <<
" <objects/>\n";
125 device <<
" <signals/>\n";
126 device <<
" </road>\n";
130 for (std::map<std::string, NBNode*>::const_iterator i = nc.
begin(); i != nc.
end(); ++i) {
133 for (std::vector<NBEdge*>::const_iterator j = incoming.begin(); j != incoming.end(); ++j) {
134 const std::vector<NBEdge::Connection>& elv = (*j)->getConnections();
135 for (std::vector<NBEdge::Connection>::const_iterator k = elv.begin(); k != elv.end(); ++k) {
136 if ((*k).toEdge == 0) {
153 device <<
" <link>\n";
154 device <<
" <predecessor elementType=\"road\" elementId=\"" <<
getID((*j)->getID(), edgeMap, edgeID) <<
"\"/>\n";
155 device <<
" <successor elementType=\"road\" elementId=\"" <<
getID((*k).toEdge->getID(), edgeMap, edgeID) <<
"\"/>\n";
156 device <<
" </link>\n";
157 device <<
" <type s=\"0\" type=\"town\"/>\n";
159 device <<
" <elevationProfile><elevation s=\"0\" a=\"0\" b=\"0\" c=\"0\" d=\"0\"/></elevationProfile>\n";
160 device <<
" <lateralProfile/>\n";
161 device <<
" <lanes>\n";
162 device <<
" <laneSection s=\"0\">\n";
164 device <<
" <right>\n";
165 device <<
" <lane id=\"-1\" type=\"driving\" level=\"0\">\n";
166 device <<
" <link>\n";
167 device <<
" <predecessor id=\"-" << (*j)->getNumLanes() - c.
fromLane <<
"\"/>\n";
169 device <<
" </link>\n";
170 device <<
" <width sOffset=\"0\" a=\"" << width <<
"\" b=\"0\" c=\"0\" d=\"0\"/>\n";
171 device <<
" <roadMark sOffset=\"0\" type=\"none\" weight=\"standard\" color=\"standard\" width=\"0.13\"/>\n";
172 device <<
" </lane>\n";
173 device <<
" </right>\n";
174 device <<
" </laneSection>\n";
175 device <<
" </lanes>\n";
176 device <<
" <objects/>\n";
177 device <<
" <signals/>\n";
178 device <<
" </road>\n";
184 for (std::map<std::string, NBNode*>::const_iterator i = nc.
begin(); i != nc.
end(); ++i) {
186 device <<
" <junction name=\"" << n->
getID() <<
"\" id=\"" <<
getID(n->
getID(), nodeMap, nodeID) <<
"\">\n";
187 unsigned int index = 0;
189 for (std::vector<NBEdge*>::const_iterator j = incoming.begin(); j != incoming.end(); ++j) {
190 const std::vector<NBEdge::Connection>& elv = (*j)->getConnections();
191 for (std::vector<NBEdge::Connection>::const_iterator k = elv.begin(); k != elv.end(); ++k) {
192 if ((*k).toEdge == 0) {
195 device <<
" <connection id=\"" << index <<
"\" incomingRoad=\"" <<
getID((*j)->getID(), edgeMap, edgeID)
196 <<
"\" connectingRoad=\"" <<
getID((*k).getInternalLaneID(), edgeMap, edgeID) <<
"\" contactPoint=\"start\"/>\n";
200 device <<
" </junction>\n";
203 device <<
"</OpenDRIVE>\n";
210 device <<
" <planView>\n";
212 for (
unsigned int j = 0; j < shape.size() - 1; ++j) {
216 device <<
" <geometry s=\"" << offset <<
"\" x=\"" << p.
x() <<
"\" y=\"" << p.
y() <<
"\" hdg=\"" << hdg <<
"\" length=\"" << l.
length() <<
"\"><line/></geometry>\n";
219 device <<
" </planView>\n";
225 device <<
" <center>\n";
226 device <<
" <lane id=\"0\" type=\"none\" level= \"0\">\n";
227 device <<
" <link/>\n";
228 device <<
" <roadMark sOffset=\"0\" type=\"" << mark <<
"\" weight=\"standard\" color=\"standard\" width=\"" << markWidth <<
"\"/>\n";
229 device <<
" <width sOffset=\"0\" a=\"0\" b=\"0\" c=\"0\" d=\"0\"/>\n";
230 device <<
" </lane>\n";
231 device <<
" </center>\n";
238 return map.
get(origID);
240 map.
insert(origID, lastID++);
static void writePlanView(const PositionVector &shape, OutputDevice &device)
const PositionVector & getLaneShape(unsigned int i) const
Returns the shape of the nth lane.
const Position & p2() const
const EdgeVector & getIncomingEdges() const
Returns this node's incoming edges.
A structure which describes a connection between edges or lanes.
int toLane
The lane the connections yields in.
const SUMOReal SUMO_const_laneWidth
NBEdge * toEdge
The edge the connections yields in.
bool hasString(const std::string &str) const
SUMOReal ymin() const
Returns minimum y-coordinate.
const std::vector< NBEdge::Lane > & getLanes() const
Returns the lane definitions.
The representation of a single edge during network building.
static std::string escapeXML(const std::string &orig)
Replaces the standard escapes by their XML entities.
SUMOReal xmin() const
Returns minimum x-coordinate.
SUMOReal getLaneWidth() const
Returns the default width of lanes of this edge.
SUMOReal x() const
Returns the x-position.
SUMOReal xmax() const
Returns maximum x-coordinate.
A class that stores a 2D geometrical boundary.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
const std::string & getID() const
Returns the id.
void insert(const std::string str, const T key, bool checkDuplicates=true)
unsigned int size() const
Returns the number of known nodes.
Line lineAt(int pos) const
const Position & p1() const
static void writeNetwork(const OptionsCont &oc, NBNetBuilder &nb)
Writes the network into a openDRIVE-file.
std::map< std::string, NBEdge * >::const_iterator end() const
Returns the pointer to the end of the stored edges.
std::string getInternalLaneID() const
int fromLane
The lane the connections starts at.
A point in 2D or 3D with translation and scaling methods.
NBEdgeCont & getEdgeCont()
Returns the edge container.
unsigned int getNumLanes() const
Returns the number of lanes.
static void writeEmptyCenterLane(OutputDevice &device, const std::string &mark, SUMOReal markWidth)
Storage for edges, including some functionality operating on multiple edges.
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::map< std::string, NBEdge * >::const_iterator begin() const
Returns the pointer to the begin of the stored edges.
SUMOReal length() const
Returns the length.
NBNode * getToNode() const
Returns the destination node of the edge.
NBNodeCont & getNodeCont()
Returns the node container.
Instance responsible for building networks.
static OutputDevice & getDevice(const std::string &name)
Returns the described OutputDevice.
SUMOReal y() const
Returns the y-position.
A storage for options typed value containers)
static const GeoConvHelper & getFinal()
the coordinate transformation for writing the location element and for tracking the original coordina...
Represents a single node (junction) during network building.
T get(const std::string &str) const
void move2side(SUMOReal amount)
Static storage of an output device and its base (abstract) implementation.
SUMOReal ymax() const
Returns maximum y-coordinate.
Container for nodes during the netbuilding process.
static int getID(const std::string &origID, StringBijection< int > &map, int &lastID)
const std::string & getStreetName() const
Returns the street name of this edge.
void append(const PositionVector &v)
std::map< std::string, NBNode * >::const_iterator begin() const
Returns the pointer to the begin of the stored nodes.
unsigned int size() const
Returns the number of edges.
SUMOReal getLength() const
Returns the computed length of the edge.
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
NBNode * getFromNode() const
Returns the origin node of the edge.