티스토리 뷰
요즘 App을 개발하다보면 지도를 활용하는 어플이 많습니다.
특히 현재 위치에서 다른 위치 사이의 거리를 계산해야 하는 경우가 있는데요..
Google API를 사용할 경우, distanceBetween과 같은 메소드를 활용할 수도 있을 겁니다.
오늘 정리할 내용은 MySQL 쿼리를 활용해서 두 위치 사이의 거리를 계산하는 겁니다.
오랜만에 보는 몇가지 수학함수를 사용하면 간단히 결과가 나오네요..
다음과 같이 가정하고 쿼리를 만들어 보도록 하겠습니다.
현재 위치
위도 : nowLat
경도 : nowLng
지정 위치
위도: setLat
경도: setLng
> select (6371 * acos( cos( radians(nowLat) ) * cos( radians( setLat ) ) * cos( radians( setLng ) - radians(nowLng) ) + sin( radians(nowLat) ) * sin( radians( setLat ) ) ) ) as distance;
위와 같이 하면 거리에 대한 결과가 나옵니다.
실제 사례를 들어서 확인해 보도록 하죠..
현재 위치
위도 : 37.486273
경도 : 126.995882
지정 위치
위도: 35.177286
경도: 126.900247
위 숫자를 넣어서 실행해 보도록 하겠습니다.
> select (6371 * acos( cos( radians(37.486273) ) * cos( radians( 35.177286 ) ) * cos( radians( 126.900247 ) - radians(126.900247) ) + sin( radians(37.486273) ) * sin( radians( 35.177286 ) ) ) ) as distance;
결과는 다음과 같습니다.
소수점 2자리까지만 출력하기 위해 ROUND 함수를 처리해 봤습니다.
> select ROUND(6371 * acos( cos( radians(37.486273) ) * cos( radians( 35.177286 ) ) * cos( radians( 126.900247 ) - radians(126.900247) ) + sin( radians(37.486273) ) * sin( radians( 35.177286 ) ) ), 2) as distance;
256.75 Km라는 결과가 나옵니다.
위 예제를 잘 활용하면 MySQL을 활용하는 분들은 DB에서 거리 계산하는데 보다 쉬울 것 같네요..
소스를 가져갈 수 있도록 다시 한번 정리할께요..
특히 현재 위치에서 다른 위치 사이의 거리를 계산해야 하는 경우가 있는데요..
Google API를 사용할 경우, distanceBetween과 같은 메소드를 활용할 수도 있을 겁니다.
오늘 정리할 내용은 MySQL 쿼리를 활용해서 두 위치 사이의 거리를 계산하는 겁니다.
오랜만에 보는 몇가지 수학함수를 사용하면 간단히 결과가 나오네요..
다음과 같이 가정하고 쿼리를 만들어 보도록 하겠습니다.
현재 위치
위도 : nowLat
경도 : nowLng
지정 위치
위도: setLat
경도: setLng
> select (6371 * acos( cos( radians(nowLat) ) * cos( radians( setLat ) ) * cos( radians( setLng ) - radians(nowLng) ) + sin( radians(nowLat) ) * sin( radians( setLat ) ) ) ) as distance;
위와 같이 하면 거리에 대한 결과가 나옵니다.
실제 사례를 들어서 확인해 보도록 하죠..
현재 위치
위도 : 37.486273
경도 : 126.995882
지정 위치
위도: 35.177286
경도: 126.900247
위 숫자를 넣어서 실행해 보도록 하겠습니다.
> select (6371 * acos( cos( radians(37.486273) ) * cos( radians( 35.177286 ) ) * cos( radians( 126.900247 ) - radians(126.900247) ) + sin( radians(37.486273) ) * sin( radians( 35.177286 ) ) ) ) as distance;
결과는 다음과 같습니다.
소수점 2자리까지만 출력하기 위해 ROUND 함수를 처리해 봤습니다.
> select ROUND(6371 * acos( cos( radians(37.486273) ) * cos( radians( 35.177286 ) ) * cos( radians( 126.900247 ) - radians(126.900247) ) + sin( radians(37.486273) ) * sin( radians( 35.177286 ) ) ), 2) as distance;
256.75 Km라는 결과가 나옵니다.
위 예제를 잘 활용하면 MySQL을 활용하는 분들은 DB에서 거리 계산하는데 보다 쉬울 것 같네요..
소스를 가져갈 수 있도록 다시 한번 정리할께요..
'프로그래밍 > MySQL' 카테고리의 다른 글
MySQL에서 HINT를 사용해서 인덱스를 활용하기 (실행계획 explain 설명도 함께~) (0) | 2011.11.23 |
---|---|
MySQL 세팅 정보 확인 명령어 (0) | 2011.11.21 |
MySQL 중지 및 시작하는 명령어 (0) | 2011.09.19 |
MySQL 쿼리 결과를 파일로 저장하기 (0) | 2011.09.03 |
MySQL 데이터베이스 백업 및 복구 (0) | 2011.08.31 |
댓글