보라코딩
거리순 기능 구현하기 (자바 거리 계산) 본문
우선 위도, 경도는 이미 알고 있었고
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);
}
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);
// 학원과 맛집 거리를 계산합니다.
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
'코딩 > Spring' 카테고리의 다른 글
Day108_230601_페이징처리... 하........... (0) | 2023.06.01 |
---|---|
별점 평가하는 화면 (부트스트랩 + 보라색 사용ㅎㅎ) (0) | 2023.05.31 |
맛집 스타일별 정렬하기 / 별점순 / 인기순 / 거리순 구현하기 (0) | 2023.05.31 |
스프링부트 파일(이미지) 수정하기!!! (0) | 2023.05.31 |
모달 사용 (삭제 전에 삭제하시겠습니까?) (0) | 2023.05.31 |