google_adsense2


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

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

실제 경도는
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 클래스의 함수가 조금씩 다른데 때에 맞는걸로 쓰시면 됩니다.

어때요 정말 쉽죠?

덧글

  • 지나가는행잉 2014/08/31 00:20 # 삭제 답글

    초분초당 미터 값이 위도와 경도가 바뀐 것 같습니다.
  • 쩌리 2014/09/12 17:33 #

    엇 그러네요 수정 하겠씁니다.
  • 지니가던행인 2015/07/07 10:34 # 삭제 답글

    caldistance 메소드의 리턴값이 void 입니다.
  • 쩌리 2015/07/08 09:33 #

    엇 그러네요 수정 했어요 ^^
    감사합니다 ㅋㅋ
  • 지니가던행인 2015/07/07 10:35 # 삭제 답글

    덧글이 입력이 안되서 광클했더니 여러개가 입력됬네요;;

    비밀번호를 잊었으니 하나만두고 삭제해주세요ㅠ
  • 민경아빠 2016/01/11 17:40 # 삭제 답글

    잘 보도 도움 받고 갑니다.
  • 민경아빠 2016/01/11 17:40 # 삭제 답글

    잘 보도 도움 받고 갑니다.
  • 참고하는행인 2016/05/13 16:41 # 삭제 답글

    잘 보고 갑니다.감사합니다.
  • 참고하는행인 2016/05/13 16:42 # 삭제 답글

    잘 보고 갑니다.감사합니다.
  • 2016/05/13 16:42 # 삭제 답글 비공개

    비공개 덧글입니다.
  • starsky 2016/12/12 14:34 # 삭제 답글

    좋은 참고 되었습니다. 그러나 마지막 멘트에 동의하기는 어렵군요
  • 쩌리짱~ 2017/01/11 11:12 # 삭제 답글

    잘 보고 갑니다~
    새해 복 많이 받으세요!
  • 의명애비 2017/06/15 18:33 # 삭제 답글

    잘 고보 갑니다. 많은 도움고받 갑니다.
  • 해리 2017/07/18 17:26 # 삭제 답글

    dist 계산 시 왜 사인값과 코사인값이 무얼 의미하며, 왜 사인끼리 코사인끼리 곱해서 더하면 결과가 나오는지 알수 있을까요. 자세한 설명 부탁드립니다..ㅠㅠ
  • 감사요 2018/04/10 14:02 # 삭제 답글

    자바를 몰라서.. 180 뒤에 붙은 d 는 무엇인가요?
댓글 입력 영역


google_adsense