【发布时间】:2017-07-20 13:25:00
【问题描述】:
我在堆栈溢出时发现了这段代码:
from math import radians, cos, sin, asin, sqrt, atan2
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
print(lon1, lat1, lon2, lat2)
# haversine formula
dlon = abs(lon2 - lon1)
dlat = abs(lat2 - lat1)
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * atan2(sqrt(a), sqrt(1-a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles
return c * r
当我使用具有这些坐标的函数时:haversine(-94.5930, 39.1230, -94.4839, 39.1561),它返回10.103458011601726。
当我通过在线 gps 坐标距离计算器运行这些坐标时,它们都会产生大约 12 公里的答案。
我找不到此代码与找到 here 的 hasrsine 公式之间有任何区别,所以我不知道为什么它产生的答案与在线计算器(包括链接中的那个)不同
【问题讨论】: