Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django&;Postgis:使用ST_Distance_sphere查找距离_Django_Postgis_Geodjango - Fatal编程技术网

Django&;Postgis:使用ST_Distance_sphere查找距离

Django&;Postgis:使用ST_Distance_sphere查找距离,django,postgis,geodjango,Django,Postgis,Geodjango,在Django,我读到: 在除dwithin外的每个距离查找中,可能会包含可选的第三个元素“球体”,以告知GeoDjango在具有大地坐标系的字段上使用更精确的球体距离计算函数(例如,将使用ST_distance_Sphere代替ST_distance_Sphere) 但是,当我尝试在Postgis 1.5数据库上使用“distance\u lte”执行距离查找时,查询是使用“ST\u distance”而不是“ST\u distance\u sphere”执行的。为什么?我忘了什么吗 stat

在Django,我读到:

在除dwithin外的每个距离查找中,可能会包含可选的第三个元素“球体”,以告知GeoDjango在具有大地坐标系的字段上使用更精确的球体距离计算函数(例如,将使用ST_distance_Sphere代替ST_distance_Sphere)

但是,当我尝试在Postgis 1.5数据库上使用“distance\u lte”执行距离查找时,查询是使用“ST\u distance”而不是“ST\u distance\u 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'}]
[{'time':'0.144','sql':
'从“spatial_ref_sys”中选择“spatial_ref_sys”。“srid”,“spatial_ref_sys”。“auth_name”,“spatial_ref_sys”。“auth_srid”,“spatial_ref_sys”。“srtext”,“spatial_ref_sys”。“proj4text”其中“spatial_ref_sys”。“srid”=900913'},
{'time':'0.903','sql':

'从“价格站”中选择计数(*),其中距离为(“价格站”。“点”,从EWKB(E\'\\\\001\\\\001\\\\\000\\\\\000 1\\\\277\\\\\\015\\\\\000\\\\\270\\\\\036\\\\\205\\\\\\353Q\\\\\270\\\\372\\\\277H\\\\341z\\\\\\\024\\\\\\256\\\\\\007H\\::bytea))看起来您确实忘记了什么!第三个参数指定应该使用球体函数

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

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

我也遇到了同样的问题。你知道这一点吗?