개발자의 삶/MySQL

[MySQL] 경도 위도 기반으로 범위 내 데이터 구하기

Kedric 2022. 8. 24. 15:40
반응형

현재 위치(경도,위도) 기반으로 범위 내 데이터를 구해야 할 이슈가 생겼다.

 

예시

- 현재 위치

37.579651 (Latitude)

126.977041 (Longitude)

- DB 정보

table : locationMap

위도 : MAPX_LAT

경도 : MAPY_LON

- 검색할 반경 : 20 = 20km (1km = 1)

SELECT
*
FROM locationMap
WHERE
 (6371*acos(cos(radians(37.579651))*cos(radians(MAPX_LAT))*cos(radians(MAPY_LON)
- radians(126.977041))+sin(radians(37.579651))*sin(radians(MAPX_LAT)))) < 20
limit 0, 30

 

위처럼 쿼리를 날리면

locationMap table에서 mapx_lat와 mapy_lon을 참고하여

현재 위치 기반으로 20km 이내에 있는 데이터를 30개 가져오게 된다.

 

추가적으로 가까운순으로 가져올 수도 있다.

SELECT
*
FROM locationMap
WHERE
(6371*acos(cos(radians(37.579651))*cos(radians(MAPX_LAT))*cos(radians(MAPY_LON)
- radians(126.977041))+sin(radians(37.579651))*sin(radians(MAPX_LAT)))) < 20
order by (6371*acos(cos(radians(37.579651))*cos(radians(MAPX_LAT))*cos(radians(MAPY_LON)
- radians(126.977041))+sin(radians(37.579651))*sin(radians(MAPX_LAT)))) asc
limit 0, 30

 

 

** 참고한 사이트

https://pnot.tistory.com/8

반응형