gpt4 book ai didi

django - GeoDjango,dwithin 和 distance_lt 之间的区别?

转载 作者:行者123 更新时间:2023-12-03 01:36:57 31 4
gpt4 key购买 nike

使用geoDjango,有什么区别

myObj.objects.filter(point__dwithin(...etc.))   

myObj.objects.filter(point__distance_lt(...etc.))  


它们是同一件事,还是做着细微不同的事情?

最佳答案

好吧,我做了一些研究,但我不知道结果是否有任何用处;)

  • 我查看了unit tests他们用来测试数据库查询,但他们没有(对我)给出真正的提示。

  • 我尝试比较生成的 SQL:

我已经有一个使用 PostgreSQL 数据库的地理应用程序。当我使用 __distance_lt 执行此查询时:

Place.objects.filter(location__distance_lt=(p.location, D(km=1))).query.as_sql()

我得到这个生成的 SQL:

SELECT (some_fields_here)
FROM "places_place"
WHERE ST_distance_sphere("places_place"."location", %s) < 1000.0

当我尝试对 __dwithin 使用 do 时,出现错误:

Place.objects.filter(location__dwithin=(p.location, D(km=1))).query.as_sql()

TypeError: Only numeric values of degree units are allowed on geographic DWithin queries.

所以我必须将查询更改为不使用 D 对象:

Place.objects.filter(location__dwithin=(p.location, 1)).query.as_sql()

结果

SELECT (some fields here) 
FROM "places_place"
WHERE ST_DWithin("places_place"."location", %s, 1)
<小时/>

摘要:

__dwithin
- 将度数作为距离参数。
- 使用ST_DWithin SQL 函数。

__distance_lt
- 可以采用其他距离值;)。
- 使用ST_distance_sphere SQL 函数。

顺便说一句,我对两个查询都得到了不同的结果,但我想这主要是因为我不知道要使用哪个“度”值。

关于django - GeoDjango,dwithin 和 distance_lt 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2235043/

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