|
@@ -0,0 +1,151 @@
|
|
|
+#include "dialogaddroadfromrtk.h"
|
|
|
+#include "ui_dialogaddroadfromrtk.h"
|
|
|
+
|
|
|
+#include <QFileDialog>
|
|
|
+
|
|
|
+extern double glon0 ;
|
|
|
+extern double glat0;
|
|
|
+
|
|
|
+DialogAddRoadFromRTK::DialogAddRoadFromRTK(OpenDrive * pxodr,double lon0,double lat0,QWidget *parent) :
|
|
|
+ QDialog(parent),
|
|
|
+ ui(new Ui::DialogAddRoadFromRTK)
|
|
|
+{
|
|
|
+ mpxodr = pxodr;
|
|
|
+ mlat0 = lat0;
|
|
|
+ mlon0 = lon0;
|
|
|
+ ui->setupUi(this);
|
|
|
+}
|
|
|
+
|
|
|
+DialogAddRoadFromRTK::~DialogAddRoadFromRTK()
|
|
|
+{
|
|
|
+ delete ui;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+double DialogAddRoadFromRTK::getvaluefromdegreestring(QByteArray ba)
|
|
|
+{
|
|
|
+
|
|
|
+ unsigned char strdata[256];
|
|
|
+ if(ba.size() > 255)return 0;
|
|
|
+ memcpy(strdata,ba.data(),ba.size());
|
|
|
+ int nsize = ba.size();
|
|
|
+ int i = 0;
|
|
|
+ char strvalue[256];
|
|
|
+ int nvaluepos = 0;
|
|
|
+ while((i+2)<nsize)
|
|
|
+ {
|
|
|
+ strvalue[nvaluepos] = strdata[i];
|
|
|
+ nvaluepos++;
|
|
|
+ if((strdata[i+1]==0xa1)&&(strdata[i+2]==0xe3))
|
|
|
+ {
|
|
|
+ strvalue[nvaluepos] = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ double fdu = atof(strvalue);
|
|
|
+ nvaluepos = 0;
|
|
|
+ i = i+3;
|
|
|
+ while((i+2)<nsize)
|
|
|
+ {
|
|
|
+ strvalue[nvaluepos] = strdata[i];
|
|
|
+ nvaluepos++;
|
|
|
+ if((strdata[i+1]==0xa1)&&(strdata[i+2]==0xe4))
|
|
|
+ {
|
|
|
+ strvalue[nvaluepos] = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ double ffen = atof(strvalue);
|
|
|
+ nvaluepos = 0;
|
|
|
+ i = i+3;
|
|
|
+ while((i+2)<nsize)
|
|
|
+ {
|
|
|
+ strvalue[nvaluepos] = strdata[i];
|
|
|
+ nvaluepos++;
|
|
|
+ if((strdata[i+1]==0xa1)&&(strdata[i+2]==0xe5))
|
|
|
+ {
|
|
|
+ strvalue[nvaluepos] = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ double fmiao = atof(strvalue);
|
|
|
+
|
|
|
+ ffen = ffen + fmiao/60.0;
|
|
|
+ fdu = fdu + ffen/60.0;
|
|
|
+ return fdu;
|
|
|
+}
|
|
|
+
|
|
|
+void DialogAddRoadFromRTK::calcrelxy(double flon0, double flat0, double flon, double flat, double &relx, double &rely)
|
|
|
+{
|
|
|
+ double x0,y0;
|
|
|
+ double x,y;
|
|
|
+ GaussProjCal(flon0,flat0,&x0,&y0);
|
|
|
+ GaussProjCal(flon,flat,&x,&y);
|
|
|
+ relx = x - x0;
|
|
|
+ rely = y - y0;
|
|
|
+
|
|
|
+}
|
|
|
+void DialogAddRoadFromRTK::on_pushButton_LoadData_clicked()
|
|
|
+{
|
|
|
+ QString str = QFileDialog::getOpenFileName(this,tr("Open RTK Data"),"",tr("Lane File(*.csv)"));
|
|
|
+ if(str.isEmpty())return;
|
|
|
+
|
|
|
+ QFile xFile;
|
|
|
+ xFile.setFileName(str);
|
|
|
+ QFileInfo fi(str);
|
|
|
+ QString filename = fi.fileName();
|
|
|
+ if(filename.contains(".txt"))
|
|
|
+ {
|
|
|
+ filename = filename.left(filename.length() -4);
|
|
|
+ }
|
|
|
+
|
|
|
+ ui->plainTextEdit->clear();
|
|
|
+ ui->plainTextEdit->appendPlainText(QString("Longitude\tLatitude\tHeight\trelx\trely"));
|
|
|
+
|
|
|
+ if(xFile.open(QIODevice::ReadWrite))
|
|
|
+ {
|
|
|
+ QByteArray ba;
|
|
|
+ ba = xFile.read(xFile.size());
|
|
|
+ QList<QByteArray> strlinedata= ba.split('\n');
|
|
|
+ int i;
|
|
|
+ int nsize = strlinedata.size();
|
|
|
+ for(i=2;i<nsize;i++)
|
|
|
+ {
|
|
|
+ double flat,flon,fheight,frelx,frely;
|
|
|
+ QList<QByteArray> strlistvalue = strlinedata.at(i).split(',');
|
|
|
+ int ncount = strlistvalue.size();
|
|
|
+ if(ncount>=4)
|
|
|
+ {
|
|
|
+ flon = getvaluefromdegreestring(strlistvalue.at(1));
|
|
|
+ flat = getvaluefromdegreestring(strlistvalue.at(2));
|
|
|
+ QString strheight = strlistvalue.at(3);
|
|
|
+ strheight = strheight.left(strheight.size() -2);
|
|
|
+ fheight = strheight.toDouble();
|
|
|
+
|
|
|
+ calcrelxy(mlon0,mlat0,flon,flat,frelx,frely);
|
|
|
+
|
|
|
+ if(i==2)
|
|
|
+ {
|
|
|
+ if(mpxodr->GetRoadCount()<1)
|
|
|
+ {
|
|
|
+ glat0 = flat;
|
|
|
+ glon0 = flon;
|
|
|
+ mlon0 = glon0;
|
|
|
+ mlat0 = glat0;
|
|
|
+ calcrelxy(mlon0,mlat0,flon,flat,frelx,frely);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ QString strline = QString::number(flon,'f',7) + QString("\t")
|
|
|
+ +QString::number(flat,'f',7)+QString("\t")
|
|
|
+ +QString::number(fheight,'f',4)+QString("\t")
|
|
|
+ +QString::number(frelx,'f',2) + QString("\t")
|
|
|
+ +QString::number(frely,'f',2) + QString("\t");
|
|
|
+ ui->plainTextEdit->appendPlainText(strline);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|