뉴질랜드 다이어리(NZ Diary) 라빠
Mysql query 를 이용한 좌표간 거리계산. 본문
요즘 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에서 거리 계산하는데 보다 쉬울 것 같네요..
쿼리 정리
> select (6371 * acos( cos( radians(nowLat) ) * cos( radians( setLat ) ) * cos( radians( setLng ) - radians(nowLng) ) + sin( radians(nowLat) ) * sin( radians( setLat ) ) ) ) as distance;
> 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;
'개발' 카테고리의 다른 글
Google Maps Android API v2 사용방법 (0) | 2014.05.19 |
---|---|
Mysql TIMESTAMP to UNIX timestamp (0) | 2014.05.19 |
Action Bar 사용방법 (0) | 2014.05.19 |
RGB 색상표 (0) | 2014.05.19 |
Android™ 1.5 android.R.drawable Icon Resources (0) | 2014.05.19 |