|
@@ -0,0 +1,115 @@
|
|
|
+#include "mainwindow.h"
|
|
|
+#include "ui_mainwindow.h"
|
|
|
+#include <QMessageBox>
|
|
|
+#include <iostream>
|
|
|
+#include "gpsimu.pb.h"
|
|
|
+
|
|
|
+static MainWindow::GPS_INS gps_data_set,gps_data_car;
|
|
|
+static double set_R;
|
|
|
+
|
|
|
+void Listengpsimu(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)
|
|
|
+{
|
|
|
+ iv::gps::gpsimu xgpsimu;
|
|
|
+ if(!xgpsimu.ParseFromArray(strdata,nSize))
|
|
|
+ {
|
|
|
+ std::cout<<"Listengpsimu Parse error."<<std::endl;
|
|
|
+ }
|
|
|
+ gps_data_car.gps_lng = xgpsimu.lon();
|
|
|
+ gps_data_car.gps_lat = xgpsimu.lat();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+MainWindow::MainWindow(QWidget *parent) :
|
|
|
+ QMainWindow(parent),
|
|
|
+ ui(new Ui::MainWindow)
|
|
|
+{
|
|
|
+ ui->setupUi(this);
|
|
|
+
|
|
|
+ //使用正则表达式限制只能输入数字
|
|
|
+ QRegExp rx("[0-9\.]+$");
|
|
|
+ QRegExpValidator *validator = new QRegExpValidator(rx, this);
|
|
|
+ ui->lineEdit->setValidator(validator);
|
|
|
+ ui->lineEdit_2->setValidator(validator);
|
|
|
+ ui->lineEdit_3->setValidator(validator);
|
|
|
+ ui->lineEdit_4->setText("");
|
|
|
+ ui->lineEdit_5->setText("");
|
|
|
+ ui->lineEdit_6->setText("");
|
|
|
+ ui->textEdit->setText("");
|
|
|
+
|
|
|
+ void * paraw = iv::modulecomm::RegisterRecv("hcp2_gpsimu",Listengpsimu);
|
|
|
+
|
|
|
+ setWindowTitle("电子栅栏测试工具");
|
|
|
+}
|
|
|
+
|
|
|
+MainWindow::~MainWindow()
|
|
|
+{
|
|
|
+ delete ui;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+double MainWindow::GetDistance(GPS_INS p1, GPS_INS p2)
|
|
|
+{
|
|
|
+ return sqrt((p1.gps_x - p2.gps_x) * (p1.gps_x - p2.gps_x) + (p1.gps_y - p2.gps_y) * (p1.gps_y - p2.gps_y));
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_pushButton_clicked()
|
|
|
+{
|
|
|
+ const double Set_Jingdu = ui->lineEdit->text().toDouble();
|
|
|
+ const double Set_Weidu = ui->lineEdit_2->text().toDouble();
|
|
|
+ const double Set_R = ui->lineEdit_3->text().toDouble();
|
|
|
+
|
|
|
+
|
|
|
+ if(Set_Jingdu < 0.0 || Set_Jingdu > 180.0 || ui->lineEdit->text().isEmpty())
|
|
|
+ {
|
|
|
+ QMessageBox message(QMessageBox::NoIcon, "注意", "经度范围0~180且不为空.");
|
|
|
+ message.setIconPixmap(QPixmap(":/gps.png"));
|
|
|
+ message.exec();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(Set_Weidu < 0.0 || Set_Weidu > 90.0 || ui->lineEdit_2->text().isEmpty())
|
|
|
+ {
|
|
|
+ QMessageBox message(QMessageBox::NoIcon, "注意", "纬度范围0~90且不为空.");
|
|
|
+ message.setIconPixmap(QPixmap(":/gps.png"));
|
|
|
+ message.exec();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(Set_R < 0.0 || ui->lineEdit_3->text().isEmpty())
|
|
|
+ {
|
|
|
+ QMessageBox message(QMessageBox::NoIcon, "注意", "R范围>0且不为空.");
|
|
|
+ message.setIconPixmap(QPixmap(":/gps.png"));
|
|
|
+ message.exec();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ gps_data_set.gps_lat = Set_Weidu;
|
|
|
+ gps_data_set.gps_lng = Set_Jingdu;
|
|
|
+ set_R = Set_R;
|
|
|
+
|
|
|
+ QTimer * timer = new QTimer(this);
|
|
|
+ connect(timer,SIGNAL(timeout()),this,SLOT(onTimer()));
|
|
|
+ timer->start(100);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::onTimer()
|
|
|
+{
|
|
|
+ ui->lineEdit_4->setText(QString::number(gps_data_car.gps_lng, 'g', 12));
|
|
|
+ ui->lineEdit_5->setText(QString::number(gps_data_car.gps_lat, 'g', 12));
|
|
|
+ GaussProjCal(gps_data_set.gps_lng, gps_data_set.gps_lat, &gps_data_set.gps_x, &gps_data_set.gps_y);
|
|
|
+ GaussProjCal(gps_data_car.gps_lng, gps_data_car.gps_lat, &gps_data_car.gps_x, &gps_data_car.gps_y);
|
|
|
+ double distance = GetDistance(gps_data_set,gps_data_car);
|
|
|
+ ui->lineEdit_6->setText(QString::number(distance, 'g', 12));
|
|
|
+
|
|
|
+ std::cout<<set_R<<std::endl;
|
|
|
+ std::cout<<distance<<std::endl;
|
|
|
+
|
|
|
+ if(distance < set_R)
|
|
|
+ ui->textEdit->setPlainText("车辆中心点在电子栅栏以内");
|
|
|
+ if(distance == set_R)
|
|
|
+ ui->textEdit->setPlainText("车辆中心点在电子栅栏之上");
|
|
|
+ if(distance > set_R)
|
|
|
+ ui->textEdit->setPlainText("车辆中心点在电子栅栏以外");
|
|
|
+}
|