[英]GeoDjango + PostGIS calculates wrong Distances
我剛剛用GeoDjango安裝了PostGIS。 一切都很好,但現在我有一個問題,無法找到原因。
我有這樣的模型:
from django.contrib.gis.db import models
class Shop(models.Model):
name = models.CharField(max_length=80)
point = models.PointField(null=True, blank=True)
objects = models.GeoManager()
我指出了這個立場(49.794254,9.927489)。 然后我創建一個像這樣的點:
pnt = fromstr('POINT(50.084068 8.238381)')
這些點之間的距離應該約為125公里,但是當我這樣做時:
results = Shop.objects.distance(pnt)
print results[0].distance.km
我的結果總是超過60公里,所以返回190公里! 我的兩個積分的SRID都是4326 ......可能有些不對勁?
也許另一個有趣的事實,當我這樣做:
pnt.distance(shop.point)
它返回1.713790 ...結果。
我究竟做錯了什么? 我可以選擇使用python + django嗎? 如果有更好的解決方案,我就不需要使用PostGIS。
希望你能幫我!
克里斯
我剛剛在postgis中運行了這個查詢:
select round(CAST(ST_Distance_Sphere(ST_GeomFromText('POINT(49.794254 9.927489)',4326), ST_GeomFromText('POINT(50.084068 8.238381)',4326)) As numeric)/1000.0,2) as distance_km;
distance_km
-------------
190.50
結果實際上是190.50,所以你的190公里的結果似乎沒有錯
與這個令人敬畏的頁面相同的結果,有一個如何計算這個距離的簡要說明。
1.713790 ......結果似乎與srid的單位相同,換句話說,這個數字不是以米為單位。
編輯 Ooohh我剛剛看到你的問題,你錯誤地放置了lat和lon,在WKT格式中,Longitude首先出現,所以真正的查詢應該是:
select round(CAST(ST_Distance_Sphere(ST_GeomFromText('POINT(9.927489 49.794254)',4326), ST_GeomFromText('POINT(8.238381 50.084068)',4326)) As numeric)/1000.0,2) as distance_km;
distance_km
-------------
125.10
所以應該像這樣創建積分
POINT(9.927489 49.794254)
POINT(8.238381 50.084068)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.