|
@@ -436,3 +436,68 @@ int CDAProc::ProcRoads(std::string strxlsxpath,std::string stroutpath)
|
|
|
ServiceExcelAPI.Closexlsx(pexcel);
|
|
|
return nr;
|
|
|
}
|
|
|
+
|
|
|
+int CDAProc::ProcCDA(iv::map::cdadraw & xcdadraw,OpenDrive * pxodr)
|
|
|
+{
|
|
|
+ if(xcdadraw.mgeos_size() == 0)
|
|
|
+ {
|
|
|
+ std::cout<<" no geo. "<<std::endl;
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ int i;
|
|
|
+ double xnow,ynow,hdgnow;
|
|
|
+ xnow = 0;
|
|
|
+ ynow = 0;
|
|
|
+ hdgnow = 0;
|
|
|
+ int nroadid = 0;
|
|
|
+ for(i=0;i<xcdadraw.mgeos_size();i++)
|
|
|
+ {
|
|
|
+ iv::map::cdageo * pgeo = xcdadraw.mutable_mgeos(i);
|
|
|
+ if(pgeo->geotype() == 0)
|
|
|
+ {
|
|
|
+ nroadid++;
|
|
|
+ char strroadid[256];
|
|
|
+ snprintf(strroadid,256,"%d",nroadid);
|
|
|
+ pxodr->AddRoad("zl",pgeo->geolen(),strroadid,"-1");
|
|
|
+ Road * pRoad = pxodr->GetLastAddedRoad();
|
|
|
+ pRoad->AddGeometryBlock();
|
|
|
+ GeometryBlock * pgeob = pRoad->GetLastAddedGeometryBlock();
|
|
|
+ pgeob->AddGeometryLine(0,xnow,ynow,hdgnow,pgeo->geolen());
|
|
|
+ pRoad->GetGeometryCoords(pgeo->geolen()-0.001,xnow,ynow,hdgnow);
|
|
|
+ }
|
|
|
+ if(pgeo->geotype() == 1)
|
|
|
+ {
|
|
|
+ nroadid++;
|
|
|
+ char strroadid[256];
|
|
|
+ snprintf(strroadid,256,"%d",nroadid);
|
|
|
+ pxodr->AddRoad("wd",pgeo->geolen(),strroadid,"-1");
|
|
|
+ Road * pRoad = pxodr->GetLastAddedRoad();
|
|
|
+ pRoad->AddGeometryBlock();
|
|
|
+ GeometryBlock * pgeob = pRoad->GetLastAddedGeometryBlock();
|
|
|
+ pgeob->AddGeometryArc(0,xnow,ynow,hdgnow,pgeo->geolen(),1.0/pgeo->georadius());
|
|
|
+ pRoad->GetGeometryCoords(pgeo->geolen()-0.001,xnow,ynow,hdgnow);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ for(i=0;i<pxodr->GetRoadCount();i++)
|
|
|
+ {
|
|
|
+ Road * pRoad = pxodr->GetRoad(i);
|
|
|
+ pRoad->AddLaneSection(0);
|
|
|
+ LaneSection * pLS = pRoad->GetLaneSection(0);
|
|
|
+ pLS->AddLane(0,0,"none",false);
|
|
|
+ Lane * pcenterlane = pLS->GetLastAddedLane();
|
|
|
+ pcenterlane->AddRoadMarkRecord(0,"solid","standard","yellow",0.15,"none");
|
|
|
+
|
|
|
+ int i;
|
|
|
+ for(i=0;i<2;i++)
|
|
|
+ {
|
|
|
+ pLS->AddLane(-1,(i+1)*(-1),"driving",false,true);
|
|
|
+ Lane * pnewlane = pLS->GetLastAddedLane();
|
|
|
+ pnewlane->AddWidthRecord(0,3.5,0,0,0);
|
|
|
+
|
|
|
+ pnewlane->AddRoadMarkRecord(0,"solid","standard","standard",0.15,"none");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|