dialogparkingspacefromrtk.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #include "dialogparkingspacefromrtk.h"
  2. #include "ui_dialogparkingspacefromrtk.h"
  3. #include "xodrfunc.h"
  4. #include "mainwindow.h"
  5. extern MainWindow * gw;
  6. extern double glon0 ;
  7. extern double glat0;
  8. DialogParkingSpaceFromRTK::DialogParkingSpaceFromRTK(Road * pRoad,QWidget *parent) :
  9. QDialog(parent),
  10. ui(new Ui::DialogParkingSpaceFromRTK)
  11. {
  12. ui->setupUi(this);
  13. mpRoad = pRoad;
  14. mLat0 = glat0;
  15. mLon0 = glon0;
  16. setWindowTitle("ParkingSpace From RTK");
  17. }
  18. DialogParkingSpaceFromRTK::~DialogParkingSpaceFromRTK()
  19. {
  20. delete ui;
  21. }
  22. void DialogParkingSpaceFromRTK::on_pushButton_LoadData_clicked()
  23. {
  24. QString strfilepath = QFileDialog::getOpenFileName(this,tr("Open RTK Data"),"",tr("RTK File(*.csv)"));
  25. if(strfilepath.isEmpty())return;
  26. QFile xFile;
  27. xFile.setFileName(strfilepath);
  28. std::vector<iv::rtkdata> xvectorrtkdata;
  29. xvectorrtkdata.clear();
  30. ui->plainTextEdit->clear();
  31. if(xFile.open(QIODevice::ReadWrite))
  32. {
  33. QByteArray ba;
  34. ba = xFile.read(xFile.size());
  35. QList<QByteArray> strlinedata= ba.split('\n');
  36. int i;
  37. int nsize = strlinedata.size();
  38. const int nstartline = 1;
  39. for(i=nstartline;i<nsize;i++)
  40. {
  41. double flat,flon,fheight,frelx,frely;
  42. QList<QByteArray> strlistvalue = strlinedata.at(i).split(',');
  43. int ncount = strlistvalue.size();
  44. if(ncount>=4)
  45. {
  46. flon = atof(strlistvalue.at(2).data());
  47. flat = atof(strlistvalue.at(1).data());
  48. QString strheight = strlistvalue.at(3);
  49. strheight = strheight.left(strheight.size() -2);
  50. fheight = strheight.toDouble();
  51. DialogAddRoadFromRTK::calcrelxy(mLon0,mLat0,flon,flat,frelx,frely);
  52. iv::rtkdata xdata;
  53. xdata.mflat = flat;
  54. xdata.mflon = flon;
  55. xdata.mfrelx = frelx;
  56. xdata.mfrely = frely;
  57. xdata.mheight = fheight;
  58. if(xvectorrtkdata.size() < 1)
  59. {
  60. xdata.mfrels = 0;
  61. }
  62. else
  63. {
  64. xdata.mfrels = xvectorrtkdata[xvectorrtkdata.size()-1].mfrels
  65. +sqrt(pow(xvectorrtkdata[xvectorrtkdata.size()-1].mfrelx - frelx,2)+pow(xvectorrtkdata[xvectorrtkdata.size()-1].mfrely - frely,2));
  66. }
  67. xvectorrtkdata.push_back(xdata);
  68. QString strline = QString::number(flon,'f',7) + QString("\t")
  69. +QString::number(flat,'f',7)+QString("\t")
  70. +QString::number(fheight,'f',4)+QString("\t")
  71. +QString::number(frelx,'f',2) + QString("\t")
  72. +QString::number(frely,'f',2) + QString("\t");
  73. ui->plainTextEdit->appendPlainText(strline);
  74. }
  75. }
  76. }
  77. mvectorrtkdata = xvectorrtkdata;
  78. unsigned int nsize = mvectorrtkdata.size();
  79. ui->comboBox_Center_From->clear();
  80. ui->comboBox_Center_To->clear();
  81. ui->comboBox_Heading_From->clear();
  82. ui->comboBox_Heading_To->clear();
  83. if(nsize >= 3)
  84. {
  85. unsigned int i;
  86. for(i=0;i<nsize;i++)
  87. {
  88. ui->comboBox_Heading_From->addItem(QString::number(i));
  89. ui->comboBox_Heading_To->addItem(QString::number(i));
  90. ui->comboBox_Center_From->addItem(QString::number(i));
  91. ui->comboBox_Center_To->addItem(QString::number(i));
  92. }
  93. ui->comboBox_Heading_From->setCurrentIndex(1);
  94. ui->comboBox_Heading_To->setCurrentIndex(0);
  95. ui->comboBox_Center_From->setCurrentIndex(0);
  96. ui->comboBox_Center_To->setCurrentIndex(2);
  97. }
  98. }
  99. void DialogParkingSpaceFromRTK::on_pushButton_Create_clicked()
  100. {
  101. if(mvectorrtkdata.size()<3)
  102. {
  103. QMessageBox::warning(this,"Warning","At Least 3 Points.",QMessageBox::YesAll);
  104. return;
  105. }
  106. int nHeadingFrom = ui->comboBox_Heading_From->currentIndex();
  107. int nHeadingTo = ui->comboBox_Heading_To->currentIndex();
  108. int nCenterFrom = ui->comboBox_Center_From->currentIndex();
  109. int nCenterTo = ui->comboBox_Center_To->currentIndex();
  110. double fHdg = xodrfunc::CalcHdg(QPointF(mvectorrtkdata[nHeadingFrom].mfrelx,mvectorrtkdata[nHeadingFrom].mfrely),
  111. QPointF(mvectorrtkdata[nHeadingTo].mfrelx,mvectorrtkdata[nHeadingTo].mfrely));
  112. double fCenter_x,fCenter_y;
  113. fCenter_x = (mvectorrtkdata[nCenterFrom].mfrelx + mvectorrtkdata[nCenterTo].mfrelx)/2.0;
  114. fCenter_y = (mvectorrtkdata[nCenterFrom].mfrely + mvectorrtkdata[nCenterTo].mfrely)/2.0;
  115. double fLen = sqrt(pow(mvectorrtkdata[nHeadingFrom].mfrelx - mvectorrtkdata[nHeadingTo].mfrelx,2)
  116. +pow(mvectorrtkdata[nHeadingFrom].mfrely - mvectorrtkdata[nHeadingTo].mfrely,2));
  117. double fWidth = sqrt(pow(mvectorrtkdata[nHeadingFrom].mfrelx - mvectorrtkdata[nCenterTo].mfrelx ,2)
  118. +pow(mvectorrtkdata[nHeadingFrom].mfrely - mvectorrtkdata[nCenterTo].mfrely,2));
  119. qDebug("fhdg:%f flen:%f fwidth:%f",fHdg,fLen,fWidth);
  120. }