2012-02-21 3 views
3

기본적으로 3 개의 좌표가 있습니다.<@>이 PostgreSQL에서 올바른 거리를 반환하지 않는 이유는 무엇입니까?

  1. 클리블랜드, (35.255097, -84.86844) - 이것은 출발점입니다.
  2. 애틀랜타, 조지아 - (32.4608333, -84.9877778) - 이것은 그 근원에 훨씬 가깝습니다.
  3. 콜럼버스, 조지아 - (33.7488889, -84.3880556) - 이것은 분명히 멀리 떨어져 있습니다.

Here is a Google Map with these three points for comparison.

이제 Earthdistance module for Postgresql 내가 두 점 사이의 비행 마일을 얻기 위해 <@> 연산자를 사용합니다 사용하여.

SELECT 'Celeveland, TN' AS origin 
, '(35.255097,-84.86844)' AS origin_cords 
, city || ', ' || region AS dest 
, cords AS cords 
, cords <@> '(35.255097,-84.86844)'::point AS distance_miles 
FROM maxmind.city 
WHERE (region = 'GA' AND city ='Atlanta') OR (region = 'GA' AND city = 'Columbus') 
; 

그러나 이것은 내가 무엇을 얻을입니다 ...

 origin  |  origin_cords  |  dest  |   cords   | distance_miles 
----------------+-----------------------+--------------+--------------------------+------------------ 
Celeveland, TN | (35.255097,-84.86844) | Columbus, GA | (32.4608333,-84.9877778) | 18.952732930393 
Celeveland, TN | (35.255097,-84.86844) | Atlanta, GA | (33.7488889,-84.3880556) | 34.5888147812704 
(2 rows) 

그래서 그것은 나를 이야기하는 것은 콜럼버스, GA 클리블랜드 (18.95mi), 애틀란타, GA에 비해 TN (34.58mi에 가까운 것입니다) 비록 내가 분명히 그것이 사실이 아니라고 말할 수는 있지만. PostgreSQL 9.1 및 PostgreSQL 8.4에서 이러한 결과를 확인했습니다.

답변

3

역순 정렬 순서 PostGIS expects 위도는 먼저입니다.

UPD : 죄송합니다. 저는 Postgis 태그와 혼동 스러웠습니다. PostGIS 기능이 아닙니다. 당신이 링크 한 earthdistance 문서에서 : "첫 번째 구성 요소는도 단위로 경도을 나타내며 두 ​​번째 구성 요소는도 단위의 위도를 나타냅니다." 맞습니다. Google지도에서 작동하지만 반대 순서로 작동합니다.

UPD 2 : 우리는 전체가 GIS Stackexchange 인 것으로 보입니다.

+0

어떤 코드가 순서가 바뀌 었습니까? 나는 위도가 제일 먼저다고 믿습니다. 그것은 Google Maps에서 작동합니다. –

+0

업데이트를 참조하십시오. –

+0

업데이트를 이해하지 못하거나 내 질문에 대한 해결책을 찾거나 자신의 대답에 문제가 있습니까? –

관련 문제