2010-09-03 48 views
1

我在模型中存储名为“coordinates”的PointField字段。GeoDjango中的地理模式远景 - PostGIS 1.5

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

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

事情是,当字段“坐标”是类型几何,它运作良好。但是如果我包含选项“geography = True”,为了获得更好的精度,它会返回一个非常小的值,即使我指出要以km为单位打印它。

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

谢谢

回答

0

追加。将distance()添加到查询集的结尾会导致geoqueryset中的每个对象都使用距离对象进行注释。您可以使用该距离对象以不同单位获得距离。

由于距离属性是距离对象,因此您可以很容易地用您选择的单位表示值。例如, city.distance.mi是距离值英里city.distance.km 是以千米

但是在Django 1.9它们moved the goal posts距离值,同时追加.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

相关问题