Files
gcs-nf/App/MissionUI/ruledialog.cpp
T

154 lines
3.8 KiB
C++

#include "ruledialog.h"
#include "ui_ruledialog.h"
#include "qmessagebox.h"
RuleDialog::RuleDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::RuleDialog)
{
ui->setupUi(this);
setWindowFlags(Qt::WindowStaysOnTopHint);
CurrentPoint = 1;
ui->MouseLatitude->setReadOnly(true);
ui->MouseLongitude->setReadOnly(true);
ui->ConformButton->setEnabled(false);
ui->FirstPointLatitude->setEnabled(false);
ui->FirstPointLongitude->setEnabled(false);
ui->SecondPointLatitude->setEnabled(false);
ui->SecondPointLongitude->setEnabled(false);
ui->TwoPointDistance->setEnabled(false);
ui->TwoPointAngle->setEnabled(false);
}
RuleDialog::~RuleDialog()
{
delete ui;
}
void RuleDialog::closeEvent(QCloseEvent *event)
{
event->ignore();
//退出测量
emit exitRuler();
//event->accept();
}
double RuleDialog::GetDiatance(qreal lat1,qreal lng1,qreal lat2 ,qreal lng2)
{
double EarthRadiusKm = 6378.137;
double dLat1InRad = lat1 * (M_PI / 180);
double dLong1InRad = lng1 * (M_PI / 180);
double dLat2InRad = lat2 * (M_PI / 180);
double dLong2InRad = lng2 * (M_PI / 180);
double dLongitude = dLong2InRad - dLong1InRad;
double dLatitude = dLat2InRad - dLat1InRad;
double a = pow(sin(dLatitude / 2), 2) + cos(dLat1InRad) * cos(dLat2InRad) * pow(sin(dLongitude / 2), 2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
double dDistance = EarthRadiusKm * c;
return dDistance;
}
double RuleDialog::GetHeading(qreal lat1,qreal lng1,qreal lat2 ,qreal lng2)
{
double temp;
double mLat = lat2 - lat1;
double mLon = (lng2 - lng1)* cos(((lat2 + lat1)/2)* 0.0174532925);
temp = 90.0 + atan2(-mLat, mLon) * 57.2957795;
if(temp < 0)temp += 360.0;
return temp;
}
void RuleDialog::RulePoint(int num,qreal lat,qreal lng)
{
switch(num) {
case 1:{
Point1.lat = lat;
Point1.lng = lng;
ui->FirstPointLatitude->setText(QString::number(lat,'f',8));
ui->FirstPointLongitude->setText(QString::number(lng,'f',8));
} break;
case 2:{
Point2.lat = lat;
Point2.lng = lng;
ui->SecondPointLatitude->setText(QString::number(lat,'f',8));
ui->SecondPointLongitude->setText(QString::number(lng,'f',8));
on_ConformButton_clicked();
} break;
default:
break;
}
}
void RuleDialog::ShowMousePos(qreal lat,qreal lng)
{
ui->MouseLatitude->setText(QString::number(lat,'f',8));
ui->MouseLongitude->setText(QString::number(lng,'f',8));
}
void RuleDialog::Lineinfo(qreal dis,qreal bearing)
{
ui->ConformButton->setEnabled(true);
ui->FirstPointLatitude->setEnabled(true);
ui->FirstPointLongitude->setEnabled(true);
ui->SecondPointLatitude->setEnabled(true);
ui->SecondPointLongitude->setEnabled(true);
ui->TwoPointDistance->setEnabled(true);
ui->TwoPointAngle->setEnabled(true);
ui->TwoPointDistance->setText(QString::number(dis * 0.001,'f',3) + "km");
ui->TwoPointAngle->setText(QString::number(bearing * 57.3,'f',1) + "°");
}
void RuleDialog::on_ConformButton_clicked()
{
bool flag = false;
qreal value = ui->FirstPointLatitude->text().toDouble(&flag);
if(flag)
{
Point1.lat = value;
emit valuechanged(1,value);
}
flag = false;
value = ui->FirstPointLongitude->text().toDouble(&flag);
if(flag)
{
Point1.lat = value;
emit valuechanged(2,value);
}
flag = false;
value = ui->SecondPointLatitude->text().toDouble(&flag);
if(flag)
{
Point1.lat = value;
emit valuechanged(3,value);
}
flag = false;
value = ui->SecondPointLongitude->text().toDouble(&flag);
if(flag)
{
Point1.lat = value;
emit valuechanged(4,value);
}
}