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

时间:2015-04-13 12:42:47

标签: python math gps

我使用下面的代码不断收到以下错误:ValueError:math domain error。我可以使用其他公式获得两个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)

3 个答案:

答案 0 :(得分:1)

公式不正确。 我相信这个公式是 acos(some_trig) * r而非acos(some_trig * r ) 总之

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

答案 1 :(得分:0)

此公式发布于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

答案 2 :(得分:-1)

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

如果你试图取acos之外的值[-1,1],你或者你的数学运算出错,或者你正在寻找一个想象的结果,在这种情况下你应该使用acos的复杂版本,即cmath.acos