两个 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
我不断收到以下代码的以下错误: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