两个 GPS 点之间的距离 (Python)

Distance between two GPS points (Python)

我不断收到以下代码的以下错误:ValueError:数学域错误。我可以用其他公式得到两个 GPS 点之间的距离,但不能用下面的公式。任何帮助将不胜感激,

谢谢,

加文

from math import radians, cos, sin, acos

#Formula below does not work :(

#JFK
lat1 = 40.639751
lon1 = -73.778925

#DUB
lat2 = 53.421333
lon2 = -6.270075

lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

r = 6373
distance = acos((sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon1 - lon2)) * r)

print(distance)

cos的结果不能超出[-1,1]实数范围,所以acos超出该范围的值是虚数。但是,您乘以 6373,导致值超出 [-1,1]。这就是错误的原因。

如果您试图将 acos 的值取到 [-1,1] 之外,那么您要么在数学上做错了,要么在寻找虚构的结果,在这种情况下,您应该使用 acos 的复杂版本,即 cmath.acos.

公式不正确。 我相信公式是 acos(some_trig) * r 而不是 acos(some_trig * r ) 总结

distance = acos((sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon1 - lon2))) * r

此公式发布于 Calculating shortest path between 2 points on a flat map of the Earth 并查看 https://en.wikipedia.org/wiki/Great-circle_distance

您将这些值乘以 r,这告诉 acos 将 4435.6 解析为一个荒谬的角度。余弦不可能产生这样的数字,大于 1。

也许你应该将acos给出的角度代入另一个圆周长公式。

from math import radians, cos, sin, acos, pi

#JFK
lat1 = 40.639751
lon1 = -73.778925

#DUB
lat2 = 53.421333
lon2 = -6.270075

lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

r = 6373
d = acos((sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon1 - lon2)))
length = d * r

print(length)

5104.62871371