所以我使用了在“ https://gist.github.com/nickjevershed/6480846”上找到的距离函数,如下所示
def dist(lat1, long1, lat2, long2):
# Convert latitude and longitude to
# spherical coordinates in radians.
degrees_to_radians = math.pi/180.0
# phi = 90 - latitude
phi1 = (90.0 - lat1)*degrees_to_radians
phi2 = (90.0 - lat2)*degrees_to_radians
# theta = longitude
theta1 = long1*degrees_to_radians
theta2 = long2*degrees_to_radians
# Compute spherical distance from spherical coordinates.
# For two locations in spherical coordinates
# (1, theta, phi) and (1, theta, phi)
# cosine( arc length ) =
# sin phi sin phi' cos(theta-theta') + cos phi cos phi'
# distance = rho * arc length
cos = (math.sin(phi1)*math.sin(phi2)*math.cos(theta1 - theta2) +
math.cos(phi1)*math.cos(phi2))
arc = math.acos( cos )
# Remember to multiply arc by the radius of the earth
# in your favorite set of units to get length.
return arc * 3959
但是,当我尝试使用它来计算下面的值时,它给了我一个数学域错误。
dist(47.62, 122.35, 47.62, 122.35)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-164-c70b6ce05167> in <module>()
----> 1 dist(47.62, 122.35, 47.62, 122.35)
<ipython-input-78-5d1b406c1007> in dist(lat1, long1, lat2, long2)
24 cos = (math.sin(phi1)*math.sin(phi2)*math.cos(theta1 - theta2) +
25 math.cos(phi1)*math.cos(phi2))
---> 26 arc = math.acos( cos )
27
28 # Remember to multiply arc by the radius of the earth
ValueError: math domain
我尝试了其他值,并且一切正常。距离函数中是否缺少一些隐藏的逻辑,或者是否需要计算值?
答案 0 :(得分:0)
问题来了,您想计算相同点之间的距离,因此结果应为零。
但由于舍入问题,您的值cos> 1
因此是错误的原因。我建议您添加一个测试:
# with your sample dist(47.62, 122.35, 47.62, 122.35)
# cos = 1.0000000000000002, not good
cos = (math.sin(phi1)*math.sin(phi2)*math.cos(theta1 - theta2) +
math.cos(phi1)*math.cos(phi2))
cos = min(cos,1.0) #to securise the value
在这种情况下,您有等待的结果:0.0