两个gps位置计算距离,偏北角,仰角
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCore/qmath.h>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
init();
on_pushButton_calculate_clicked();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::init()
{
lat1=39.4;
lat2=38.4;
long1=116.4;
long2=116.4;
alt1=0;
alt2=500;
azangle=0;
elangle=0;
distance=0;
ui->lineEdit_lat1->setText("39.4");
ui->lineEdit_lat2->setText("38.4");
ui->lineEdit_long1->setText("116.4");
ui->lineEdit_long2->setText("116.4");
ui->lineEdit_alt1->setText("0");
ui->lineEdit_alt2->setText("5000");
ui->lineEdit_azangle->setText("0");
ui->lineEdit_distance->setText("0");
ui->lineEdit_elangle->setText("0");
}
double MainWindow::getdistance(double lat_a, double lat_b, double long_a, double long_b)
{
double a,b,R,d;
R=6378137;
a=qSin((lat_b-lat_a)*M_PI/360.0);
b=qSin((long_b-long_a)*M_PI/360.0);
d=2*R*asin(qSqrt(a*a+qCos(lat_a*M_PI/180.0)*qCos(lat_b*M_PI/180.0)*b*b));
return d;
}
double MainWindow::getazangle(double lat_a, double lat_b, double long_a, double long_b)
{
double y=qSin(long_b-long_a)*qCos(lat_b);
double x=qCos(lat_a)*qSin(lat_b)-qSin(lat_a)*qCos(lat_b)*qCos(long_b-long_a);
double brng=qAtan2(y,x);
brng = brng*180.0/M_PI;
if(brng<0)
brng=brng+360.0;
return brng;
}
double MainWindow::getelangle(double lat_a, double lat_b, double long_a, double long_b, double alt_a, double alt_b)
{
distance=getdistance(lat_a,lat_b,long_a,long_b);
elangle=qAtan2((alt_b-alt_a),distance)*180.0/M_PI;
// qDebug()<<"elangle"<<elangle<<endl;
return elangle;
}
void MainWindow::on_pushButton_calculate_clicked()
{
long1=ui->lineEdit_long1->text().toDouble();
long2=ui->lineEdit_long2->text().toDouble();
lat1=ui->lineEdit_lat1->text().toDouble();
lat2=ui->lineEdit_lat2->text().toDouble();
alt1=ui->lineEdit_alt1->text().toDouble();
alt2=ui->lineEdit_alt2->text().toDouble();
distance=getdistance(lat1,lat2,long1,long2);
QString s_distance=QString::number(distance,'g',10);
ui->lineEdit_distance->setText(s_distance);
elangle=getelangle(lat1,lat2,long1,long2,alt1,alt2);
QString s_elangle=QString::number(elangle,'g',10);
ui->lineEdit_elangle->setText(s_elangle);
azangle=getazangle(lat1,lat2,long1,long2);
QString s_azangle=QString::number(azangle,'g',10);
ui->lineEdit_azangle->setText(s_azangle);
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
double lat1;
double lat2;
double long1;
double long2;
double alt1;
double alt2;
double azangle;
double elangle;
double distance;
void init();
double getdistance(double lat_a,double lat_b,double long_a,double long_b/*,double alt_a,double alt_b*/);
double getazangle(double lat_a, double lat_b, double long_a, double long_b);
double getelangle(double lat_a,double lat_b,double long_a,double long_b,double alt_a,double alt_b);
private slots:
void on_pushButton_calculate_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H