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/
- source: https://fruitdev.tistory.com/189
[Java] 경위도 좌표 거리계산 (두 지점간의 거리)
요즘 모바일 웹이나 앱을 이용하다보면 스마트폰의 현재 위치를 기반으로 특정 거리안에 있는 정보를 사용자에게 제공하는 서비스들을 쉽게 접할 수 있다. 이때 해당 정보를 보여주기 위해서는
fruitdev.tistory.com
728x90
'Dev > Java' 카테고리의 다른 글
람다 표현식 내에서 표현식 외부의 변수 사용 (0) | 2022.08.05 |
---|---|
[logback] logback.xml (0) | 2022.06.21 |
[Jvm] JAVA_OPTS 설정 (0) | 2022.06.20 |
HashMap pulAll & merge (0) | 2022.06.15 |
공간좌표계 거리 계산 및 좌표 변환 (TM/KATEC - WGS84) (0) | 2022.05.13 |