gpt4 book ai didi

python - 如何过滤经纬度坐标落在一定半径内的django模型

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

我有以下模型。

class Location(models.Model):
name = models.CharField(max_length = 128, blank = True)
address =models.CharField(max_length = 200, blank= True)
latitude = models.DecimalField(max_digits=6, decimal_places=3)
longitude = models.DecimalField(max_digits=6, decimal_places=3)

def __unicode__(self):
return self.name

如果我当前的纬度和经度是:

current_lat = 43.648
current_long = 79.404

我做了一些研究并发现了 Haversine Equation它计算两个位置坐标之间的距离。下面是我找到的等式:

import math

def distance(origin, destination):
lat1, lon1 = origin
lat2, lon2 = destination
radius = 6371 # km

dlat = math.radians(lat2-lat1)
dlon = math.radians(lon2-lon1)
a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(lat1)) \
* math.cos(math.radians(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
d = radius * c

return d

我想返回 10 公里半径内的所有 Location 对象,如何过滤它以使其只返回这 10 公里半径内的所有 Location 对象?

LocationsNearMe = Location.objects.filter(#This is where I am stuck)

无论如何,我是否可以将 Haversine 方程应用到过滤中,以便它只返回落在 10 公里半径内的位置对象?

我正在寻找详细的答案。感谢您的帮助。

最佳答案

您可以使用filter 进行范围查询。

LocationsNearMe = Location.objects.filter(latitude__gte=(the minimal lat from distance()),
latitude__lte=(the minimal lat from distance()),
(repeat for longitude))

不幸的是,这会以几何正方形(而不是圆形)的形式返回结果

关于python - 如何过滤经纬度坐标落在一定半径内的django模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17682201/

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