Dev/Java

두 지점간의 위경도 좌표를 통한 거리 계산

pu3vig 2022. 5. 13. 16:58
728x90
  • target:  위경도 좌표 거리 계산

 


  • method: 

  - ex) 서울 역삼역, 선릉역 두 지점간의 거리

public class LocationDistance {
	public static void main(String[] args) {
    	// 마일(Mile) 단위
        double distanceMile = distance(37.504198, 127.047967, 37.501025, 127.037701, "");
        
        // 미터(Meter) 단위
        double distanceMile = distance(37.504198, 127.047967, 37.501025, 127.037701, "meter");
        
        // 킬로미터(Kilo Meter) 단위
        double distanceMile = distance(37.504198, 127.047967, 37.501025, 127.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 *= (60 * 1.1515);
        
        if(unit != null) {
            dist *= 1.609344;
            switch(unit) {
            	case "meter":
                    dist *= 1000;
                case "kilometer":
            }
        }
        
        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);
    }
}

 


  • desc: 

  * 아래 URL을 방문하면 그밖의 언어로 된 계산식을 확인 가능
    http://www.geodatasource.com/developers/

 

 


 

[Java] 경위도 좌표 거리계산 (두 지점간의 거리)

요즘 모바일 웹이나 앱을 이용하다보면 스마트폰의 현재 위치를 기반으로 특정 거리안에 있는 정보를 사용자에게 제공하는 서비스들을 쉽게 접할 수 있다. 이때 해당 정보를 보여주기 위해서는

fruitdev.tistory.com

 


728x90