根据地球表面两点坐标(经纬度)计算两点间距离

本文档介绍了CoordConvertDistance类,用于计算两点之间的平面距离,通过经纬度坐标进行转换,并提供了ConvertFunc函数和GetDistance方法。关键步骤包括角度转弧度、计算纬度和经度差值,最后利用球面三角公式得出距离。
摘要由CSDN通过智能技术生成

具体实现

头文件:

#ifndef COORDCONVERTDISTANCE_H
#define COORDCONVERTDISTANCE_H

#include <QObject>
#include "ExtendStructure\Include\Vector3D.h"

class CCoordConvertDistance
{
	

public:
	CCoordConvertDistance();
	~CCoordConvertDistance();

public:

	/**
	* @fn  ConvertFunc        
	* @brief 根据两点坐标计算两点平面距离
	* @param vMinpoint第一点, vMaxpoint第二点
	* @return 
	*/
	void ConvertFunc(const CVector3D& vMinpoint, const CVector3D& vMaxpoint);

	/**
	* @fn  GetDistance        
	* @brief 获取函数ConvertFunc计算的平面距离
	* @param 
	* @return double m_dDistance
	*/
	double GetDistance();

private:

	//两点间距离
	double m_dDistance;

	//两点间横向距离未实现
	double m_dYDistance;

	//两点间纵向距离未实现
	double m_dXDistance;

};

#endif // COORDCONVERTDISTANCE_H

源文件:

#include "CoordConvertDistance.h"
#include "math.h"
#include "qmath.h"
#define _USE_MATH_DEFINES
#define R 6371004
CCoordConvertDistance::CCoordConvertDistance()
{

}

CCoordConvertDistance::~CCoordConvertDistance()
{

}

void CCoordConvertDistance::ConvertFunc(const CVector3D& m_vPoint1, const CVector3D& m_vPoint2)
{
	//角度转弧度
	double dLon1 = m_vPoint1.x;
	double dLat1 = m_vPoint1.y;
	double dLon2 = m_vPoint2.x;
	double dLat2 = m_vPoint2.y;

	double dRadLon1 = (dLon1 * M_PI/180.0);
	double dRadLat1 = (dLat1 * M_PI/180.0);  
	double dRadLon2 = (dLon2 * M_PI/180.0); 
	double dRadLat2 = (dLat2 * M_PI/180.0);

	//纬度的差值  
	double dLatRange = dRadLat2-dRadLat1;

	//经度差值  
	double dLonRange = dRadLon2-dRadLon1;  

	//弧度长度  
	double ds=2 * qAsin(sqrt(pow(qSin(dLatRange/2), 2) + qCos(dRadLat1) * qCos(dRadLat2) * pow(qSin(dLonRange/2), 2)));  

	//获取长度  
	m_dDistance = ds * R; 

	//返回最接近参数的 long。结果将舍入为整数:加上 1/2  
	//s=Math.round(s*10000)/10000;  
}

double CCoordConvertDistance::GetDistance()
{
	return m_dDistance;
}

总结

注:三角函数需要使用弧度,需要将经纬度的角度制转为弧度制。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值