반응형
요즘 모바일 웹이나 앱을 이용하다보면 스마트폰의 현재 위치를 기반으로 특정 거리안에 있는 정보를 사용자에게 제공하는 서비스들을 쉽게 접할 수 있다.
이때 해당 정보를 보여주기 위해서는 현재 위치와 특정 정보가 존재하는 위치.
즉 두 지점간의 거리를 계산해야 가까운 순서대로 정렬을 하거나 거리를 가지고 필터링을 할 수 있다.
오늘은 두 좌표간의 거리를 계산하는 방법을 소개한다.
http://www.geodatasource.com/developers/java 에 있는 해당 계산식에 미터 단위(meter) 를 추가하였다.
(국내에서는 미터단위를 많이 사용하기 때문...)
테스트 지점은 서울 역삼역, 선릉역 두 지점의 거리를 계산하였으며 구글 지도와 비교했을때 큰 오차는 발생하지 않았다.
public class LocationDistance { public static void main(String[] args) { // 마일(Mile) 단위 double distanceMile = distance(37.504198, 127.047967, 37.501025, 127.037701, ""); // 미터(Meter) 단위 double distanceMeter = distance(37.504198, 127.047967, 37.501025, 127.037701, "meter"); // 킬로미터(Kilo Meter) 단위 double distanceKiloMeter = 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 = 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); } }
아래 URL을 방문하면 그밖의 언어로 된 계산식을 확인 할 수 있다.
http://www.geodatasource.com/developers/
'Language > Java / JSP' 카테고리의 다른 글
[Java] LocalDateTime, Timestamp 변환 (LocalDateTime To Timestamp) (0) | 2020.11.30 |
---|---|
[JSP]Client IP 가져오기 (3) | 2019.03.05 |
[JSP] 로그인 세션 유지시간 늘리기 (0) | 2015.06.15 |
[Java] 특정 자리수 만큼 0으로 공백 채우기(String.format()) (3) | 2015.04.27 |
[JSP] 서버 물리 경로 구하기 (0) | 2015.03.10 |