관리 메뉴

웹개발자의 기지개

[java] 위도,경도 좌표 두 지점사이의 거리 구하기 본문

Java

[java] 위도,경도 좌표 두 지점사이의 거리 구하기

http://portfolio.wonpaper.net 2020. 6. 26. 05:20

x, y 위도 경도 좌표 사이에서 두 지점사이의 거리를 구하는 아주 좋은 소스가 있어서 정리해 본다.

 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class LocationDistance {
 
    public static void main(String[] args) {
 
        // 마일(Mile) 단위
        double distanceMile =
            distance(37.504198127.04796737.501025127.037701"");
         
        // 미터(Meter) 단위
        double distanceMeter =
            distance(37.504198127.04796737.501025127.037701"meter");
         
        // 킬로미터(Kilo Meter) 단위
        double distanceKiloMeter =
            distance(37.504198127.04796737.501025127.037701"kilometer");
         
        System.out.println(distanceMile) ;
        System.out.println(distanceMeter) ;
        System.out.println(distanceKiloMeter) ;
         
         
    }
              
    /**
     * 두 지점간의 거리 계산
     *
     * @param lat1 지점 1 위도
     * @param lon1 지점 1 경도
     * @param lat2 지점 2 위도
     * @param lon2 지점 2 경도
     * @param unit 거리 표출단위
     * @return
     */
    private static double distance(double lat1, double lon1, double lat2, double lon2, String unit) {
         
        double theta = lon1 - lon2;
        double 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;
         
        if (unit == "kilometer") {
            dist = dist * 1.609344;
        } else if(unit == "meter"){
            dist = dist * 1609.344;
        }
 
        return (dist);
    }
     
 
    // This function converts decimal degrees to radians
    private static double deg2rad(double deg) {
        return (deg * Math.PI / 180.0);
    }
     
    // This function converts radians to decimal degrees
    private static double rad2deg(double rad) {
        return (rad * 180 / Math.PI);
    }
 
}
cs

 

 

출처: https://fruitdev.tistory.com/189 [과일가게 개발자]

 

Comments