1

我在模型中存储了一个名为“坐标”的 PointField 字段。

然后,我在命令解释器中查询与给定实例最近的实例,并打印其名称和距离(以 km 为单位)。

[(p.name, p.distance.m) for p in Model_Name.objects.filter(
  coordinates__distance_lte=(pnt, 1000000)).distance(pnt)]

问题是,当“坐标”字段是几何图形时,它工作得很好。但是,如果我包含选项“geography=True”以获得更好的精度,它会返回一个小得多的值,即使我表示要像以前一样以公里为单位打印它。

我怎样才能得到正确的地理计算?

谢谢

4

1 回答 1

0

附加 . distance () 到查询集的末尾将导致 geoqueryset 中的每个对象都使用距离对象进行注释。您可以使用该距离对象来获取不同单位的距离。

因为距离属性是一个距离对象,所以您可以轻松地以您选择的单位表示该值。例如,city.distance.mi 是以英里为单位的距离值,city.distance.km 是以公里为单位的距离值

然而在 django 1.9 他们移动了球门柱,而附加 .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 中有一个更快的方法,而不是使用:dwithin

于 2016-04-30T05:41:59.357 回答