티스토리 뷰

반응형
요즘 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에서 거리 계산하는데 보다 쉬울 것 같네요.. 
소스를 가져갈 수 있도록 다시 한번 정리할께요..

 
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함