trace2vectormap.cpp 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. #include "trace2vectormap.h"
  2. #include <QFile>
  3. #include <iostream>
  4. #include "math/gnss_coordinate_convert.h"
  5. trace2vectormap::trace2vectormap(iv::trace2vectormap_param xparam)
  6. {
  7. mparam = xparam;
  8. }
  9. void trace2vectormap::llh2xyy(double flon, double flat, double fhead, double & x, double & y, double & fyaw, double flon0, double flat0)
  10. {
  11. double x_o,y_o;
  12. double x_now,y_now;
  13. GaussProjCal(flon0,flat0,&x_o,&y_o);
  14. GaussProjCal(flon,flat,&x_now,&y_now);
  15. x = x_now - x_o;
  16. y = y_now - y_o;
  17. fyaw = (90 - fhead)*M_PI/180.0;
  18. }
  19. int trace2vectormap::convert()
  20. {
  21. iv::trace2vectormap_param xparam = mparam;
  22. QFile xFile;
  23. xFile.setFileName(xparam.strtracefilepath.data());
  24. if(!xFile.open(QIODevice::ReadOnly))
  25. {
  26. return -1;
  27. }
  28. QByteArray ba = xFile.readAll();
  29. QList<QByteArray> baline =ba.split('\n');//x.split(QRegExp("\n ")) ;//ba.split('\n');
  30. int nline = baline.size();
  31. int i;
  32. int npid = 1;
  33. std::vector<iv::vectormap::point> xvectorpoint;
  34. std::vector<iv::vectormap::node> xvectornode;
  35. std::vector<iv::vectormap::lane> xvectorlane;
  36. std::vector<iv::vectormap::line> xvectorline;
  37. std::vector<iv::vectormap::whiteline> xvectorwhiteline;
  38. for(i=0;i<nline;i++)
  39. {
  40. QString x(baline[i]);
  41. // QList<QByteArray> badata = baline[i].split('\t');
  42. QStringList badata = x.split(QRegExp("[\t ,;]"));
  43. if(badata.size()>=10)
  44. {
  45. double flon = QString(badata[1]).toDouble();
  46. double flat = QString(badata[2]).toDouble();
  47. double fheading = QString(badata[5]).toDouble();
  48. // std::cout<<"lat: "<<flat<<" lon:"<<flon<<" heading:"<<fheading<<std::endl;
  49. double x,y,fyaw;
  50. llh2xyy(flon,flat,fheading,x,y,fyaw,xparam.fLon0,xparam.fLat0);
  51. iv::vectormap::point xpoint;
  52. xpoint.pid = npid;
  53. xpoint.bx = y;
  54. xpoint.ly = x;
  55. xpoint.fyaw = fyaw;
  56. xpoint.h = 0;
  57. npid++;
  58. xvectorpoint.push_back(xpoint);
  59. }
  60. }
  61. int npointsize = xvectorpoint.size();
  62. for(i=0;i<npointsize;i++)
  63. {
  64. iv::vectormap::node xnode;
  65. xnode.nid = i;
  66. xnode.pid = xvectorpoint[i].pid;
  67. xvectornode.push_back(xnode);
  68. }
  69. int nnodesize = xvectornode.size();
  70. for(i=1;i<nnodesize;i++)
  71. {
  72. iv::vectormap::lane xlane;
  73. xlane.bnid = xvectornode[i-1].nid;
  74. xlane.fnid = xvectornode[i].nid;
  75. xlane.lnid = i;
  76. xlane.did = i;
  77. xlane.span = xparam.fSpan;
  78. xlane.lcnt = xparam.Lcnt;
  79. xlane.lno = xparam.Lno;
  80. xlane.blid = 0;
  81. xlane.flid = 0;
  82. xvectorlane.push_back(xlane);
  83. }
  84. int nlanesize = xvectorlane.size();
  85. for(i=1;i<nlanesize;i++)
  86. {
  87. xvectorlane[i-1].flid = xvectorlane[i].lnid;
  88. xvectorlane[i].blid = xvectorlane[i-1].lnid;
  89. }
  90. for(i=0;i<npointsize;i++)
  91. {
  92. iv::vectormap::point xpoint;
  93. xpoint = xvectorpoint[i];
  94. xpoint.bx = xpoint.bx + xparam.fDisLeft * sin(xpoint.fyaw + M_PI/2.0);
  95. xpoint.ly = xpoint.ly + xparam.fDisLeft * cos(xpoint.fyaw + M_PI/2.0);
  96. xpoint.pid = npid;
  97. npid++;
  98. xvectorpoint.push_back(xpoint);
  99. }
  100. for(i=0;i<npointsize;i++)
  101. {
  102. iv::vectormap::point xpoint;
  103. xpoint = xvectorpoint[i];
  104. xpoint.bx = xpoint.bx + xparam.fDisLeft * sin(xpoint.fyaw - M_PI/2.0);
  105. xpoint.ly = xpoint.ly + xparam.fDisLeft * cos(xpoint.fyaw - M_PI/2.0);
  106. xpoint.pid = npid;
  107. npid++;
  108. xvectorpoint.push_back(xpoint);
  109. }
  110. int nnowwhiteid = 1;
  111. for(i=1;i<npointsize;i++)
  112. {
  113. iv::vectormap::line xline;
  114. xline.lid = i;
  115. xline.bpid = xvectorpoint[i-1+npointsize].pid;
  116. xline.fpid = xvectorpoint[i+npointsize].pid;
  117. xline.blid = 0;
  118. xline.flid = 0;
  119. xvectorline.push_back(xline);
  120. iv::vectormap::whiteline xwhiteline;
  121. xwhiteline.id = nnowwhiteid;nnowwhiteid++;
  122. xwhiteline.fwidth = 0.15;
  123. xwhiteline.strcorlor = xparam.strColorLeft;
  124. xwhiteline.lid = xline.lid;
  125. xvectorwhiteline.push_back(xwhiteline);
  126. }
  127. for(i=1;i<(npointsize -1);i++)
  128. {
  129. xvectorline[i-1].flid = xvectorline[i].lid;
  130. xvectorline[i].blid = xvectorline[i-1].lid;
  131. }
  132. for(i=1;i<npointsize;i++)
  133. {
  134. iv::vectormap::line xline;
  135. xline.lid = i + (npointsize-1);
  136. xline.bpid = xvectorpoint[i-1+npointsize*2].pid;
  137. xline.fpid = xvectorpoint[i+npointsize*2].pid;
  138. xline.blid = 0;
  139. xline.flid = 0;
  140. xvectorline.push_back(xline);
  141. iv::vectormap::whiteline xwhiteline;
  142. xwhiteline.id = nnowwhiteid;nnowwhiteid++;
  143. xwhiteline.lid = xline.lid;
  144. xwhiteline.fwidth = 0.15;
  145. xwhiteline.strcorlor = xparam.strColorRight;
  146. xvectorwhiteline.push_back(xwhiteline);
  147. }
  148. for(i=1;i<(npointsize -1);i++)
  149. {
  150. xvectorline[i-1 + npointsize-1].flid = xvectorline[i + npointsize -1].lid;
  151. xvectorline[i + npointsize-1].blid = xvectorline[i-1 + npointsize -1].lid;
  152. }
  153. QString strfolder = xparam.stroutfolder.data();
  154. QFile xFilePoints;
  155. xFilePoints.setFileName(strfolder + "/point.csv");
  156. if(!xFilePoints.open(QIODevice::ReadWrite))
  157. {
  158. qDebug("point file open fail.");
  159. return -2;
  160. }
  161. char strline[1000];
  162. snprintf(strline,1000,"PID,B,L,H,Bx,Ly,ReF,MCODE1,MCODE2,MCODE3\n");
  163. xFilePoints.write(strline);
  164. for(i=0;i<(int)xvectorpoint.size();i++)
  165. {
  166. snprintf(strline,1000,"%d,%d,%d,%f,%f,%f,%d,%d,%d,%d\n",
  167. xvectorpoint[i].pid,0,0,0.0,xvectorpoint[i].bx,xvectorpoint[i].ly,7,0,0,0);
  168. xFilePoints.write(strline);
  169. }
  170. xFilePoints.close();
  171. QFile xFileLine;
  172. xFileLine.setFileName(strfolder + "/line.csv");
  173. if(!xFileLine.open(QIODevice::ReadWrite))
  174. {
  175. qDebug("line file open fail.");
  176. return -3;
  177. }
  178. snprintf(strline,1000,"LID,BPID,FPID,BLID,FLID\n");
  179. xFileLine.write(strline);
  180. int nlinesize = xvectorline.size();
  181. for(i=0;i<nlinesize;i++)
  182. {
  183. snprintf(strline,1000,"%d,%d,%d,%d,%d\n",
  184. xvectorline[i].lid,xvectorline[i].bpid,xvectorline[i].fpid,
  185. xvectorline[i].blid,xvectorline[i].flid);
  186. xFileLine.write(strline);
  187. }
  188. xFileLine.close();
  189. QFile xFileWhiteLine;
  190. xFileWhiteLine.setFileName(strfolder + "/whiteline.csv");
  191. if(!xFileWhiteLine.open(QIODevice::ReadWrite))
  192. {
  193. qDebug("whiteline file open fail.");
  194. return -4;
  195. }
  196. snprintf(strline,1000,"ID,LID,Width,Color,type,LinkID\n");
  197. xFileWhiteLine.write(strline);
  198. int nwhitelinesize = xvectorwhiteline.size();
  199. for(i=0;i<nwhitelinesize;i++)
  200. {
  201. snprintf(strline,1000,"%d,%d,%f,%s,%d,%d\n",
  202. xvectorwhiteline[i].id,xvectorwhiteline[i].lid,0.15,xvectorwhiteline[i].strcorlor.data(),0,0);
  203. xFileWhiteLine.write(strline);
  204. }
  205. xFileWhiteLine.close();
  206. QFile xFileNode;
  207. xFileNode.setFileName(strfolder + "/node.csv");
  208. if(!xFileNode.open(QIODevice::ReadWrite))
  209. {
  210. qDebug(" node file open fail.");
  211. return -5;
  212. }
  213. snprintf(strline,1000,"NID,PID\n");
  214. xFileNode.write(strline);
  215. for(i=0;i<(int)xvectornode.size();i++)
  216. {
  217. snprintf(strline,1000,"%d,%d\n",xvectornode[i].nid,xvectornode[i].pid);
  218. xFileNode.write(strline);
  219. }
  220. xFileNode.close();
  221. QFile xFileLane;
  222. xFileLane.setFileName(strfolder + "/lane.csv");
  223. if(!xFileLane.open(QIODevice::ReadWrite))
  224. {
  225. qDebug(" node file open fail.");
  226. return -6;
  227. }
  228. snprintf(strline,1000,"LnID,DID,BLID,FLID,BNID,FNID,JCT,BLID2,BLID3,BLID4,FLID2,FLID3,FLID4,ClossID,Span,LCnt,Lno,LaneType,LimitVel,RefVel,RoadSecID,LaneChgFG\n");
  229. xFileLane.write(strline);
  230. for(i=0;i<(int)xvectorlane.size();i++)
  231. {
  232. snprintf(strline,1000,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
  233. xvectorlane[i].lnid,xvectorlane[i].did,xvectorlane[i].blid,
  234. xvectorlane[i].flid,xvectorlane[i].bnid,xvectorlane[i].fnid,
  235. 0,0,0,0,
  236. 0,0,0,0,
  237. 1,xvectorlane[i].lcnt,xvectorlane[i].lno,0,
  238. 20,20,0,0);
  239. xFileLane.write(strline);
  240. }
  241. xFileLane.close();
  242. return 0;
  243. }