|
@@ -124,10 +124,13 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
// qDebug("lane count is %d left %d right %d" ,px->GetLaneSection(0)->GetLaneCount(),px->GetLaneSection(0)->GetLeftLaneCount(),
|
|
// qDebug("lane count is %d left %d right %d" ,px->GetLaneSection(0)->GetLaneCount(),px->GetLaneSection(0)->GetLeftLaneCount(),
|
|
// px->GetLaneSection(0)->GetRightLaneCount());
|
|
// px->GetLaneSection(0)->GetRightLaneCount());
|
|
|
|
|
|
int j;
|
|
int j;
|
|
|
|
+
|
|
for(j=0;j<px->GetLaneSectionCount();j++)
|
|
for(j=0;j<px->GetLaneSectionCount();j++)
|
|
{
|
|
{
|
|
if(px->GetLaneSection(j)->GetLaneCount()<2)
|
|
if(px->GetLaneSection(j)->GetLaneCount()<2)
|
|
@@ -136,6 +139,25 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ bool bHaveLeftDrving = false;
|
|
|
|
+ bool bHaveRightDriving = false;
|
|
|
|
+
|
|
|
|
+ unsigned int k;
|
|
|
|
+ for(k=0;k<px->GetLaneSection(j)->GetLaneCount();k++)
|
|
|
|
+ {
|
|
|
|
+ if(px->GetLaneSection(j)->GetLane(k)->GetType() == "driving")
|
|
|
|
+ {
|
|
|
|
+ if(px->GetLaneSection(j)->GetLane(k)->GetId()>0)
|
|
|
|
+ {
|
|
|
|
+ bHaveLeftDrving = true;
|
|
|
|
+ }
|
|
|
|
+ if(px->GetLaneSection(j)->GetLane(k)->GetId()<0)
|
|
|
|
+ {
|
|
|
|
+ bHaveRightDriving = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
if(px->GetLaneSection(j)->GetLeftLaneCount()>0)
|
|
if(px->GetLaneSection(j)->GetLeftLaneCount()>0)
|
|
{
|
|
{
|
|
|
|
|
|
@@ -154,9 +176,9 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
roadedge xroad(atoi(px->GetRoadId().data()),atoi(px->GetRoadJunction().data()),fseclen,1,j,px);
|
|
roadedge xroad(atoi(px->GetRoadId().data()),atoi(px->GetRoadJunction().data()),fseclen,1,j,px);
|
|
// roadedge xroad(atoi(px->GetRoadId().data()),atoi(px->GetRoadJunction().data()),px->GetRoadLength(),1,j,px);
|
|
// roadedge xroad(atoi(px->GetRoadId().data()),atoi(px->GetRoadJunction().data()),px->GetRoadLength(),1,j,px);
|
|
|
|
|
|
-
|
|
|
|
// xroad.mpx = px;
|
|
// xroad.mpx = px;
|
|
- mroadedge.push_back(xroad);
|
|
|
|
|
|
+ if(bHaveLeftDrving)
|
|
|
|
+ mroadedge.push_back(xroad);
|
|
}
|
|
}
|
|
if(px->GetLaneSection(j)->GetRightLaneCount()>0)
|
|
if(px->GetLaneSection(j)->GetRightLaneCount()>0)
|
|
{
|
|
{
|
|
@@ -180,7 +202,8 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
// roadedge xroad(atoi(px->GetRoadId().data()),atoi(px->GetRoadJunction().data()),px->GetRoadLength(),2,j,px);
|
|
// roadedge xroad(atoi(px->GetRoadId().data()),atoi(px->GetRoadJunction().data()),px->GetRoadLength(),2,j,px);
|
|
|
|
|
|
// xroad.mpx = px;
|
|
// xroad.mpx = px;
|
|
- mroadedge.push_back(xroad);
|
|
|
|
|
|
+ if(bHaveRightDriving)
|
|
|
|
+ mroadedge.push_back(xroad);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// qDebug("id = %s juncton = %s ",px->GetRoadId().data(),px->GetRoadJunction().data());
|
|
// qDebug("id = %s juncton = %s ",px->GetRoadId().data(),px->GetRoadJunction().data());
|
|
@@ -401,6 +424,7 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
|
|
|
|
mlanenet.push_back(lnu);
|
|
mlanenet.push_back(lnu);
|
|
iv::vertexsame vx(a,b);
|
|
iv::vertexsame vx(a,b);
|
|
|
|
+
|
|
xvertexsame.push_back(vx);
|
|
xvertexsame.push_back(vx);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -411,10 +435,17 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
|
|
|
|
givlog->debug("After Junction vertex same is %d ",xvertexsame.size());
|
|
givlog->debug("After Junction vertex same is %d ",xvertexsame.size());
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
for(i=0;i<nroadsize;i++)
|
|
for(i=0;i<nroadsize;i++)
|
|
{
|
|
{
|
|
Road * px = mpxodr->GetRoad(i);
|
|
Road * px = mpxodr->GetRoad(i);
|
|
|
|
|
|
|
|
+ if(px->GetRoadId() == "10034")
|
|
|
|
+ {
|
|
|
|
+ int ccc = 1;
|
|
|
|
+ }
|
|
|
|
+
|
|
if(px->GetLaneSectionCount() == 1)
|
|
if(px->GetLaneSectionCount() == 1)
|
|
{
|
|
{
|
|
if(px->GetPredecessor() != 0)
|
|
if(px->GetPredecessor() != 0)
|
|
@@ -446,6 +477,7 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(npre < 0)
|
|
if(npre < 0)
|
|
{
|
|
{
|
|
int nedgepre = getroadedge(nroadpre,2,GetRoadByID(nroadpre)->GetLaneSectionCount()-1);
|
|
int nedgepre = getroadedge(nroadpre,2,GetRoadByID(nroadpre)->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgepre <0)continue;
|
|
lnu.mnFromSection = GetRoadByID(nroadpre)->GetLaneSectionCount()-1;
|
|
lnu.mnFromSection = GetRoadByID(nroadpre)->GetLaneSectionCount()-1;
|
|
a = mroadedge[nedgepre].mvertexend;
|
|
a = mroadedge[nedgepre].mvertexend;
|
|
lnu.mpFromRoad = GetRoadByID(nroadpre);
|
|
lnu.mpFromRoad = GetRoadByID(nroadpre);
|
|
@@ -456,6 +488,7 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgepre = getroadedge(nroadpre,1,GetRoadByID(nroadpre)->GetLaneSectionCount()-1);
|
|
int nedgepre = getroadedge(nroadpre,1,GetRoadByID(nroadpre)->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgepre <0)continue;
|
|
lnu.mnToSection = GetRoadByID(nroadpre)->GetLaneSectionCount()-1;
|
|
lnu.mnToSection = GetRoadByID(nroadpre)->GetLaneSectionCount()-1;
|
|
a = mroadedge[nedgepre].mvertexstart;
|
|
a = mroadedge[nedgepre].mvertexstart;
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
@@ -470,6 +503,7 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(npre < 0)
|
|
if(npre < 0)
|
|
{
|
|
{
|
|
int nedgepre = getroadedge(nroadpre,2);
|
|
int nedgepre = getroadedge(nroadpre,2);
|
|
|
|
+ if(nedgepre <0)continue;
|
|
a = mroadedge[nedgepre].mvertexstart;
|
|
a = mroadedge[nedgepre].mvertexstart;
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpToRoad = GetRoadByID(nroadpre);
|
|
lnu.mpToRoad = GetRoadByID(nroadpre);
|
|
@@ -479,6 +513,7 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgepre = getroadedge(nroadpre,1);
|
|
int nedgepre = getroadedge(nroadpre,1);
|
|
|
|
+ if(nedgepre <0)continue;
|
|
a = mroadedge[nedgepre].mvertexend;
|
|
a = mroadedge[nedgepre].mvertexend;
|
|
lnu.mpFromRoad = GetRoadByID(nroadpre);
|
|
lnu.mpFromRoad = GetRoadByID(nroadpre);
|
|
lnu.mpToRoad = GetRoadByID(nroadcur);
|
|
lnu.mpToRoad = GetRoadByID(nroadcur);
|
|
@@ -489,13 +524,22 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(nid < 0)
|
|
if(nid < 0)
|
|
{
|
|
{
|
|
int nedgecur = getroadedge(nroadcur,2);
|
|
int nedgecur = getroadedge(nroadcur,2);
|
|
|
|
+ if(nedgecur< 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgecur].mvertexstart;
|
|
b = mroadedge[nedgecur].mvertexstart;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgecur = getroadedge(nroadcur,1);
|
|
int nedgecur = getroadedge(nroadcur,1);
|
|
|
|
+ if(nedgecur< 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgecur].mvertexend;
|
|
b = mroadedge[nedgecur].mvertexend;
|
|
}
|
|
}
|
|
|
|
+
|
|
mlanenet.push_back(lnu);
|
|
mlanenet.push_back(lnu);
|
|
iv::vertexsame vx(a,b);
|
|
iv::vertexsame vx(a,b);
|
|
xvertexsame.push_back(vx);
|
|
xvertexsame.push_back(vx);
|
|
@@ -542,6 +586,10 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(nnext < 0)
|
|
if(nnext < 0)
|
|
{
|
|
{
|
|
int nedgenext = getroadedge(nroadnext,2,GetRoadByID(nroadnext)->GetLaneSectionCount()-1);
|
|
int nedgenext = getroadedge(nroadnext,2,GetRoadByID(nroadnext)->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgenext < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgenext].mvertexend;
|
|
b = mroadedge[nedgenext].mvertexend;
|
|
lnu.mnFromSection = GetRoadByID(nroadnext)->GetLaneSectionCount()-1;
|
|
lnu.mnFromSection = GetRoadByID(nroadnext)->GetLaneSectionCount()-1;
|
|
lnu.mpFromRoad = GetRoadByID(nroadnext);
|
|
lnu.mpFromRoad = GetRoadByID(nroadnext);
|
|
@@ -553,6 +601,10 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgenext = getroadedge(nroadnext,1,GetRoadByID(nroadnext)->GetLaneSectionCount()-1);
|
|
int nedgenext = getroadedge(nroadnext,1,GetRoadByID(nroadnext)->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgenext < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgenext].mvertexstart;
|
|
b = mroadedge[nedgenext].mvertexstart;
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mnToSection = GetRoadByID(nroadnext)->GetLaneSectionCount()-1;
|
|
lnu.mnToSection = GetRoadByID(nroadnext)->GetLaneSectionCount()-1;
|
|
@@ -567,6 +619,10 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(nnext < 0)
|
|
if(nnext < 0)
|
|
{
|
|
{
|
|
int nedgenext = getroadedge(nroadnext,2);
|
|
int nedgenext = getroadedge(nroadnext,2);
|
|
|
|
+ if(nedgenext < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgenext].mvertexstart;
|
|
b = mroadedge[nedgenext].mvertexstart;
|
|
|
|
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
@@ -577,6 +633,10 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgenext = getroadedge(nroadnext,1);
|
|
int nedgenext = getroadedge(nroadnext,1);
|
|
|
|
+ if(nedgenext < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgenext].mvertexend;
|
|
b = mroadedge[nedgenext].mvertexend;
|
|
|
|
|
|
lnu.mpFromRoad = GetRoadByID(nroadnext);
|
|
lnu.mpFromRoad = GetRoadByID(nroadnext);
|
|
@@ -588,11 +648,19 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(nid < 0)
|
|
if(nid < 0)
|
|
{
|
|
{
|
|
int nedgecur = getroadedge(nroadcur,2,px->GetLaneSectionCount()-1);
|
|
int nedgecur = getroadedge(nroadcur,2,px->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgecur < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
a = mroadedge[nedgecur].mvertexend;
|
|
a = mroadedge[nedgecur].mvertexend;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgecur = getroadedge(nroadcur,1,px->GetLaneSectionCount() -1);
|
|
int nedgecur = getroadedge(nroadcur,1,px->GetLaneSectionCount() -1);
|
|
|
|
+ if(nedgecur < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
a = mroadedge[nedgecur].mvertexstart;
|
|
a = mroadedge[nedgecur].mvertexstart;
|
|
}
|
|
}
|
|
iv::vertexsame vx(a,b);
|
|
iv::vertexsame vx(a,b);
|
|
@@ -649,6 +717,11 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(npre < 0)
|
|
if(npre < 0)
|
|
{
|
|
{
|
|
int nedgepre = getroadedge(nroadpre,2,pRoad_Pre->GetLaneSectionCount()-1);
|
|
int nedgepre = getroadedge(nroadpre,2,pRoad_Pre->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgepre < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ }
|
|
a = mroadedge[nedgepre].mvertexend;
|
|
a = mroadedge[nedgepre].mvertexend;
|
|
lnu.mpFromRoad = GetRoadByID(nroadpre);
|
|
lnu.mpFromRoad = GetRoadByID(nroadpre);
|
|
lnu.mpToRoad = GetRoadByID(nroadcur);
|
|
lnu.mpToRoad = GetRoadByID(nroadcur);
|
|
@@ -660,6 +733,11 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgepre = getroadedge(nroadpre,1,pRoad_Pre->GetLaneSectionCount()-1);
|
|
int nedgepre = getroadedge(nroadpre,1,pRoad_Pre->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgepre < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ }
|
|
a = mroadedge[nedgepre].mvertexstart;
|
|
a = mroadedge[nedgepre].mvertexstart;
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpToRoad = GetRoadByID(nroadpre);
|
|
lnu.mpToRoad = GetRoadByID(nroadpre);
|
|
@@ -675,6 +753,11 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(npre < 0)
|
|
if(npre < 0)
|
|
{
|
|
{
|
|
int nedgepre = getroadedge(nroadpre,2);
|
|
int nedgepre = getroadedge(nroadpre,2);
|
|
|
|
+ if(nedgepre < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ }
|
|
a = mroadedge[nedgepre].mvertexstart;
|
|
a = mroadedge[nedgepre].mvertexstart;
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpToRoad = GetRoadByID(nroadpre);
|
|
lnu.mpToRoad = GetRoadByID(nroadpre);
|
|
@@ -686,6 +769,11 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgepre = getroadedge(nroadpre,1);
|
|
int nedgepre = getroadedge(nroadpre,1);
|
|
|
|
+ if(nedgepre < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+
|
|
|
|
+ }
|
|
a = mroadedge[nedgepre].mvertexend;
|
|
a = mroadedge[nedgepre].mvertexend;
|
|
lnu.mpFromRoad = GetRoadByID(nroadpre);
|
|
lnu.mpFromRoad = GetRoadByID(nroadpre);
|
|
lnu.mpToRoad = GetRoadByID(nroadcur);
|
|
lnu.mpToRoad = GetRoadByID(nroadcur);
|
|
@@ -698,17 +786,26 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(nid < 0)
|
|
if(nid < 0)
|
|
{
|
|
{
|
|
int nedgecur = getroadedge(nroadcur,2);
|
|
int nedgecur = getroadedge(nroadcur,2);
|
|
|
|
+ if(nedgecur < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgecur].mvertexstart;
|
|
b = mroadedge[nedgecur].mvertexstart;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgecur = getroadedge(nroadcur,1);
|
|
int nedgecur = getroadedge(nroadcur,1);
|
|
|
|
+ if(nedgecur < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgecur].mvertexend;
|
|
b = mroadedge[nedgecur].mvertexend;
|
|
}
|
|
}
|
|
iv::vertexsame vx(a,b);
|
|
iv::vertexsame vx(a,b);
|
|
xvertexsame.push_back(vx);
|
|
xvertexsame.push_back(vx);
|
|
mlanenet.push_back(lnu);
|
|
mlanenet.push_back(lnu);
|
|
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
if(plane->IsSuccessorSet())
|
|
if(plane->IsSuccessorSet())
|
|
{
|
|
{
|
|
@@ -807,6 +904,10 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(nnext < 0)
|
|
if(nnext < 0)
|
|
{
|
|
{
|
|
int nedgenext = getroadedge(nroadnext,2,GetRoadByID(nroadnext)->GetLaneSectionCount()-1);
|
|
int nedgenext = getroadedge(nroadnext,2,GetRoadByID(nroadnext)->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgenext < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgenext].mvertexend;
|
|
b = mroadedge[nedgenext].mvertexend;
|
|
|
|
|
|
lnu.mpFromRoad = GetRoadByID(nroadnext);
|
|
lnu.mpFromRoad = GetRoadByID(nroadnext);
|
|
@@ -819,6 +920,10 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgenext = getroadedge(nroadnext,1,GetRoadByID(nroadnext)->GetLaneSectionCount()-1);
|
|
int nedgenext = getroadedge(nroadnext,1,GetRoadByID(nroadnext)->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgenext < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgenext].mvertexstart;
|
|
b = mroadedge[nedgenext].mvertexstart;
|
|
|
|
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
@@ -835,6 +940,10 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(nnext < 0)
|
|
if(nnext < 0)
|
|
{
|
|
{
|
|
int nedgenext = getroadedge(nroadnext,2);
|
|
int nedgenext = getroadedge(nroadnext,2);
|
|
|
|
+ if(nedgenext < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgenext].mvertexstart;
|
|
b = mroadedge[nedgenext].mvertexstart;
|
|
|
|
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
lnu.mpFromRoad = GetRoadByID(nroadcur);
|
|
@@ -847,6 +956,10 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgenext = getroadedge(nroadnext,1);
|
|
int nedgenext = getroadedge(nroadnext,1);
|
|
|
|
+ if(nedgenext < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
b = mroadedge[nedgenext].mvertexend;
|
|
b = mroadedge[nedgenext].mvertexend;
|
|
|
|
|
|
lnu.mpFromRoad = GetRoadByID(nroadnext);
|
|
lnu.mpFromRoad = GetRoadByID(nroadnext);
|
|
@@ -860,14 +973,24 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
if(nid < 0)
|
|
if(nid < 0)
|
|
{
|
|
{
|
|
int nedgecur = getroadedge(nroadcur,2,px->GetLaneSectionCount()-1);
|
|
int nedgecur = getroadedge(nroadcur,2,px->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgecur < 0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
a = mroadedge[nedgecur].mvertexend;
|
|
a = mroadedge[nedgecur].mvertexend;
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int nedgecur = getroadedge(nroadcur,1,px->GetLaneSectionCount()-1);
|
|
int nedgecur = getroadedge(nroadcur,1,px->GetLaneSectionCount()-1);
|
|
|
|
+ if(nedgecur <0)
|
|
|
|
+ {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
a = mroadedge[nedgecur].mvertexstart;
|
|
a = mroadedge[nedgecur].mvertexstart;
|
|
}
|
|
}
|
|
iv::vertexsame vx(a,b);
|
|
iv::vertexsame vx(a,b);
|
|
|
|
+
|
|
xvertexsame.push_back(vx);
|
|
xvertexsame.push_back(vx);
|
|
mlanenet.push_back(lnu);
|
|
mlanenet.push_back(lnu);
|
|
|
|
|
|
@@ -880,6 +1003,15 @@ xodrdijkstra::xodrdijkstra(OpenDrive * pxodr)
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ int k;
|
|
|
|
+ for(k=0;k<xvertexsame.size();k++)
|
|
|
|
+ {
|
|
|
|
+ if((xvertexsame[k].ma == 0) &&(xvertexsame[k].mb == 127))
|
|
|
|
+ {
|
|
|
|
+ int bbb =1;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
@@ -1160,7 +1292,7 @@ inline double xodrdijkstra::getedgedis(int vs, int vd)
|
|
int i;
|
|
int i;
|
|
|
|
|
|
std::vector<roadedge > * proadedge = &mroadedge;
|
|
std::vector<roadedge > * proadedge = &mroadedge;
|
|
- double dis = std::numeric_limits<double>::max();
|
|
|
|
|
|
+ double dis = 1000000;//std::numeric_limits<double>::max();
|
|
|
|
|
|
for(i=0;i<mvectorvertexedge[vs].mvectorroadedge.size();i++)
|
|
for(i=0;i<mvectorvertexedge[vs].mvectorroadedge.size();i++)
|
|
{
|
|
{
|
|
@@ -1297,6 +1429,7 @@ std::vector<int> xodrdijkstra::getpath(int srcroadid, int nsrclr, int dstroadid,
|
|
|
|
|
|
if(k == -1)
|
|
if(k == -1)
|
|
{
|
|
{
|
|
|
|
+ qDebug("i = %d not found k",i);
|
|
givlog->debug("i = %d not found k",i);
|
|
givlog->debug("i = %d not found k",i);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -1309,7 +1442,8 @@ std::vector<int> xodrdijkstra::getpath(int srcroadid, int nsrclr, int dstroadid,
|
|
{
|
|
{
|
|
double tmp;
|
|
double tmp;
|
|
tmp = getedgedis(k,j);
|
|
tmp = getedgedis(k,j);
|
|
- if(tmp == std::numeric_limits<double>::max())
|
|
|
|
|
|
+ // if(tmp == std::numeric_limits<double>::max())
|
|
|
|
+ if(tmp>500000)
|
|
{
|
|
{
|
|
|
|
|
|
}
|
|
}
|
|
@@ -1330,7 +1464,10 @@ std::vector<int> xodrdijkstra::getpath(int srcroadid, int nsrclr, int dstroadid,
|
|
// qDebug(" shortest(%d, %d)=%f\n", vs, i, dist[i]);
|
|
// qDebug(" shortest(%d, %d)=%f\n", vs, i, dist[i]);
|
|
|
|
|
|
for (i = 0; i < nvertexnum; i++)
|
|
for (i = 0; i < nvertexnum; i++)
|
|
- givlog->debug(" %d =%d\n", i, prev[i]);
|
|
|
|
|
|
+ {
|
|
|
|
+ // qDebug(" %d =%d\n", i, prev[i]);
|
|
|
|
+ // givlog->debug(" %d =%d\n", i, prev[i]);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
if(flag[dstvertex] == 1)
|
|
if(flag[dstvertex] == 1)
|
|
@@ -1342,6 +1479,7 @@ std::vector<int> xodrdijkstra::getpath(int srcroadid, int nsrclr, int dstroadid,
|
|
while(nend != vs)
|
|
while(nend != vs)
|
|
{
|
|
{
|
|
nstart = prev[nend];
|
|
nstart = prev[nend];
|
|
|
|
+ qDebug("vertex:%d",nstart);
|
|
int nedge = getroadedgefromvertex(nstart,nend);
|
|
int nedge = getroadedgefromvertex(nstart,nend);
|
|
if(nedge<0)
|
|
if(nedge<0)
|
|
{
|
|
{
|
|
@@ -1833,10 +1971,14 @@ std::vector<pathsection> xodrdijkstra::getgpspoint(int srcroadid, int nsrclr, in
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- if(pLane2->IsPredecessorSet())
|
|
|
|
|
|
+ if(pLane2->IsSuccessorSet())
|
|
{
|
|
{
|
|
- xpathsection[i].secondsel = pLane2->GetPredecessor();
|
|
|
|
|
|
+ xpathsection[i].secondsel = pLane2->GetSuccessor();
|
|
}
|
|
}
|
|
|
|
+// if(pLane2->IsPredecessorSet())
|
|
|
|
+// {
|
|
|
|
+// xpathsection[i].secondsel = pLane2->GetPredecessor();
|
|
|
|
+// }
|
|
else
|
|
else
|
|
{
|
|
{
|
|
int k;
|
|
int k;
|