trace2vectormap.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  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. std::vector<iv::vectormap::dtlane> xvectordtlane;
  39. std::vector<iv::vectormap::area> xvectorarea;
  40. std::vector<iv::vectormap::wayarea> xvectorwayarea;
  41. iv::vectormap::point xlastpoint;
  42. bool bhavelast = false;
  43. for(i=0;i<nline;i++)
  44. {
  45. QString x(baline[i]);
  46. // QList<QByteArray> badata = baline[i].split('\t');
  47. QStringList badata = x.split(QRegExp("[\t ,;]"));
  48. if(badata.size()>=10)
  49. {
  50. double flon = QString(badata[1]).toDouble();
  51. double flat = QString(badata[2]).toDouble();
  52. double fheading = QString(badata[5]).toDouble();
  53. int nspeedmode = QString(badata[7]).toInt();
  54. double fspeed = xparam.fVelLim;
  55. std::map<int,double>::iterator it = xparam.mapmodevel.find(nspeedmode);
  56. if(it !=xparam.mapmodevel.end())
  57. {
  58. fspeed = it->second;
  59. }
  60. // std::cout<<"lat: "<<flat<<" lon:"<<flon<<" heading:"<<fheading<<std::endl;
  61. double x,y,fyaw;
  62. llh2xyy(flon,flat,fheading,x,y,fyaw,xparam.fLon0,xparam.fLat0);
  63. iv::vectormap::point xpoint;
  64. xpoint.pid = npid;
  65. xpoint.bx = y;
  66. xpoint.ly = x;
  67. xpoint.fyaw = fyaw;
  68. xpoint.h = 0;
  69. xpoint.fspeed = fspeed;
  70. if(bhavelast == false)
  71. {
  72. npid++;
  73. xvectorpoint.push_back(xpoint);
  74. xlastpoint = xpoint;
  75. bhavelast = true;
  76. }
  77. else
  78. {
  79. if(sqrt(pow(xlastpoint.bx - xpoint.bx,2)+pow(xlastpoint.ly - xpoint.ly,2))>=0.5)
  80. {
  81. npid++;
  82. xvectorpoint.push_back(xpoint);
  83. xlastpoint = xpoint;
  84. }
  85. }
  86. }
  87. }
  88. if(xvectorpoint.size()<2)return 0;
  89. bool bcircle = false;
  90. iv::vectormap::point xpointstart,xpointend;
  91. xpointstart = xvectorpoint[0];
  92. xpointend = xvectorpoint[xvectorpoint.size() -1];
  93. double fdis = sqrt(pow(xpointstart.bx-xpointend.bx,2)+pow(xpointstart.ly - xpointend.ly,2));
  94. if(fdis<10.0)
  95. {
  96. double fyawdiff = xpointstart.fyaw - xpointend.fyaw;
  97. while(fyawdiff<0)fyawdiff = fyawdiff + 2.0*M_PI;
  98. while(fyawdiff>=(2.0*M_PI))fyawdiff = fyawdiff - 2.0*M_PI;
  99. if((fyawdiff<0.1)||(fyawdiff>(2.0*M_PI -0.1)))
  100. {
  101. std::cout<<" circle mode "<<std::endl;
  102. bcircle = true;
  103. }
  104. }
  105. int npointsize = xvectorpoint.size();
  106. for(i=0;i<npointsize;i++)
  107. {
  108. iv::vectormap::node xnode;
  109. xnode.nid = i;
  110. xnode.pid = xvectorpoint[i].pid;
  111. xnode.fspeed = xvectorpoint[i].fspeed;
  112. xvectornode.push_back(xnode);
  113. }
  114. int nnodesize = xvectornode.size();
  115. for(i=1;i<nnodesize;i++)
  116. {
  117. iv::vectormap::lane xlane;
  118. xlane.bnid = xvectornode[i-1].nid;
  119. xlane.fnid = xvectornode[i].nid;
  120. xlane.lnid = i;
  121. xlane.did = i;
  122. xlane.span = xparam.fSpan;
  123. xlane.lcnt = xparam.Lcnt;
  124. xlane.lno = xparam.Lno;
  125. xlane.blid = 0;
  126. xlane.flid = 0;
  127. xlane.fspeed = xvectornode[i-1].fspeed;
  128. xvectorlane.push_back(xlane);
  129. iv::vectormap::dtlane xdtlane;
  130. xdtlane.did = i;
  131. xdtlane.Dist = xparam.fSpan;
  132. xdtlane.pid = xvectornode[i-1].pid;
  133. xdtlane.Dir = 0;
  134. xdtlane.Apara = 90000000000;
  135. xdtlane.r = 0.0;
  136. xdtlane.slope = 0;
  137. xdtlane.LW = xparam.fDisLeft;
  138. xdtlane.RW = xparam.fDisRight;
  139. xvectordtlane.push_back(xdtlane);
  140. }
  141. int nlanesize = xvectorlane.size();
  142. for(i=1;i<nlanesize;i++)
  143. {
  144. xvectorlane[i-1].flid = xvectorlane[i].lnid;
  145. xvectorlane[i].blid = xvectorlane[i-1].lnid;
  146. }
  147. bcircle = false;
  148. if(bcircle)
  149. {
  150. iv::vectormap::lane xlane;
  151. xlane.bnid = xvectornode[nnodesize-1].nid;
  152. xlane.fnid = xvectornode[0].nid;
  153. xlane.lnid = nnodesize;
  154. xlane.did = nnodesize;
  155. xlane.span = xparam.fSpan;
  156. xlane.lcnt = xparam.Lcnt;
  157. xlane.lno = xparam.Lno;
  158. xlane.blid = xvectorlane[nlanesize-1].lnid;
  159. xlane.flid = xvectorlane[0].lnid;
  160. xvectorlane[0].blid = xlane.lnid;
  161. xvectorlane[nlanesize -1].flid = xlane.lnid;
  162. xlane.fspeed = xvectornode[nnodesize-1].fspeed;
  163. xvectorlane.push_back(xlane);
  164. iv::vectormap::dtlane xdtlane;
  165. xdtlane.did = nnodesize;
  166. xdtlane.Dist = xparam.fSpan;
  167. xdtlane.pid = xvectornode[nnodesize-1].pid;
  168. xdtlane.Dir = 0;
  169. xdtlane.Apara = 90000000000;
  170. xdtlane.r = 0.0;
  171. xdtlane.slope = 0;
  172. xdtlane.LW = xparam.fDisLeft;
  173. xdtlane.RW = xparam.fDisRight;
  174. xvectordtlane.push_back(xdtlane);
  175. }
  176. for(i=0;i<npointsize;i++)
  177. {
  178. iv::vectormap::point xpoint;
  179. xpoint = xvectorpoint[i];
  180. xpoint.bx = xpoint.bx + xparam.fDisLeft * sin(xpoint.fyaw + M_PI/2.0);
  181. xpoint.ly = xpoint.ly + xparam.fDisLeft * cos(xpoint.fyaw + M_PI/2.0);
  182. xpoint.pid = npid;
  183. npid++;
  184. xvectorpoint.push_back(xpoint);
  185. }
  186. for(i=0;i<npointsize;i++)
  187. {
  188. iv::vectormap::point xpoint;
  189. xpoint = xvectorpoint[i];
  190. xpoint.bx = xpoint.bx + xparam.fDisRight * sin(xpoint.fyaw - M_PI/2.0);
  191. xpoint.ly = xpoint.ly + xparam.fDisRight * cos(xpoint.fyaw - M_PI/2.0);
  192. xpoint.pid = npid;
  193. npid++;
  194. xvectorpoint.push_back(xpoint);
  195. }
  196. int nnowwhiteid = 1;
  197. for(i=1;i<npointsize;i++)
  198. {
  199. iv::vectormap::line xline;
  200. xline.lid = i;
  201. xline.bpid = xvectorpoint[i-1+npointsize].pid;
  202. xline.fpid = xvectorpoint[i+npointsize].pid;
  203. xline.blid = 0;
  204. xline.flid = 0;
  205. xvectorline.push_back(xline);
  206. iv::vectormap::whiteline xwhiteline;
  207. xwhiteline.id = nnowwhiteid;nnowwhiteid++;
  208. xwhiteline.fwidth = 0.15;
  209. xwhiteline.strcorlor = xparam.strColorLeft;
  210. xwhiteline.lid = xline.lid;
  211. xvectorwhiteline.push_back(xwhiteline);
  212. }
  213. for(i=1;i<(npointsize -1);i++)
  214. {
  215. xvectorline[i-1].flid = xvectorline[i].lid;
  216. xvectorline[i].blid = xvectorline[i-1].lid;
  217. }
  218. for(i=1;i<npointsize;i++)
  219. {
  220. iv::vectormap::line xline;
  221. xline.lid = i + (npointsize-1);
  222. xline.bpid = xvectorpoint[i-1+npointsize*2].pid;
  223. xline.fpid = xvectorpoint[i+npointsize*2].pid;
  224. xline.blid = 0;
  225. xline.flid = 0;
  226. xvectorline.push_back(xline);
  227. iv::vectormap::whiteline xwhiteline;
  228. xwhiteline.id = nnowwhiteid;nnowwhiteid++;
  229. xwhiteline.lid = xline.lid;
  230. xwhiteline.fwidth = 0.15;
  231. xwhiteline.strcorlor = xparam.strColorRight;
  232. xvectorwhiteline.push_back(xwhiteline);
  233. }
  234. for(i=1;i<(npointsize -1);i++)
  235. {
  236. xvectorline[i-1 + npointsize-1].flid = xvectorline[i + npointsize -1].lid;
  237. xvectorline[i + npointsize-1].blid = xvectorline[i-1 + npointsize -1].lid;
  238. }
  239. int nlid = (npointsize-1)*2;
  240. int naid = 1;
  241. for(i=1;i<npointsize;i++)
  242. {
  243. int p1id,p2id,p3id,p4id;
  244. p4id = xvectorpoint[i-1+npointsize*1].pid;
  245. p3id = xvectorpoint[i+npointsize*1].pid;
  246. p2id = xvectorpoint[i+npointsize*2].pid;
  247. p1id = xvectorpoint[i-1+npointsize*2].pid;
  248. iv::vectormap::area xarea;
  249. xarea.aid = naid;
  250. iv::vectormap::line xline;
  251. xline.lid = nlid;
  252. xline.bpid = p4id;
  253. xline.fpid = p3id;
  254. xline.blid = 0;// nlid+3;
  255. xline.flid = nlid+1;
  256. xvectorline.push_back(xline);
  257. nlid++;
  258. xarea.slid = xline.lid;
  259. xline.lid = nlid;
  260. xline.bpid = p3id;
  261. xline.fpid = p2id;
  262. xline.blid = nlid-1;
  263. xline.flid = nlid+1;
  264. xvectorline.push_back(xline);
  265. nlid++;
  266. xline.lid = nlid;
  267. xline.bpid = p2id;
  268. xline.fpid = p1id;
  269. xline.blid = nlid-1;
  270. xline.flid = nlid+1;
  271. xvectorline.push_back(xline);
  272. nlid++;
  273. xline.lid = nlid;
  274. xline.bpid = p1id;
  275. xline.fpid = p4id;
  276. xline.blid = nlid-1;
  277. xline.flid =0;//nlid-3;
  278. xvectorline.push_back(xline);
  279. nlid++;
  280. xarea.elid = xline.lid;
  281. xvectorarea.push_back(xarea);
  282. naid++;
  283. iv::vectormap::wayarea xwayarea;
  284. xwayarea.waid = i;
  285. xwayarea.aid = xarea.aid;
  286. xvectorwayarea.push_back(xwayarea);
  287. }
  288. /*
  289. for(i=1;i<npointsize;i++)
  290. {
  291. iv::vectormap::line xline;
  292. xline.lid = i + (npointsize-1)*2;
  293. // xline.bpid = xvectorpoint[i+npointsize*2].pid;
  294. // xline.fpid = xvectorpoint[i-1+npointsize*2].pid;
  295. xline.bpid = xvectorpoint[i+npointsize*0].pid;
  296. xline.fpid = xvectorpoint[i-1+npointsize*0].pid;
  297. xline.blid = 0;
  298. xline.flid = 0;
  299. xvectorline.push_back(xline);
  300. }
  301. for(i=1;i<(npointsize -1);i++)
  302. {
  303. xvectorline[i-1 + (npointsize-1)*2].blid = xvectorline[i + (npointsize -1)*2].lid;
  304. xvectorline[i + (npointsize-1)*2].flid = xvectorline[i-1 + (npointsize -1)*2].lid;
  305. }
  306. for(i=0;i<(npointsize-1);i++)
  307. {
  308. iv::vectormap::area xarea;
  309. xarea.aid = i+1;
  310. xarea.slid = xvectorline[i+(npointsize-1)*1].lid;
  311. xarea.elid = xvectorline[i+(npointsize-1)*2].lid;
  312. xarea.slid = xvectorline[i+(npointsize-1)*1].lid;
  313. xarea.elid = xvectorline[i+(npointsize-1)*2].lid;
  314. xvectorarea.push_back(xarea);
  315. iv::vectormap::wayarea xwayarea;
  316. xwayarea.waid = i+1;
  317. xwayarea.aid = xarea.aid;
  318. xvectorwayarea.push_back(xwayarea);
  319. }
  320. */
  321. if(bcircle)
  322. {
  323. iv::vectormap::line xline;
  324. xline.lid = (npointsize-1)*3+1;
  325. xline.bpid = xvectorpoint[npointsize-1+npointsize].pid;
  326. xline.fpid = xvectorpoint[npointsize].pid;
  327. xline.blid = xvectorline[npointsize-1 -1].lid;
  328. xvectorline[npointsize-1 -1].flid = xline.lid;
  329. xline.flid = xvectorline[0].lid;
  330. xvectorline[0].blid = xline.lid;
  331. xvectorline.push_back(xline);
  332. iv::vectormap::whiteline xwhiteline;
  333. xwhiteline.id = nnowwhiteid;nnowwhiteid++;
  334. xwhiteline.fwidth = 0.15;
  335. xwhiteline.strcorlor = xparam.strColorLeft;
  336. xwhiteline.lid = xline.lid;
  337. xvectorwhiteline.push_back(xwhiteline);
  338. xline.lid = (npointsize-1)*3+2;
  339. xline.bpid = xvectorpoint[npointsize-1+npointsize*2].pid;
  340. xline.fpid = xvectorpoint[0+npointsize*2].pid;
  341. xline.blid = xvectorline[npointsize-1-1 + (npointsize-1)].lid;
  342. xvectorline[npointsize-1-1 + (npointsize-1)].flid = xline.lid;
  343. xline.flid = xvectorline[npointsize-1].lid;
  344. xvectorline[npointsize-1].blid = xline.lid;
  345. xvectorline.push_back(xline);
  346. xwhiteline.id = nnowwhiteid;nnowwhiteid++;
  347. xwhiteline.fwidth = 0.15;
  348. xwhiteline.strcorlor = xparam.strColorLeft;
  349. xwhiteline.lid = xline.lid;
  350. xvectorwhiteline.push_back(xwhiteline);
  351. xline.lid = (npointsize-1)*3+3;
  352. xline.fpid = xvectorpoint[npointsize-1+npointsize*2].pid;
  353. xline.bpid = xvectorpoint[0+npointsize*2].pid;
  354. xline.blid = xvectorline[ (npointsize-1)*2].lid;
  355. xvectorline[ (npointsize-1)*2].flid = xline.lid;
  356. xline.flid = xvectorline[(npointsize-1-1) + (npointsize-1)*2].lid;
  357. xvectorline[(npointsize-1-1) + (npointsize-1)*2].blid = xline.lid;
  358. xvectorline.push_back(xline);
  359. iv::vectormap::area xarea;
  360. xarea.aid = npointsize;
  361. xarea.slid = xvectorline[0+(npointsize-1)*3].lid;
  362. xarea.elid = xvectorline[2+(npointsize-1)*3].lid;
  363. xvectorarea.push_back(xarea);
  364. iv::vectormap::wayarea xwayarea;
  365. xwayarea.waid = npointsize;
  366. xwayarea.aid = xarea.aid;
  367. xvectorwayarea.push_back(xwayarea);
  368. }
  369. QString strfolder = xparam.stroutfolder.data();
  370. QFile xFilePoints;
  371. xFilePoints.setFileName(strfolder + "/point.csv");
  372. if(!xFilePoints.open(QIODevice::ReadWrite))
  373. {
  374. qDebug("point file open fail.");
  375. return -2;
  376. }
  377. char strline[1000];
  378. snprintf(strline,1000,"PID,B,L,H,Bx,Ly,ReF,MCODE1,MCODE2,MCODE3\n");
  379. xFilePoints.write(strline);
  380. for(i=0;i<(int)xvectorpoint.size();i++)
  381. {
  382. snprintf(strline,1000,"%d,%d,%d,%f,%f,%f,%d,%d,%d,%d\n",
  383. xvectorpoint[i].pid,0,0,0.0,xvectorpoint[i].bx,xvectorpoint[i].ly,7,0,0,0);
  384. xFilePoints.write(strline);
  385. }
  386. xFilePoints.close();
  387. QFile xFileLine;
  388. xFileLine.setFileName(strfolder + "/line.csv");
  389. if(!xFileLine.open(QIODevice::ReadWrite))
  390. {
  391. qDebug("line file open fail.");
  392. return -3;
  393. }
  394. snprintf(strline,1000,"LID,BPID,FPID,BLID,FLID\n");
  395. xFileLine.write(strline);
  396. int nlinesize = xvectorline.size();
  397. for(i=0;i<nlinesize;i++)
  398. {
  399. snprintf(strline,1000,"%d,%d,%d,%d,%d\n",
  400. xvectorline[i].lid,xvectorline[i].bpid,xvectorline[i].fpid,
  401. xvectorline[i].blid,xvectorline[i].flid);
  402. xFileLine.write(strline);
  403. }
  404. xFileLine.close();
  405. QFile xFileWhiteLine;
  406. xFileWhiteLine.setFileName(strfolder + "/whiteline.csv");
  407. if(!xFileWhiteLine.open(QIODevice::ReadWrite))
  408. {
  409. qDebug("whiteline file open fail.");
  410. return -4;
  411. }
  412. snprintf(strline,1000,"ID,LID,Width,Color,type,LinkID\n");
  413. xFileWhiteLine.write(strline);
  414. int nwhitelinesize = xvectorwhiteline.size();
  415. for(i=0;i<nwhitelinesize;i++)
  416. {
  417. snprintf(strline,1000,"%d,%d,%f,%s,%d,%d\n",
  418. xvectorwhiteline[i].id,xvectorwhiteline[i].lid,0.15,xvectorwhiteline[i].strcorlor.data(),0,0);
  419. xFileWhiteLine.write(strline);
  420. }
  421. xFileWhiteLine.close();
  422. QFile xFileNode;
  423. xFileNode.setFileName(strfolder + "/node.csv");
  424. if(!xFileNode.open(QIODevice::ReadWrite))
  425. {
  426. qDebug(" node file open fail.");
  427. return -5;
  428. }
  429. snprintf(strline,1000,"NID,PID\n");
  430. xFileNode.write(strline);
  431. for(i=0;i<(int)xvectornode.size();i++)
  432. {
  433. snprintf(strline,1000,"%d,%d\n",xvectornode[i].nid,xvectornode[i].pid);
  434. xFileNode.write(strline);
  435. }
  436. xFileNode.close();
  437. QFile xFileLane;
  438. xFileLane.setFileName(strfolder + "/lane.csv");
  439. if(!xFileLane.open(QIODevice::ReadWrite))
  440. {
  441. qDebug(" lane file open fail.");
  442. return -6;
  443. }
  444. 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");
  445. xFileLane.write(strline);
  446. for(i=0;i<(int)xvectorlane.size();i++)
  447. {
  448. // std::map<int,double>::iterator it = xparam.mapmodevel.find()
  449. snprintf(strline,1000,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f,%d,%d\n",
  450. xvectorlane[i].lnid,xvectorlane[i].did,xvectorlane[i].blid,
  451. xvectorlane[i].flid,xvectorlane[i].bnid,xvectorlane[i].fnid,
  452. 0,0,0,0,
  453. 0,0,0,0,
  454. 1,xvectorlane[i].lcnt,xvectorlane[i].lno,0,
  455. xvectorlane[i].fspeed/3.6,xvectorlane[i].fspeed/3.6,0,1);
  456. xFileLane.write(strline);
  457. }
  458. xFileLane.close();
  459. QFile xFiledtLane;
  460. xFiledtLane.setFileName(strfolder + "/dtlane.csv");
  461. if(!xFiledtLane.open(QIODevice::ReadWrite))
  462. {
  463. qDebug(" dtlane file open fail.");
  464. return -6;
  465. }
  466. snprintf(strline,1000,"DID,Dist,PID,Dir,Apara,r,slope,cant,LW,RW\n");
  467. xFiledtLane.write(strline);
  468. for(i=0;i<(int)xvectordtlane.size();i++)
  469. {
  470. snprintf(strline,1000,"%d,%f,%d,%f,%f,%f,%f,%f,%f,%f\n",
  471. xvectordtlane[i].did,xvectordtlane[i].Dist,xvectordtlane[i].pid,
  472. xvectordtlane[i].Dir,xvectordtlane[i].Apara,xvectordtlane[i].r,
  473. xvectordtlane[i].slope,xvectordtlane[i].cant,xvectordtlane[i].LW,
  474. xvectordtlane[i].RW);
  475. xFiledtLane.write(strline);
  476. }
  477. xFiledtLane.close();
  478. QFile xFileArea;
  479. xFileArea.setFileName((strfolder + "/area.csv"));
  480. if(!xFileArea.open(QIODevice::ReadWrite))
  481. {
  482. std::cout<<" Area File open fail."<<std::endl;
  483. return -7;
  484. }
  485. snprintf(strline,1000,"AID,SLID,ELID\n");
  486. xFileArea.write(strline);
  487. for(i=0;i<(int)xvectorarea.size();i++)
  488. {
  489. snprintf(strline,1000,"%d,%d,%d\n",xvectorarea[i].aid,xvectorarea[i].slid,xvectorarea[i].elid);
  490. xFileArea.write(strline);
  491. }
  492. xFileArea.close();
  493. QFile xFileWayArea;
  494. xFileWayArea.setFileName((strfolder + "/wayarea.csv"));
  495. if(!xFileWayArea.open(QIODevice::ReadWrite))
  496. {
  497. std::cout<<" WayArea File open fail."<<std::endl;
  498. return -8;
  499. }
  500. snprintf(strline,1000,"WAID,AID\n");
  501. xFileWayArea.write(strline);
  502. for(i=0;i<(int)xvectorwayarea.size();i++)
  503. {
  504. snprintf(strline,1000,"%d,%d\n",xvectorwayarea[i].waid,xvectorwayarea[i].aid);
  505. xFileWayArea.write(strline);
  506. }
  507. xFileWayArea.close();
  508. return 0;
  509. }