Backend/Database & SQL

중심 좌표로 부터 거리 구하기 / 가까운 거리 순으로 정렬

keepbang 2021. 6. 8. 16:03

지도에 마커를 표시할 때 현재 위치로부터의 거리나 가장 가까운 데이터 10개만 표시하고자 할 경우를 알아보았다.

 

SELECT
	(6371 * acos(cos(CAST(TARGET_LAT AS FLOAT) * 3.141592653589793 / 180.0) * cos(CENTER_LAT * 3.141592653589793 / 180.0) 
		               * cos((CENTER_LON * 3.141592653589793 / 180.0) - (CAST(TARGET_LON AS FLOAT) * 3.141592653589793 / 180.0)) + sin(CAST(TARGET_LAT AS FLOAT) * 3.141592653589793 / 180.0) 
		               * sin(CENTER_LAT * 3.141592653589793 / 180.0))) as distance
FROM TALBE

 

TARGET_LAT, TARGET_LON은 지도위에 표시해야할 마커나 현재 자신위치로부터 떨어진 POINT의 위도,경도이다.
CENTER_LON, CENTER_LAT은 현재 자신위치(중심 좌표)다.
앞에 6371은 지구의 반지름 값이고 3.141592653589793은 원주율이다.

 

거리는 km로 계산되기때문에 만약 사용한다면 ROUND같은 함수로 변경해 사용해야할듯 하다.

 

여기서 가까운 거리순으로 정렬을 한다고하면 위에 구한 distance를 order by에 넣어주면 끝!!

'Backend > Database & SQL' 카테고리의 다른 글

[SQL] 게시판 다음글 / 이전글 SQL문  (0) 2021.04.07