瀏覽代碼

change map_lanetoxodr. fix cda.

yuchuli 2 年之前
父節點
當前提交
969f697f6b

+ 6 - 6
src/common/common/xodr/OpenDrive/OpenDriveXmlParser.cpp

@@ -887,12 +887,12 @@ bool OpenDriveXmlParser::ReadLane (LaneSection* laneSection, TiXmlElement *node,
 	}
 
 	//Proceed to the Road Mark
-	subNode=node->FirstChildElement("roadMark");
-	while (subNode)
-	{
-		ReadLaneRoadMark(lane, subNode);
-		subNode=subNode->NextSiblingElement("roadMark");
-	}
+    subNode=node->FirstChildElement("roadMark");
+    while (subNode)
+    {
+        ReadLaneRoadMark(lane, subNode);
+        subNode=subNode->NextSiblingElement("roadMark");
+    }
 
 	//Proceed to the Lane Material
 	subNode=node->FirstChildElement("material");

+ 2 - 2
src/tool/map_lanetoxodr/cdamain.cpp

@@ -118,8 +118,8 @@ int main(int argc, char *argv[])
         return 0;
     }
 
-//    snprintf(gstr_inputpath,255,"/home/yuchuli/demodata/cda/lk.xlsx");
-//    snprintf(gstr_outputpath,255,"/home/yuchuli/outputcda.xodr");
+    snprintf(gstr_inputpath,255,"/home/yuchuli/demodata/cda/lk.xlsx");
+    snprintf(gstr_outputpath,255,"/home/yuchuli/outputcda.xodr");
 
     if(strncmp(gstr_inputpath , " ",255) == 0)
     {

+ 4 - 2
src/tool/map_lanetoxodr/cdaproc.pro

@@ -39,7 +39,8 @@ SOURCES += \
     gnss_coordinate_convert.cpp \
     function/cdaproc.cpp \
     ../../include/msgtype/cdadraw.pb.cc \
-    excelapi.cpp
+    excelapi.cpp \
+    function/autoconnect.cpp
 
 
 
@@ -89,6 +90,7 @@ HEADERS += \
     gnss_coordinate_convert.h \
     function/cdaproc.h \
     ../../include/msgtype/cdadraw.pb.h \
-    excelapi.h
+    excelapi.h \
+    function/autoconnect.h
 
 

+ 17 - 1
src/tool/map_lanetoxodr/function/autoconnect.cpp

@@ -486,7 +486,7 @@ static std::vector<iv::roadpoint> getroadpoint(OpenDrive * pxodr)
     }
     for(i=0;i<xvectorroadpoint.size();i++)
     {
-        std::cout<<xvectorroadpoint[i].nRoadID<<" "<<xvectorroadpoint[i].nlane<<" "<<xvectorroadpoint[i].nstart<<" "<<xvectorroadpoint[i].x<<" "<<xvectorroadpoint[i].y<<std::endl;
+//        std::cout<<xvectorroadpoint[i].nRoadID<<" "<<xvectorroadpoint[i].nlane<<" "<<xvectorroadpoint[i].nstart<<" "<<xvectorroadpoint[i].x<<" "<<xvectorroadpoint[i].y<<std::endl;
     }
     return xvectorroadpoint;
 }
@@ -494,6 +494,7 @@ static std::vector<iv::roadpoint> getroadpoint(OpenDrive * pxodr)
 
 static bool IsConn(iv::roadpoint rp1,iv::roadpoint rp2)
 {
+
     if(rp1.nRoadID == rp2.nRoadID)
     {
         return false;
@@ -519,6 +520,11 @@ static bool IsConn(iv::roadpoint rp1,iv::roadpoint rp2)
 //        x = 2;
 //    }
 
+//    if((rp1.nRoadID == 1)&&(rp2.nRoadID == 16))
+//    {
+//        int x = 1;
+//        x++;
+//    }
     double fhdgdiff = rp1.mfhdg - rp2.mfhdg;
     if(fhdgdiff>M_PI)fhdgdiff = fhdgdiff - 2.0*M_PI;
     if(fhdgdiff<(-M_PI))fhdgdiff = fhdgdiff + 2.0*M_PI;
@@ -542,6 +548,7 @@ static std::vector<iv::laneconnect> getlaneconn(std::vector<iv::roadpoint>  xvec
             rp2 = xvectorroadpoint[j];
             if(IsConn(rp1,rp2))
             {
+
                 iv::laneconnect lc;
                 lc.nlaneid1 = rp1.nlane;
                 lc.nlaneid2 = rp2.nlane;
@@ -883,6 +890,13 @@ static Road * GetRoadByID(OpenDrive * pxodr,int nroadid)
 static void ChangeOpenDrive(OpenDrive * pxodr,std::vector<iv::ivjunction> * pxvectorivjunction,std::vector<iv::roadconnect> * pxvectorroadconn)
 {
     unsigned int i;
+
+    for(i=0;i<pxodr->GetRoadCount();i++)
+    {
+        pxodr->GetRoad(i)->RemovePredecessor();
+        pxodr->GetRoad(i)->RemoveSuccessor();
+    }
+
     for(i=0;i<pxvectorivjunction->size();i++)
     {
         bool bnewjunction = true;
@@ -925,6 +939,8 @@ static void ChangeOpenDrive(OpenDrive * pxodr,std::vector<iv::ivjunction> * pxve
             string id = QString::number(pj->GetJunctionConnectionCount()).toStdString();
             string strincomming = QString::number(pivjunctionlink->incommingroad).toStdString();
             string strconnecting = QString::number(pivjunctionlink->connectroad).toStdString();
+
+ //           std::cout<<" incoming: "<<strincomming<<" connecting: "<<strconnecting<<std::endl;
             Road * proad = GetRoadByID(pxodr,pivjunctionlink->connectroad);
             if(proad != 0)
             {

+ 10 - 5
src/tool/map_lanetoxodr/function/cdaproc.cpp

@@ -3,6 +3,8 @@
 #include <iostream>
 #include <math.h>
 
+#include "autoconnect.h"
+
 static std::string cda_lanetype_sel[9] = {"shoulder","border","driving","stop","none","parking","biking","sidewalk",
                                "median"};
 
@@ -353,7 +355,7 @@ int CDAProc::ProcIntersectionRoad(OpenDrive * pxodr,  std::string strtype,std::s
     {
         char strroadid[100];
         snprintf(strroadid,100,"%d",i+5);
-        pxodr->AddRoad("zl",flinelen,strroadid,"-1");
+        pxodr->AddRoad("zl",frightlen,strroadid,"-1");
         Road * pRoad = pxodr->GetLastAddedRoad();
         pRoad->AddGeometryBlock();
         GeometryBlock * pgeob = pRoad->GetLastAddedGeometryBlock();
@@ -423,7 +425,7 @@ int CDAProc::ProcIntersectionRoad(OpenDrive * pxodr,  std::string strtype,std::s
     {
         char strroadid[100];
         snprintf(strroadid,100,"%d",i+13);
-        pxodr->AddRoad("zl",flinelen,strroadid,"-1");
+        pxodr->AddRoad("zl",finsectlen,strroadid,"-1");
         Road * pRoad = pxodr->GetLastAddedRoad();
         pRoad->AddGeometryBlock();
         GeometryBlock * pgeob = pRoad->GetLastAddedGeometryBlock();
@@ -446,9 +448,9 @@ int CDAProc::ProcIntersectionRoad(OpenDrive * pxodr,  std::string strtype,std::s
 //            }
 //            else
 //                pnewlane->AddRoadMarkRecord(0,"broken","standard","standard",0.15,"none");
-            pLS->AddLane(1,(j+1)*(1),"driving",false,true);
-            pnewlane = pLS->GetLastAddedLane();
-            pnewlane->AddWidthRecord(0,flanewidth,0,0,0);
+//            pLS->AddLane(1,(j+1)*(1),"driving",false,true);
+//            pnewlane = pLS->GetLastAddedLane();
+//            pnewlane->AddWidthRecord(0,flanewidth,0,0,0);
 //            if(j == (nlanecount -1))
 //            {
 //                pnewlane->AddRoadMarkRecord(0,"solid","standard","standard",0.15,"none");
@@ -458,6 +460,9 @@ int CDAProc::ProcIntersectionRoad(OpenDrive * pxodr,  std::string strtype,std::s
         }
     }
 
+    AutoConnect ac(pxodr);
+    ac.Connect();
+
 
     return 0;
 }