DBMS 위도경도를 이용한 두 위치간 거리 구하기

현재 프로젝트에서 사용할 일이 있어서 
검색해보았다.

Mysql 일경우

두 지점의 위도(latitude)와  경도(longitude)를 알고 있을 경우,
직경거리를 구항 경우가 발생하였다.
대략의 구조를 기술한다.
1. 한글 주소를 이용 위도와 경도를 구한다.
    - 네이버 오픈 api 를 이용, 개발 키를 발급 받아서 처리가능하다
2. 주소의 위도와 경도를 저장한다.
3. 비교할 주소의 위도와 경도를 이용 아래 쿼리를 수행한다.
    위치1(lat1,lng1)과 위치2(lat2, lng2)의 거리가 5km 이하인 목록을 20개 검색
 SELECT id, ( 6371 * acos( cos( radians(lat1) ) * cos( radians( lat2 ) )
          * cos( radians( lng2 ) - radians(lng1) )
          + sin( radians(lat1) ) * sin( radians( lat2 ) ) ) ) AS distance
  FROM markers
  HAVING distance < 5
  ORDER BY distance
  LIMIT 0 , 20;

Altibase 일경우

-- ROUND(6371000.0*ACOS((SIN((3.141592/180)*Y좌표칼럼)*SIN((3.141592/180)*현재위치의Y좌표))+(COS((3.141592/180)*Y좌표칼럼)*COS((3.141592/180)*현재위치의Y좌표)*COS((3.141592/180)*(X좌표칼럼-현재위치의X좌표))))/1000,2) <= 500(500미터이내)

select
    a.*
from
(
    select poi_nm, area_id,
    ROUND(6371000.0*ACOS((SIN((3.141592/180)*gps_ycrd)*SIN((3.141592/180)*36.3518983))+(COS((3.141592/180)*gps_ycrd)*COS((3.141592/180)*36.3518983)*COS((3.141592/180)*(gps_xcrd-127.3813287))))/1000, 2) as dist
    from TB_DRT_USER_POI
) a
where a.dist <= 500
ORDER BY a.dist


-- 펌