2012-04-13 5 views
1

방금 ​​GeoDjango와 함께 PostGIS를 설치했습니다. 모든 것이 잘 작동했지만 지금은 문제가 있으며 그 이유를 찾을 수 없습니다.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)') 

이 점 사이의 거리가 ~ 125km에 대해해야한다,하지만 난이 수행 할 때

results = Shop.objects.distance(pnt) 
print results[0].distance.km 

을 너무 많이 항상 약 60km 받고 있어요 내 결과로 190km를 돌려줍니다! 두 지점의 내 SRID는 4326입니다. 아마도 그 점에 문제가 있습니까?

그리고 어쩌면 또 다른 흥미로운 사실 ​​

, 내가 이렇게 :

pnt.distance(shop.point) 

그 결과로 ... 1.713790 반환합니다.

내가 뭘 잘못하고 있니? 파이썬 + django 함께 사용할 수있는 모든 대안? 더 나은 솔루션이 있다면 PostGIS를 사용할 필요가 없습니다.

희망을 보내주세요.

크리스

답변

3

난 그냥 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에, 그래서 당신의 190km이와

같은 결과를 초래할으로는 아무 문제가 없습니다 보인다 멋진 page,이 거리를 계산하는 방법에 대한 간략한 설명이 있습니다.

1.713790 ... 결과가 srid의 동일한 단위에있는 것처럼 보입니다. 즉, 숫자는 미터가 아닙니다.

편집 문제는 실제 쿼리해야하므로, 경도 먼저 오는 WKT 형식으로, 위도와 경도를 잘못 Ooohh 내가 방금 본 :

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) 
+0

답장을 보내 주셔서 감사합니다. 포인트를 바꿔 쓰려고했지만, 어딘가에 대해 읽으면서 이미 게시물 앞에 시도했습니다. 내가 그들을 교환 할 때 나는 약 5000 개의 이상한 물건을 얻는다! 어떤 아이디어? geerjango에서 해결책을 찾지 못하면 내가 querys를 수동으로 수행 할 것입니다. – Chris

+0

그 중 하나를 바꿀 수 있다면 5925.95 KM을 정확하게 얻을 수 있습니다. 당신은 잘못 저장했습니다. –

+0

오케이, 실수 한거야, 지금 작동, 감사합니다 :)! – Chris

관련 문제