2010-06-30 94 views
2

在Django中documentation远程查找,我读了这一点:的Django和POSTGIS:使用ST_Distance_sphere

在每个远程查找,但dwithin,可选的第三个元素,“球体”,可能包含告诉GeoDjango内置使用使用大地坐标系统的场更精确的球体距离计算功能(例如,将使用ST_Distance_Spheroid代替ST_Distance_Sphere)。

但是,当我尝试在Postgis 1.5数据库上使用'distance_lte'执行距离查找时,将使用“ST_Distance”而不是“ST_Distance_sphere”执行查询。为什么?我忘了什么吗?

stations = Station.objects.filter(point__distance_lte=(pnt, D(km=10))).count() 
from django.db import connection 
print connection.queries 

它打印此:

[{'time': '0.144', 'sql': 
    'SELECT "spatial_ref_sys"."srid", "spatial_ref_sys"."auth_name", "spatial_ref_sys"."auth_srid", "spatial_ref_sys"."srtext", "spatial_ref_sys"."proj4text" FROM "spatial_ref_sys" WHERE "spatial_ref_sys"."srid" = 900913 '}, 
{'time': '0.903', 'sql': 
    'SELECT COUNT(*) FROM "prices_station" WHERE ST_Distance("prices_station"."point", ST_GeomFromEWKB(E\'\\\\001\\\\001\\\\000\\\\000 1\\\\277\\\\015\\\\000\\\\270\\\\036\\\\205\\\\353Q\\\\270\\\\372\\\\277H\\\\341z\\\\024\\\\256\\\\[email protected]\'::bytea)) <= 10000.0'}] 

感谢

+0

我得到同样的问题。你有没有想过这个? – 2011-07-29 06:22:12

回答

0

那么它看起来像你已经忘记了什么!第三个参数指定应该使用球体函数。

stations = Station.objects.filter(
    point__distance_lte=(pnt, D(km=10), True)).count() 

还值得注意的是,使用dwithin实际上可能是更好的选择。