gpt4 book ai didi

django - 如何使用geodjango返回距点最短距离的记录?

转载 作者:行者123 更新时间:2023-12-04 15:25:13 24 4
gpt4 key购买 nike

我正在使用 geodjango 并在我的数据库中有一组点。要获取某个区域内的点查询集,我使用以下命令:

queryset = Spot.objects.filter(point__distance_lte=(origin, distance_m))

我的问题是我怎样才能从我通过它的点返回一个点(具有 最低距离 的点)?

编辑

我应该提到我正在传递坐标并想要创建一个 Point反对他们。然后将该点作为原点传入并对其进行过滤。
例如我试过:
from spots.models import *
from django.contrib.gis.geos import *

origin = Point(28.011030, -26.029430)
distance_m = 1000

queryset = Spot.objects.filter(point__distance_lte=(origin, distance_m))
for q in queryset:
print q.distance

这段代码给了我这个错误:
Traceback (most recent call last):
File "<console>", line 2, in <module>
AttributeError: 'Spot' object has no attribute 'distance'

有趣的是,如果我执行以下操作:
origin = Spot.objects.get(name='Montecasino').point
distance_m = 1000

for city in Spot.objects.distance(origin):
print(city.name, city.distance)

(u'Design Quarter Parking', Distance(m=677.347841801))
(u'Montecasino', Distance(m=0.0))
(u'Fourways', Distance(m=1080.67723755))

最佳答案

终于从GeoDjango distance filter with distance value stored within model - query的线索中找到了解决方案这让我想到了这个 post .从这些信息中,我能够了解到您 必须指定 测量参数 在您的距离查询中。
您将在下面的代码段中看到,我导入了 测量为 D .然后在查询中使用它。
如果你不指定它,你会得到这个错误:

ValueError: Tuple required for `distance_lte` lookup type.

只取距离最小的点,我使用了 order_by('distance')[:1][0]
from spots.models import *
from django.contrib.gis.geos import *
from django.contrib.gis.measure import D

distance_m = 20000
origin = Point(28.011030, -26.029430)

closest_spot = Spot.objects.filter(point__distance_lte=(origin, D(m=distance_m))).distance(origin).order_by('distance')[:1][0]

关于django - 如何使用geodjango返回距点最短距离的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11557182/

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