컨텐츠 바로가기

[GoogleMap] double형 위도 경도로 실제 거리 구하기

http://metashower.egloos.com/313035

구글맵을 사용하다보면 위도와 경도로 실제 거리를 구해야할 때가 많은데요

실제 경도는
1도 길이  88907.949 미터
1분 길이   1481.799 미터
1초 길이      24.697 미터

실제 위도는
1도 길이    110979.309 미터
1분 길이      1849.655 미터
1초 길이        30.828  미터

이렇습니다. 

그런데 저걸 이용해서 실제거리를 구할려면 60진법으로 주어진 위도와 경도값이 있어야 합니다.

36도 25분 18초  이런식으로 위도와 경도가 주어져야 하죠


위사이트를 들어가시면 60진수 위도 경도를 10진수 로 변환해주는 사이트가 있습니다.

하지만 !!! 개발을 하면서 실제로 저 변환과정의 알고리즘이 필요할 때가 있습니다. 

double형 즉 10진수로 표현된 위도와 경도를 60진수로 바꿔서 위상차를 구해야 할 때 입니다. 즉 두점 사이의 거리를 구할 때

소스 코드 입니다.

  1. public double calDistance(double lat1, double lon1, double lat2, double lon2){  
  2.     
  3.     double theta, dist;  
  4.     theta = lon1 - lon2;  
  5.     dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1))   
  6.           * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));  
  7.     dist = Math.acos(dist);  
  8.     dist = rad2deg(dist);  
  9.       
  10.     dist = dist * 60 * 1.1515;   
  11.     dist = dist * 1.609344;    // 단위 mile 에서 km 변환.  
  12.     dist = dist * 1000.0;      // 단위  km 에서 m 로 변환  
  13.   
  14.     return dist;  
  15. }  
  16.   
  17.     // 주어진 도(degree) 값을 라디언으로 변환  
  18. private double deg2rad(double deg){  
  19.     return (double)(deg * Math.PI / (double)180d);  
  20. }  
  21.   
  22.     // 주어진 라디언(radian) 값을 도(degree) 값으로 변환  
  23. private double rad2deg(double rad){  
  24.     return (double)(rad * (double)180d / Math.PI);  

lat1 , lon1 에 첫지점의 위도와 경도  lat2와 lon2에 목적지의 위도와 경도를 넣고

calDistance 함수를 실행하고 리턴되는 dist 변수가 실제 거리로 튀어나옵니다. 

단위는 m 이고요

언어마다 Math 클래스의 함수가 조금씩 다른데 때에 맞는걸로 쓰시면 됩니다.

어때요 정말 쉽죠?

덧글|덧글 쓰기|신고