// 두 좌표 사이의 거리를 구하는 함수
// distance(첫번쨰 좌표의 위도, 첫번째 좌표의 경도, 두번째 좌표의 위도, 두번째 좌표의 경도)
private static String distance(double lat1, double lon1, double lat2, double lon2){
// 학원 위도경도
lat1 = 36.351071;
lon1 = 127.379754;
//테스트카페(Leafful) 위도경도
lat2 = 36.3706177442735;
lon2 = 127.33985482939;
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*1609.344;
String distanceInKm = String.format("%.1f", dist / 1000);
System.out.println(distanceInKm + "km");
return distanceInKm; //단위 kilometer
}
//10진수를 radian(라디안)으로 변환
private static double deg2rad(double deg){
return (deg * Math.PI/180.0);
}
//radian(라디안)을 10진수로 변환
private static double rad2deg(double rad){
return (rad * 180 / Math.PI);
}
실제로 해당 카페와의 거리가 4.2km이 맞는지 네이버지도로 현재 나의 위치와 카페와의 거리를 확인해보니 일치한다!

이제 실제로 목록에서 보여지는 카페들의 위도경도를 변수로 불러와서 거리를 보여주기만하면 될 듯 하다.
카페의 상세페이지에서 카페와의 거리를 보여주기위해, 상세페이지로 접속시 바로 위도와 경도의 값을 컨트롤러로 보내줄 수 있도록 Ajax를 세팅해주었다.
<!-- 페이지 접속 시 최초 실행(onload) 함수 -->
<script>
window.onload = function() {
$.ajax({
type: "POST",
url: "/usr/findcafe/cafeDetail", // 요청을 처리할 컨트롤러의 URL
data: {
lat2: result[0].y, // 위도
lon2: result[0].x // 경도
},
success: function(response) {
alert("위도와 경도를 서버로 전송했습니다.");
// 성공적으로 처리되었을 때 실행할 코드
},
error: function(xhr, status, error) {
alert("전송 중 오류가 발생했습니다.");
// 오류 발생 시 실행할 코드
}
});
};
</script>
There was an unexpected error (type=Internal Server Error, status=500).
Optional double parameter 'lat2' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.
java.lang.IllegalStateException: Optional double parameter 'lat2' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.
이전에도 만난적이 있던 에러다!
위도와 경도는 실수이기 때문에 double로 타입을 지정해서 매개변수를 받으려고 했는데,
null 값으로 전환을 위해서는 원시타입을 사용하면 안된다고 함. 참조타입 Double로 변경해보았다!
변경후 카페 상세페이지에 접속을 시도했더니 아래와 같은 에러가 뜬다.
오늘안에 카페의 거리를 카페 상세페이지에 표시해주는 것이 목표였는데. null이라니...ㅋㅋㅋㅋ
왜 null값인건지 고민해보고 찾아보기로..
야밤에 다시 시도해본다...
여태까지 바보같이 ajax로 받은 데이터를 @RequestParam을 사용하지 않고있었는데다가.... ajax로 데이터가 Map으로 넘어오고있었는데 그것 또한 Map형태가 아닌 변수로 받으려고 했었다 (무슨짓을 한거니 휴먼)
이렇게 구현하면 될 것 같았는데... 여전히
새벽 3시다.. 일단 자자..