目录
摘要
写本文的出发点是需要在Qlik中根据经纬度计算地球上两点间的距离。我在社区上搜到了相关公式的分享,这个公式叫做“半正矢公式”。对于“半正矢”知之甚少的我,决定从头到尾将公式计算一遍,并通过这篇文章记录所有的步骤,希望它能对需要的人有所帮助。这也算是温习高中所学的三角函数了。
本文的部分图片源自其他网站,剩下的图都是通过GeoGebra制作的。这个工具非常方便,推荐大家使用。
(GeoGebra - the world’s favorite, free math tools used by over 100 million students and teachers)
1.半正矢公式(Haversine Formula)介绍
公式:
(i)
如图 (i), OAC是一个圆,O是其圆心,A和C是圆上的点,r 是⊙OAC的半径。
设:r = 1, 那么 OA = OC = r =1;
过点A做一条垂线,交线段OC于点B,∠OBA=90°。
设:∠AOB=θ;
因此,AB = sinθ, OB = cosθ, BC = 反正弦 = 1 – cosθ.
所谓的半正矢就是“一半的反正弦”(Haversine = “half reversed sin”),所以:
最后得出:
2.半正矢公式应用
回到应用场景,已知地球上的两个点A和B,现在我们想知道这两点之间的最短距离。地球可以近似看作为一个球体,那么AB间的最短距离就是过AB两点的大圆圆弧,这个大圆是地球的内切圆,半径和圆心点都于地球相同。
设:A点坐标 = (Ø1, λ1); B点坐标 = (Ø2, λ2);
Ø = 纬度, λ = 经度
d = A 和 B 的最短距离
R = 地球半径 = 6371 km
把