两个gps位置计算距离,偏北角,仰角

fly_inthe_sky 2018-03-27 08:38:22

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

...全文
692 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧