[Software] Java: 위도와 경도를 이용한 두 점 간의 거리 계산

지도의 두 지점 간의 거리를 구하는 방법에 대해 알려드리겠습니다.
지도 상의 두 점의 위도(latitude)와 경도(longitude)를 알 경우 Haversine 방법으로 거리를 구할 수 있습니다.

Haversine 프로그램
rosettacode.org에 프로그래밍 언어별로 Haversine 방법이 구현되어 있습니다.
Java 코드는 다음과 같습니다. 원본 코드(https://rosettacode.org/wiki/Haversine_formula#Java)

public class Haversine {
    public static final double R = 6372.8; // In kilometers
    public static double haversine(double lat1, double lon1, double lat2, double lon2) {
        double dLat = Math.toRadians(lat2 - lat1);
        double dLon = Math.toRadians(lon2 - lon1);
        lat1 = Math.toRadians(lat1);
        lat2 = Math.toRadians(lat2);

        double a = Math.pow(Math.sin(dLat / 2),2) + Math.pow(Math.sin(dLon / 2),2) * Math.cos(lat1) * Math.cos(lat2);
        double c = 2 * Math.asin(Math.sqrt(a));
        return R * c;
    }
    public static void main(String[] args) {
        System.out.println(haversine(36.369649, 127.380346, 36.369653,127.382205)); // --> 0.16649327065379554
    }
}

프로그램 구동
원본 코드의 예제를 제가 임의로 수정했습니다.
위도는 거의 동일하고 경도만 다소 차이나는 지점에 대해 적용해 보았습니다.
위 코드에서 R은 지구 반경, R*c가 두 지점 간의 거리입니다.
위 코드로 구한 값은 0.16649km 입니다.
구글 맵스에서 구한 값은 0.1661km 입니다. 위 방법과 구글 맵스의 결과가 잘 일치합니다.
아래 그림에는 예제의 두 지점을 표시했습니다.




댓글

이 블로그의 인기 게시물

[Software] Python으로 Google 검색결과 크롤링(crawling)하기

[Software] Fortran: 배열에서 중복 요소 제거하기

[Software] Dakota: Install Dakota 6.4 on Ubuntu 16.04 LTS