首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >GeoDjango,and和distance_lt之间的区别?

GeoDjango,and和distance_lt之间的区别?
EN

Stack Overflow用户
提问于 2010-02-10 15:12:27
回答 1查看 4K关注 0票数 17

使用geoDjango,两者有什么区别

代码语言:javascript
复制
myObj.objects.filter(point__dwithin(...etc.))   

代码语言:javascript
复制
myObj.objects.filter(point__distance_lt(...etc.))  

它们是同一件事,还是在做微妙的不同的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-10 20:33:17

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

  • 我查看了他们用来测试数据库查询的unit tests,但它们没有给出真正的提示(给我)。
  • 我尝试比较生成的SQL:

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

代码语言:javascript
复制
Place.objects.filter(location__distance_lt=(p.location, D(km=1))).query.as_sql()

我得到了这个生成的SQL:

代码语言:javascript
复制
SELECT (some_fields_here)
FROM "places_place" 
WHERE ST_distance_sphere("places_place"."location", %s) < 1000.0

当我尝试对__dwithin,执行相同的操作时,我得到了一个错误:

代码语言:javascript
复制
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对象:

代码语言:javascript
复制
Place.objects.filter(location__dwithin=(p.location, 1)).query.as_sql()

这导致了

代码语言:javascript
复制
SELECT (some fields here) 
FROM "places_place" 
WHERE ST_DWithin("places_place"."location", %s, 1)

摘要:

__dwithin

  • 将度数值作为距离parameter.
  • uses ST_DWithin

函数。

__distance_lt

  • 可以取其他距离值;)。
  • 使用ST_distance_sphere SQL函数。

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

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2235043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档