gps 경도 위도 반경내 위치 구하기 질문 드립니다 1 6 8,149

by 오돌 [SQL Query] [2014.08.05 10:39:11]


안녕하세요 처음으로 이렇게 글을 써보네요 ㅎ

제가 wgs84 좌표 (예: 37.4917910, 127.4875970)의 중심점을 가지고

오라클 쿼리를 이용하여 반경내(예:500m) 좌표값들을 얻어와야하는데

조건절을 어떻게 계산해야 하는지 부탁드립니다 ㅠ

pi_x, pi_y는 db내 좌표값입니다.

select pi_x,pi_y

from poi_item

where ...

답변 부탁드립니다 ㅠ

by 약쟁이총각 [2014.08.05 10:58:12]

http://www.gurubee.net/article/53246 <--- 확인해보세요


by 오돌 [2014.08.05 11:12:53]

답변 감사드립니다 링크 보고 해봤는데..

where sqrt(power(37.4917910 - pi_x,2) + power(127.4875970 - pi_y,2)) <= 500;

하니 전체검색이 되네요 ㅠ 뭐가 잘못된건지..


by 오돌 [2014.08.05 11:19:05]

혹시 gps좌표는 검색을 다르게해야하나요?


by 마농 [2014.08.05 11:21:29]

서로 비교하는 단위가 다르잖아요.
좌표의 단위와 거리의 단위가 다르니
좌표를 거리로 환산해서 비교하거나
거리를 좌표로 환산해서 비교하거나 해야겟죠.


이런 계산식은 한계점이 있을 듯 하구요.
Spatial SQL 을 이용해 보세요.


by 마농 [2014.08.05 12:28:11]
SELECT pi_x, pi_y
     , SQRT( POWER(( 37.4917910 - pi_x) * 110979.309, 2)
           + POWER((127.4875970 - pi_y) *  88907.949, 2)
           ) z
  FROM t
     , (SELECT     37.4917910 v_x    -- 기준좌표-위도
             ,    127.4875970 v_y    -- 기준좌표-경도
             , 110979.309     r_x    -- 위도-거리 환산계수
             ,  88907.949     r_y    -- 경도-거리 환산계수
             ,    500.000     v_z    -- 검색반경
          FROM dual
        )
 WHERE SQRT( POWER((v_x - pi_x) * r_x, 2)
           + POWER((v_y - pi_y) * r_y, 2)
           ) <= v_z
   AND pi_x BETWEEN v_x - v_z / r_x AND v_x + v_z / r_x
   AND pi_y BETWEEN v_y - v_z / r_y AND v_y + v_z / r_y
 ORDER BY z
;

 


by 오돌 [2014.08.05 14:48:11]

와 정말정말 감사합니다 테스트해보고 쿼리 이해해 보겠습니다^^

정말 감사드립니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입