我在模型中存储名为“coordinates”的PointField字段。
然后,我在命令解释器中查询给定的实例,并以km为单位打印其名称和距离。
[(p.name, p.distance.m) for p in Model_Name.objects.filter(
coordinates__distance_lte=(pnt, 1000000)).distance(pnt)]
问题是,当字段“坐标”是种类几何时,它运作良好。但是如果我包含选项“geography = True”,为了获得更好的精度,它会返回一个小得多的值,即使我指示像以前那样用km打印它。
如何才能获得正确的地理计算?
由于
答案 0 :(得分:0)
将{。{3}}()追加到查询集的末尾将导致geoqueryset中的每个对象都使用距离对象进行注释。并且您可以使用该距离对象来获得不同单位的距离。
因为distance属性是Distance对象,所以很容易 以您选择的单位表达价值。例如, city.distance.mi是以英里为单位的距离值和city.distance.km 是以千米为单位的距离值
然而在django 1.9中他们distance,而附加.distance()仍然有效,现在推荐的方法是
from django.contrib.gis.db.models.functions import Distance
[ (p.name, p.distance.m) for p in Model_Name.objects.filter(
coordinates__distance_lte=(pnt, 1000000)
).annotate(distance=Distance('point', pnt))]
最后,不是使用coordinates__distance_lte
,而是在postgis和mysql 5.7中提供了更快的方法:moved the goal posts