2010-09-03 24 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

相關問題