보라코딩

거리순 기능 구현하기 (자바 거리 계산) 본문

코딩/Spring

거리순 기능 구현하기 (자바 거리 계산)

new 보라 2023. 5. 31. 16:20

우선 위도, 경도는 이미 알고 있었고

service에서 함수로 계산해서 distance 컬럼에 저장하게 하였다.

 

 

Service

사용하는 함수는 아래와 같고

public static double distance(double lat1, double lon1, double lat2, double lon2) {
final double R = 6371; // 지구 반지름 (단위: km)
double dLat = deg2rad(lat2 - lat1);
double dLon = deg2rad(lon2 - lon1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double distance = R * c; // 두 지점 간의 거리 (단위: km)
return distance;
}

public static double deg2rad(double deg) {
return deg * (Math.PI/180);
}

 

 

register과 update에서 내용을 추가했다.

나는 거리가 그다지 멀지 않아서 m 단위로 저장했다.

 

/* 거리 계산 */
// 학원과 맛집 거리를 계산합니다.
double lat1 = 37.49877828305107;
double lon1 = 127.0316730592617;
double lat2 = storeVO.getStoreLati();
double lon2 = storeVO.getStoreLongi();

double distance = distance(lat1, lon1, lat2, lon2);
log.info("두 지점 간의 거리: " + distance + "km");

storeVO1.setDistance(distance*1000);

 

 

 


 

 

이분 블로그를 참고했다!

이분 블로그는 자바스크립트 사용했는데

난 Service에서 사용하고 싶어서 자바로 변환해서 사용함!

 

 

 

경도, 위도로 두 지점간의 거리 계산하기

지구는 구형태를 띄고 있기 때문에 위치마다 경도 1º, 위도 1º의 거리는 서로 다릅니다. 이를 계산하기 위해서 두 지점의 경도와 위도를 가지고 거리를 계산하는 방법은 "하버사인 공식(Haversine f

ccusean.tistory.com