之前遇到过这样的问题:手里有一批患者的具体居住地点以及对应的经纬度,我想分析下患者的具体分布情况,不同患者之间的距离关系,这时就需要根据某两点的经纬度来求该两点的实际距离了。下面就是计算公式和代码:
公式
球面上任意两点的距离计算公式可以参考维基百科上的下述文章。
Great-circle distance
Haversine formula
下面采用的是维基百科推荐的Haversine公式,原因:
- Great-circle distance公式用到了大量余弦函数,而两点间距离很短时(比如地球表面上相距几百米的两点),余弦函数会得出0.999…的结果,会导致较大的舍入误差。
- 而Haversine公式采用了正弦函数,即使距离很小,也能保持足够的有效数字。