Django django.contrib.gis.db.models.functions.Distance以英尺而不是米为单位返回值
问题描述
以下代码将正确筛选:
def nearby(self, latitude, longitude, proximity=None):
"""Get nearby Merchants.
Custom queryset method for getting merchants associated with
nearby places.
Returns:
A queryset of ``Merchant`` objects.
"""
point = Point(latitude, longitude)
# we query for location nearby for places first and then
# annotate with distance to the same place
return self.filter(
places__location__distance_lte=(point, D(ft=proximity))
).annotate(distance=models.Min(Distance('places__location', point)))
但
返回的值models.Min(Distance('places__location', point))
以米为单位。
可以把它放在脚上吗?
解决方案
如果我们查看Distance
documentation,我们将看到以下内容:
因为Distance属性是一个距离对象,所以您可以轻松地用您选择的单位来表示该值。
虽然这不是entirely true:
这两者之间的关系并不密切。Docs确实说它"返回"距离对象,但还有一个额外的步骤:
简单地说,它需要在数据库中执行。它将使用数据库函数(例如postgis ST_Distance)计算距离,然后将其作为
django.contrib.gis.db.models.functions.Distance
是一个数据库函数,它接受两个表达式(可能包括数据库字段名),并返回一个可用作查询一部分的Func
对象。django.contrib.gis.measure.Distance
对象带回
综上所述,您可以这样做:
... .annotate(distance=models.Min(Distance('places__location', point).ft))
相关文章