728x90
반응형
공식을 이용한 거리 계산
▷ Example
public class LocationDistance {
public static void main(String[] args) {
double lat1 = 37.504198, lon1 = 127.047967;
double lat2 = 37.501025, lon2 = 127.037701;
System.out.printf("Distance in miles: %.4f%n", distance(lat1, lon1, lat2, lon2, "mile"));
System.out.printf("Distance in meters: %.2f%n", distance(lat1, lon1, lat2, lon2, "meter"));
System.out.printf("Distance in kilometers: %.4f%n", distance(lat1, lon1, lat2, lon2, "kilometer"));
}
/**
* 두 지점 간의 거리 계산
*
* @param lat1 지점 1 위도
* @param lon1 지점 1 경도
* @param lat2 지점 2 위도
* @param lon2 지점 2 경도
* @param unit 거리 단위 ("mile", "meter", "kilometer")
* @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; // 기본: 마일 단위
return switch (unit.toLowerCase()) {
case "kilometer" -> dist * 1.609344; // 킬로미터
case "meter" -> dist * 1609.344; // 미터
default -> 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.0 / Math.PI;
}
}
Distance in miles: 0.6422
Distance in meters: 1033.69
Distance in kilometers: 1.0337
▷ 참고
[Java] 경위도 좌표 거리계산 (두 지점간의 거리)
요즘 모바일 웹이나 앱을 이용하다보면 스마트폰의 현재 위치를 기반으로 특정 거리안에 있는 정보를 사용자에게 제공하는 서비스들을 쉽게 접할 수 있다. 이때 해당 정보를 보여주기 위해서는
fruitdev.tistory.com
728x90
728x90
'▶ Back-End > Java' 카테고리의 다른 글
문자열 중간 마스킹 처리 (0) | 2021.04.22 |
---|---|
문자열 n번째 이후 마스킹 처리 (0) | 2021.04.22 |
List<Object> 정렬 (0) | 2021.04.16 |
숫자 천 단위 콤마 추가 (0) | 2021.03.05 |
가변적인 특정 문자열을 원하는 위치에 추가 (0) | 2021.03.05 |
댓글