41 #ifdef CHECK_MEMORY_LEAKS
43 #endif // CHECK_MEMORY_LEAKS
56 if (!oc.
isSet(
"opendrive-output")) {
66 device <<
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
67 device <<
"<OpenDRIVE>\n";
68 device <<
" <header revMajor=\"1\" revMinor=\"3\" name=\"\" version=\"1.00\" date=\"!!!\" north=\"0.0000000000000000e+00\" south=\"0.0000000000000000e+00\" east=\"0.0000000000000000e+00\" west=\"0.0000000000000000e+00\" maxRoad=\"517\" maxJunc=\"2\" maxPrg=\"0\"/>\n";
71 for (std::map<std::string, NBEdge*>::const_iterator i = ec.
begin(); i != ec.
end(); ++i) {
72 const NBEdge* e = (*i).second;
73 device <<
" <road name=\"" << e->
getStreetName() <<
"\" length=\"" << e->
getLength() <<
"\" id=\"" <<
getID(e->
getID(), edgeMap, edgeID) <<
"\" junction=\"-1\">\n";
74 device <<
" <link>\n";
75 device <<
" <predecessor elementType=\"junction\" elementId=\"" <<
getID(e->
getFromNode()->
getID(), nodeMap, nodeID) <<
"\"/>\n";
76 device <<
" <successor elementType=\"junction\" elementId=\"" <<
getID(e->
getToNode()->
getID(), nodeMap, nodeID) <<
"\"/>\n";
77 device <<
" </link>\n";
78 device <<
" <type s=\"0\" type=\"town\"/>\n";
80 device <<
" <elevationProfile><elevation s=\"0\" a=\"0\" b=\"0\" c=\"0\" d=\"0\"/></elevationProfile>\n";
81 device <<
" <lateralProfile></lateralProfile>\n";
82 device <<
" <lanes>\n";
83 device <<
" <laneSection s=\"0\">\n";
85 device <<
" <right>\n";
86 const std::vector<NBEdge::Lane> &lanes = e->
getLanes();
88 device <<
" <lane id=\"-" << e->
getNumLanes() - j <<
"\" type=\"driving\" level=\"0\">\n";
89 device <<
" <link>\n";
90 device <<
" <predecessor id=\"-1\"/>\n";
91 device <<
" <successor id=\"-1\"/>\n";
92 device <<
" </link>\n";
94 device <<
" <width sOffset=\"0\" a=\"" << width <<
"\" b=\"0\" c=\"0\" d=\"0\"/>\n";
95 std::string markType =
"broken";
99 device <<
" <roadMark sOffset=\"0\" type=\"" << markType <<
"\" weight=\"standard\" color=\"standard\" width=\"0.13\"/>\n";
100 device <<
" </lane>\n";
102 device <<
" </right>\n";
103 device <<
" </laneSection>\n";
104 device <<
" </lanes>\n";
105 device <<
" <objects></objects>\n";
106 device <<
" <signals></signals>\n";
107 device <<
" </road>\n";
112 for (std::map<std::string, NBNode*>::const_iterator i = nc.
begin(); i != nc.
end(); ++i) {
115 for (std::vector<NBEdge*>::const_iterator j = incoming.begin(); j != incoming.end(); ++j) {
116 const std::vector<NBEdge::Connection> &elv = (*j)->getConnections();
117 for (std::vector<NBEdge::Connection>::const_iterator k = elv.begin(); k != elv.end(); ++k) {
118 if ((*k).toEdge == 0) {
126 device <<
" <road name=\"" << c.
id <<
"\" length=\"" << shape.
length() <<
"\" id=\"" <<
getID(c.
id, edgeMap, edgeID) <<
"\" junction=\"" <<
getID(n->
getID(), nodeMap, nodeID) <<
"\">\n";
127 device <<
" <link>\n";
128 device <<
" <predecessor elementType=\"road\" elementId=\"" <<
getID((*j)->getID(), edgeMap, edgeID) <<
"\"/>\n";
129 device <<
" <successor elementType=\"road\" elementId=\"" <<
getID((*k).toEdge->getID(), edgeMap, edgeID) <<
"\"/>\n";
130 device <<
" </link>\n";
131 device <<
" <type s=\"0\" type=\"town\"/>\n";
133 device <<
" <elevationProfile><elevation s=\"0\" a=\"0\" b=\"0\" c=\"0\" d=\"0\"/></elevationProfile>\n";
134 device <<
" <lateralProfile></lateralProfile>\n";
135 device <<
" <lanes>\n";
136 device <<
" <laneSection s=\"0\">\n";
138 device <<
" <right>\n";
139 device <<
" <lane id=\"-1\" type=\"driving\" level=\"0\">\n";
140 device <<
" <link>\n";
143 device <<
" </link>\n";
144 device <<
" <width sOffset=\"0\" a=\"" <<
SUMO_const_laneWidth <<
"\" b=\"0\" c=\"0\" d=\"0\"/>\n";
145 device <<
" <roadMark sOffset=\"0\" type=\"broken\" weight=\"standard\" color=\"standard\" width=\"0.13\"/>\n";
146 device <<
" </lane>\n";
147 device <<
" </right>\n";
148 device <<
" </laneSection>\n";
149 device <<
" </lanes>\n";
150 device <<
" <objects></objects>\n";
151 device <<
" <signals></signals>\n";
152 device <<
" </road>\n";
158 for (std::map<std::string, NBNode*>::const_iterator i = nc.
begin(); i != nc.
end(); ++i) {
160 device <<
" <junction name=\"" << n->
getID() <<
"\" id=\"" <<
getID(n->
getID(), nodeMap, nodeID) <<
"\">\n";
161 unsigned int index = 0;
163 for (std::vector<NBEdge*>::const_iterator j = incoming.begin(); j != incoming.end(); ++j) {
164 const std::vector<NBEdge::Connection> &elv = (*j)->getConnections();
165 for (std::vector<NBEdge::Connection>::const_iterator k = elv.begin(); k != elv.end(); ++k) {
166 if ((*k).toEdge == 0) {
169 device <<
" <connection id=\"" << index <<
"\" incomingRoad=\"" <<
getID((*j)->getID(), edgeMap, edgeID)
170 <<
"\" connectingRoad=\"" <<
getID((*k).id, edgeMap, edgeID) <<
"\" contactPoint=\"start\"/>\n";
174 device <<
" </junction>\n";
177 device <<
"</OpenDRIVE>\n";
184 device <<
" <planView>\n";
186 for (
unsigned int j = 0; j < shape.
size() - 1; ++j) {
190 device <<
" <geometry s=\"" << offset <<
"\" x=\"" << p.
x() <<
"\" y=\"" << p.
y() <<
"\" hdg=\"" << hdg <<
"\" length=\"" << l.
length() <<
"\"><line/></geometry>\n";
193 device <<
" </planView>\n";
199 device <<
" <center>\n";
200 device <<
" <lane id=\"0\" type=\"none\" level= \"0\">\n";
201 device <<
" <link></link>\n";
202 device <<
" <roadMark sOffset=\"0\" type=\"solid\" weight=\"standard\" color=\"standard\" width=\"0.13\"/>\n";
203 device <<
" <width sOffset=\"0\" a=\"0\" b=\"0\" c=\"0\" d=\"0\"/>\n";
204 device <<
" </lane>\n";
205 device <<
" </center>\n";
212 return map.
get(origID);
214 map.
insert(origID, lastID++);