顺看
编码不易,觉得文章好,请给作者点赞关注、一键三连。谢谢!
* 计算两经纬度之间的距离、方位角
* 已知A经纬度、根据距离、方位,计算目标经纬度
测试了三组数据,并与在线工具测试后对比效果:
方位角,距离,海拔在线计算器 (侵删)
具体理论这里不做介绍,大家可以看如下代码再去理解公式:
#include <iostream>
// PI
#define M_PI 3.14159265358979323846
// 地球半径
const double EARTH_RADIUS = 6371000;
// 大地坐标系资料WGS-84,长半径 6378137
const double WGS84_L_RADIUS = 6378137;
// 大地坐标系资料WGS-84,短半径 6356752.3142 */
const double WGS84_S_RADIUS = 6356752.3142;
// 扁率
const double M_F = 1 / 298.2572236;
// 角度转弧度
double A2R(double d) {
return d * M_PI / 180.0; }
// 弧度转角度
double R2A(double d) {
return d / M_PI * 180.0; }
// 1、计算两个经纬度之间的距离(m)
double GetDistanceCpp(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = A2R(lat1);
double radLat2 = A2R(lat2);
double a = radLat1 - radLat2;
double b = A2R(lng1) - A2R(lng2);
double s = 2 * asin(sqrt(pow(sin(a/2),2) +cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
s = s * EARTH_RADIUS;
return s;
}
// 2、计算两个经纬度之间的方位角(偏北角)(°)
double GetYaw(double lat1, double lon1, double lat2, double lon2)
{
double result = 0.0;
int ilat1 = (int) (0.50 + lat1 * 360000.0);
int ilat2 = (int) (0.50 + lat2