gpt4 book ai didi

python - 需要帮助计算地理距离

转载 作者:太空狗 更新时间:2023-10-29 20:36:46 25 4
gpt4 key购买 nike

我正在设置一个小程序来从用户那里获取 2 个地理坐标,然后计算它们之间的距离(考虑到地球的曲率)。所以我查了维基百科关于公式是什么 here .

我基本上是基于它设置我的 python 函数,这就是我想出的:

def geocalc(start_lat, start_long, end_lat, end_long):
start_lat = math.radians(start_lat)
start_long = math.radians(start_long)
end_lat = math.radians(end_long)
end_long = math.radians(end_long)

d_lat = start_lat - end_lat
d_long = start_long - end_long

EARTH_R = 6372.8

c = math.atan((math.sqrt( (math.cos(end_lat)*d_long)**2 +( (math.cos(start_lat)*math.sin(end_lat)) - (math.sin(start_lat)*math.cos(end_lat)*math.cos(d_long)))**2)) / ((math.sin(start_lat)*math.sin(end_lat)) + (math.cos(start_lat)*math.cos(end_lat)*math.cos(d_long))) )

return EARTH_R*c

问题是结果真的不准确。我是 python 的新手,所以非常感谢一些帮助或建议!

最佳答案

你有 4 或 5 或 6 个问题:

(1) end_lat = math.radians(end_long) 应该是 end_lat = math.radians(end_lat)

(2) 正如有人已经提到的那样,您遗漏了一些东西,很可能是因为

(3) 您的代码难以辨认(行太长、括号多余、17 个毫无意义的“数学”实例)

(4) 你没有注意到维基百科文章中关于使用 atan2() 的评论

(5) 您可能在输入坐标时交换了纬度和经度

(6) delta(latitude) 被不必要地计算;它没有出现在公式中

综合起来:

from math import radians, sqrt, sin, cos, atan2

def geocalc(lat1, lon1, lat2, lon2):
lat1 = radians(lat1)
lon1 = radians(lon1)
lat2 = radians(lat2)
lon2 = radians(lon2)

dlon = lon1 - lon2

EARTH_R = 6372.8

y = sqrt(
(cos(lat2) * sin(dlon)) ** 2
+ (cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dlon)) ** 2
)
x = sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(dlon)
c = atan2(y, x)
return EARTH_R * c



>>> geocalc(36.12, -86.67, 33.94, -118.40)
2887.2599506071115
>>> geocalc(-6.508, 55.071, -8.886, 51.622)
463.09798886300376
>>> geocalc(55.071, -6.508, 51.622, -8.886)
414.7830891822618

关于python - 需要帮助计算地理距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8858838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com