상세 컨텐츠

본문 제목

[Java] double형 위도 - 경도 실제거리 구하기

Java

by 메타샤워 2023. 7. 17. 17:49

본문

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

 
실제 경도는
1도 길이  88907.949 미터
1분 길이   1481.799 미터
1초 길이      24.697 미터
 
실제 위도는
1도 길이    110979.309 미터
1분 길이      1849.655 미터
1초 길이        30.828  미터
 
이렇습니다. 
 
그런데 저걸 이용해서 실제거리를 구할려면 60진법으로 주어진 위도와 경도값이 있어야 합니다.
36도 25분 18초  이런식으로 위도와 경도가 주어져야 하죠
하지만 !!! 개발을 하면서 실제로 저 변환과정의 알고리즘이 필요할 때가 있습니다. 
double형 즉 10진수로 표현된 위도와 경도를 60진수로 바꿔서 위상차를 구해야 할 때 입니다. 즉 두점 사이의 거리를 구할 때
 
소스 코드 입니다.
 
 
public double calDistance(double lat1, double lon1, double lat2, double lon2){  
    
    double theta, dist;  
    theta = lon1 - lon2;  
    dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1))   
          * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));  
    dist = Math.acos(dist);  
    dist = rad2deg(dist);  
      
    dist = dist * 60 * 1.1515;   
    dist = dist * 1.609344;    // 단위 mile 에서 km 변환.  
    dist = dist * 1000.0;      // 단위  km 에서 m 로 변환  
  
    return dist;  
}  
  
    // 주어진 도(degree) 값을 라디언으로 변환  
private double deg2rad(double deg){  
    return (double)(deg * Math.PI / (double)180d);  
}  
  
    // 주어진 라디언(radian) 값을 도(degree) 값으로 변환  
private double rad2deg(double rad){  
    return (double)(rad * (double)180d / Math.PI);  
}
lat1 , lon1 에 첫지점의 위도와 경도  lat2와 lon2에 목적지의 위도와 경도를 넣고
 
calDistance 함수를 실행하고 리턴되는 dist 변수가 실제 거리로 튀어나옵니다. 
 
단위는 m 이고요
 
언어마다 Math 클래스의 함수가 조금씩 다른데 때에 맞는걸로 쓰시면 됩니다.
 
어때요 정말 쉽죠?

'Java' 카테고리의 다른 글

[Java] JVM 이란.  (0) 2023.07.17

관련글 더보기