Iは、スタックオーバーフローに、このコードが見つかりました:私はこれらの座標と機能を使用する場合このPython Haversine式が間違った答えを生成するのはなぜですか?
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を発見した半正矢式との差異を見つけることができませんので、それは(リンク内のものを含む)は、オンライン電卓