Django& Postgis:使用ST_Distance_sphere进行距离查找

时间:2010-06-30 05:55:07

标签: django postgis geodjango

在Django documentation中,我读到了这个:

  

在每个距离查找但是dwithin时,可以包含一个可选的第三个元素“spheroid”,告诉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\\\\007H@\'::bytea)) <= 10000.0'}]

由于

1 个答案:

答案 0 :(得分:0)

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

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

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