2023-3-13 经纬度距离计算公式

12 篇文章 1 订阅

在网上找了好久才找到正确的经纬度距离计算公式,而且是较高精度的计算

公式原自:https://docs.gmt-china.org/latest/option/distcal/

大圆路径距离

该方法将地球近似为一个半径为R的球,地球上任意两点 A 和 B 的大圆路径距离可以用 Haversine 公式 计算:

该方法是 GMT 默认使用的距离计算方法,适用于大多数情况。

d = 2 R s i n − 1 s i n 2 θ A − θ B 2 + c o s θ A c o s θ B s i n 2 λ A − λ B 2 d = 2Rsin^{-1}\sqrt{sin^2\frac{\theta_A - \theta_B}{2} + cos\theta_Acos\theta_Bsin^2\frac{\lambda_A-\lambda_B}{2}} d=2Rsin1sin22θAθB+cosθAcosθBsin22λAλB

θ A \theta_A θA 为A点的纬度
θ B \theta_B θB 为B点的纬度
λ A \lambda_A λA 为A点的经度
λ B \lambda_B λB 为B点的经度
s i n − 1 sin^{-1} sin1 为反正弦
s i n 2 sin^2 sin2 求出正弦值后再求平方
R R R 为地球半径

以下代码来自Qt QGeoCoorditude 的代码,与上述公式吻合

static const double qgeocoordinate_EARTH_MEAN_RADIUS = 6371.0072;
double distance(double lat1, double lng1, double lat2, double lng2)
{
    //    // Haversine formula
    double dlat = qDegreesToRadians(lat1 - lat2);
    double dlon = qDegreesToRadians(lng1 - lng2);
    double haversine_dlat = sin(dlat / 2.0);
    haversine_dlat *= haversine_dlat;
    double haversine_dlon = sin(dlon / 2.0);
    haversine_dlon *= haversine_dlon;
    double y = haversine_dlat
               + cos(qDegreesToRadians(lat1)) * cos(qDegreesToRadians(lat2)) * haversine_dlon;
    double x = 2 * asin(sqrt(y));
    return qreal(x * qgeocoordinate_EARTH_MEAN_RADIUS * 1000);
    return 0.0;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值