GeoDjango中的地理模式距离 - PostGIS 1.5

时间:2010-09-03 17:33:07

标签: django postgis geodjango

我在模型中存储名为“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打印它。

如何才能获得正确的地理计算?

由于

1 个答案:

答案 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