球面上任意两点之间的距离计算公式可以参考维基百科上的下述文章
值得一提的是,维基百科推荐使用Haversine公式理由是Great-circle distance公式用到了大量余弦函数, 而两点间距离很短时(仳如地球表面上相距几百米的两点)余弦函数会得出0.999...的结果, 会导致较大的舍入误差而Haversine公式采用了正弦函数,即使距离很小也能保歭足够的有效数字。 以前采用三角函数表计算时的确会有这个问题但经过实际验证,采用计算机来计算时两个公式的区别不大。 稳妥起见这里还是采用Haversine公式。
根据 2 个经纬度坐标,距离计算函数
/// 根据经纬度计算2个點之间的距离。 /// 给定的经度1纬度1;经度2,纬度2. 计算2个经纬度之间的距离 //用haversine公式计算球面两点间的距离。 /// 将角度换算为弧度弦AC的长度,参照图1的方式那么是AC=2*sin(dlat/2),弦BD也是一样的长度
下面看一下如何求AB的长度,回到平面等腰梯形如下图:
根据前面球面上的求经纬距离的方式,我们已经得到 AC、AD和CB的长度代入公式得到:
假设中间值h 是AB长度一半的平方,如下
最后一步是求得代表AB长度的角度AOB。参照图1的方式我们可以知道
如果设c是角AOB的度数值。
最后的AB真实距离把地球半径带上就可以了。