簡體   English   中英

GeoDjango + PostGIS計算錯誤的距離

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM