구글 위경도 좌표 테이블에서 거리를 계산하는 MySql쿼리=> MSSql 변환 문의 드립니다.
검색하다 MySql 로 된 쿼리를 구해서 변환해봤는데요 맞는건지 알수가 없어서요.. ㅠㅠ
데이터 추려내서 설정된 반경 XXkm 이내의 정보만 데이터 추리는데 사용하려고 합니다.
Latitude : 경도
Longitude : 위도
# MySql 쿼리
-- 기준점 (127.0000000, 37.0000000)에서 DB에 저장된 지점의 거리를 계산하
SELECT id
, (6371 * acos(cos(radians(37)) * cos(radians(Latitude)) * cos(radians(Longitude) - radians(127)) + sin(radians(37)) * sin(radians(Latitude )))) AS distance
FROM TEST_TABLE
HAVING distance < 5
ORDER BY distance LIMIT 0 , 5
위 쿼리는 반경 TEST_TABLE에서 기준점에서 반경 5Km 이내의 id를 거리가 가까운 순서로 5개 가져오는 쿼리
참고 : http://code.google.com/intl/ko/apis/maps/articles/phpsqlsearch_v3.html
Comment 3
-
자유인s
2013.09.27 09:18
-
자유인s
2013.09.27 09:23
추가로 6371 은 아래 정보입니다.
6371 => Km(kilometers) 3959 => miles
-
처리짱
2013.09.30 14:03
구글 API로 두점 사이에 거리를 구하면 가장 맞겠지만 굳이 거리를 계산해야 한다면 아래와 같이...
DECLARE @dx FLOAT
DECLARE @dy FLOATSET @dx = (@dStartY - @dDestY) * 111.306481340166
SET @dy = (@dStartX - @dDestX) * cos((@dStartY + @dDestY) * 0.00872663800) * 111.306481340166RETURN sqrt(@dx*@dx + @dy*@dy)
이 쿼리가 맞을까요.. 더좋은 방법이 있을까요^^;
Select Top 10 *
From (
SELECT id
, (6371 * acos(cos(radians(37)) * cos(radians(Latitude)) * cos(radians(Longitude) - radians(127)) + sin(radians(37)) * sin(radians(Latitude )))) AS distance
FROM TEST_TABLE
) T
where T. distance < 5
order by T. distance