给定经纬度计算距离

大圆距离:给定球面上两个点A,B,求A、B之间的最短球面距离。
这个距离等于A、B、O三点确定的大圆的AB弧的长度,这段弧就是最短距离。

Haversine是一个函数:haversin(x)=sin(x)/2=1-cos(x)
半余弦公式是计算大圆距离的一种方法。

问题变形:

  • 给定两点经纬度,计算两点方位角(360度方位角,北面为0度,东面为90度)
  • 给定一点经纬度和另一点相对于该点的方位角,求另一点的经纬度

其它问题:

  • 为什么大圆距离是最短距离?
  • 给定一个椭圆,它的平均半径如何计算(椭圆上全部点到椭圆中心的平均距离)
  • 给定一个椭球,它的平均半径如何计算
  • 极坐标系下的面积公式和曲线长度公式

在球面上,如果想要从一点经过大圆距离到达另一点,整个航行过程中的行驶方向是会发生变化的。比如:北京和天津位于同一纬度,但是北京到天津的最短距离不是一直向东走最近,而是大圆距离最近,而大圆轨迹上每个点的行驶方向是大圆切线的方向。也就是说,从北京到天津的最短距离行驶过程中行驶方向是不断变化的。

参考资料

维基百科:大圆距离
维基百科:半余弦公式
http://blog.sina.com.cn/s/blog_658a93570101hynw.html
https://www.cnblogs.com/softfair/p/distance_of_two_latitude_and_longitude_points.html

原文地址:https://www.cnblogs.com/weiyinfu/p/7975682.html