gpt4 book ai didi

python - Django - 我怎样才能找到两个位置之间的距离?

转载 作者:太空狗 更新时间:2023-10-29 19:33:26 27 4
gpt4 key购买 nike

我有一些用户在我的 Django 应用程序中注册,我希望能够根据他们的邮政编码简单地计算出两个用户之间的地理距离,然后根据该列表对列表进行排序。我想这个功能没有内置到 Django 中。我在查看一些选项时偶然发现了 geodjango,这似乎对我的需求来说有点过分了。

最佳答案

这是对@Sven Marnach 在(当前已接受的)答案中发布的代码的粗暴评论。

zip 项目网站的原始代码,缩进由我编辑:

from math import *
def calcDist(lat_A, long_A, lat_B, long_B):
distance = (sin(radians(lat_A)) *
sin(radians(lat_B)) +
cos(radians(lat_A)) *
cos(radians(lat_B)) *
cos(radians(long_A - long_B)))
distance = (degrees(acos(distance))) * 69.09
return distance

Sven 发布的代码:

from math import sin, cos, radians, degrees

def calc_dist(lat_a, long_a, lat_b, long_b):
lat_a = radians(lat_a)
lat_b = radians(lat_b)
distance = (sin(lat_a) * sin(lat_b) +
cos(lat_a) * cos(lat_b) * cos(long_a - long_b))
return degrees(acos(distance)) * 69.09

问题 1:不会运行:需要导入 acos

问题 2:错误答案:需要转换倒数第二行与弧度的经度差

问题 3:变量名称“distance”是一个极端的用词不当。该数量实际上是两条线之间角度的余弦值从地球中心到输入点。更改为“cos_x”

问题4:不需要将角度x转换为度数。简单地以所选单位(km、nm 或“法定英里”)将 x 乘以地球半径

在修复所有这些之后,我们得到:

from math import sin, cos, radians, acos

# http://en.wikipedia.org/wiki/Earth_radius
# """For Earth, the mean radius is 6,371.009 km (˜3,958.761 mi; ˜3,440.069 nmi)"""
EARTH_RADIUS_IN_MILES = 3958.761

def calc_dist_fixed(lat_a, long_a, lat_b, long_b):
"""all angles in degrees, result in miles"""
lat_a = radians(lat_a)
lat_b = radians(lat_b)
delta_long = radians(long_a - long_b)
cos_x = (
sin(lat_a) * sin(lat_b) +
cos(lat_a) * cos(lat_b) * cos(delta_long)
)
return acos(cos_x) * EARTH_RADIUS_IN_MILES

注意:在解决问题 1 和 2 之后,这就是通常执行的“余弦球面定律”。它适用于“两个美国邮政编码之间的距离”之类的应用。

警告 1:它对于从前门到街道的小距离并不精确,以至于它可以给出非零距离或在两点相同时引发异常 (cos_x > 1.0);这种情况可能是特殊情况。

警告 2:如果两点是对映的(直线路径穿过地心),则可能引发异常 (cos_x < -1.0)。任何对此担心的人都可以在执行 acos(cos_x) 之前检查 cos_x。

例子:

SFO (37.676, -122.433) 到 NYC (40.733, -73.917)

calcDist -> 2570.7758043869976
计算距离 -> 5038.599866130089
calc_dist_fixed -> 2570.9028268899356

美国政府网站(http://www.nhc.noaa.gov/gccalc.shtml) -> 2569

这个网站 (http://www.timeanddate.com/worldclock/distanceresult.html?p1=179&p2=224),我从中获得了 SFO 和 NYC 坐标,-> 2577

关于python - Django - 我怎样才能找到两个位置之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716017/

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