浏览代码

change tool/map_lanetoxodr. add dialog load rtk data.

yuchuli 3 年之前
父节点
当前提交
752d971507

+ 151 - 0
src/tool/map_lanetoxodr/dialogaddroadfromrtk.cpp

@@ -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);
+            }
+        }
+    }
+}

+ 50 - 0
src/tool/map_lanetoxodr/dialogaddroadfromrtk.h

@@ -0,0 +1,50 @@
+#ifndef DIALOGADDROADFROMRTK_H
+#define DIALOGADDROADFROMRTK_H
+
+#include <QDialog>
+
+#include "OpenDrive/OpenDrive.h"
+
+#include "gnss_coordinate_convert.h"
+
+namespace Ui {
+class DialogAddRoadFromRTK;
+}
+
+namespace iv {
+struct rtkdata
+{
+    double mflon;
+    double mflat;
+    double mheight;
+    double mfrelx;
+    double mfrely;
+
+};
+}
+
+class DialogAddRoadFromRTK : public QDialog
+{
+    Q_OBJECT
+
+public:
+    explicit DialogAddRoadFromRTK(OpenDrive * pxodr,double lon0,double lat0,QWidget *parent = nullptr);
+    ~DialogAddRoadFromRTK();
+
+private slots:
+    void on_pushButton_LoadData_clicked();
+
+private:
+    Ui::DialogAddRoadFromRTK *ui;
+    OpenDrive * mpxodr;
+    double mlat0;
+    double mlon0;
+
+    std::vector<iv::rtkdata> mvectorrtkdata;
+
+private:
+    double getvaluefromdegreestring(QByteArray ba);
+    void calcrelxy(double flon0,double flat0,double flon,double flat,double & relx,double &rely);
+};
+
+#endif // DIALOGADDROADFROMRTK_H

+ 55 - 0
src/tool/map_lanetoxodr/dialogaddroadfromrtk.ui

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DialogAddRoadFromRTK</class>
+ <widget class="QDialog" name="DialogAddRoadFromRTK">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>832</width>
+    <height>676</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <widget class="QPushButton" name="pushButton_LoadData">
+   <property name="geometry">
+    <rect>
+     <x>30</x>
+     <y>40</y>
+     <width>131</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Load Data</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton_CreateRoad">
+   <property name="geometry">
+    <rect>
+     <x>30</x>
+     <y>100</y>
+     <width>131</width>
+     <height>25</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Create Road</string>
+   </property>
+  </widget>
+  <widget class="QPlainTextEdit" name="plainTextEdit">
+   <property name="geometry">
+    <rect>
+     <x>200</x>
+     <y>20</y>
+     <width>591</width>
+     <height>171</height>
+    </rect>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 8 - 0
src/tool/map_lanetoxodr/mainwindow.cpp

@@ -4807,3 +4807,11 @@ void MainWindow::on_actionEdit_Road_triggered()
     RoadEditDialog rd(&mxodr,this);
     int res = rd.exec();
 }
+
+void MainWindow::on_actionAdd_Road_From_RTK_triggered()
+{
+    DialogAddRoadFromRTK arfrd(&mxodr,glon0,glat0,this);
+    arfrd.exec();
+    mpLELat0->setText(QString::number(glat0,'f',7));
+    mpLELon0->setText(QString::number(glon0,'f',7));
+}

+ 3 - 0
src/tool/map_lanetoxodr/mainwindow.h

@@ -43,6 +43,7 @@
 #include "speeddialog.h"
 #include "trafficlightdialog.h"
 #include "roadeditdialog.h"
+#include "dialogaddroadfromrtk.h"
 
 #include <iostream>
 #include <map>
@@ -170,6 +171,8 @@ private slots:
 
     void on_actionEdit_Road_triggered();
 
+    void on_actionAdd_Road_From_RTK_triggered();
+
 private:
 
 

+ 6 - 0
src/tool/map_lanetoxodr/mainwindow.ui

@@ -49,6 +49,7 @@
     <addaction name="actionEdit_Road"/>
     <addaction name="actionMerge_Road"/>
     <addaction name="actionEdit_Road_Lane"/>
+    <addaction name="actionAdd_Road_From_RTK"/>
    </widget>
    <addaction name="menuFile"/>
    <addaction name="menuFunction"/>
@@ -112,6 +113,11 @@
     <string>Edit Road Lane</string>
    </property>
   </action>
+  <action name="actionAdd_Road_From_RTK">
+   <property name="text">
+    <string>Add Road From RTK</string>
+   </property>
+  </action>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
  <resources>

+ 3 - 0
src/tool/map_lanetoxodr/map_lanetoxodr.pro

@@ -29,6 +29,7 @@ QMAKE_LFLAGS += -no-pie
 
 SOURCES += \
     autoconnect.cpp \
+    dialogaddroadfromrtk.cpp \
     dialogeditlane.cpp \
     dialogeditroadmark.cpp \
     ivxodrtool.cpp \
@@ -70,6 +71,7 @@ SOURCES += \
 
 HEADERS += \
     autoconnect.h \
+    dialogaddroadfromrtk.h \
     dialogeditlane.h \
     dialogeditroadmark.h \
     ivxodrtool.h \
@@ -107,6 +109,7 @@ HEADERS += \
     xodrmake.h
 
 FORMS += \
+        dialogaddroadfromrtk.ui \
         dialogeditlane.ui \
         dialogeditroadmark.ui \
         mainwindow.ui \