반응형
현재 위치(경도,위도) 기반으로 범위 내 데이터를 구해야 할 이슈가 생겼다.
예시
- 현재 위치
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
** 참고한 사이트
반응형
'개발자의 삶 > MySQL' 카테고리의 다른 글
Mysql 중복 건에 대한 update - duplicate key (0) | 2021.03.03 |
---|---|
MySQL DATEDIFF 함수 (0) | 2018.05.10 |
MySQL 문자열 자르기 (0) | 2018.05.04 |
MySQL sql_mode 변경 (0) | 2018.04.27 |