2024-04-10 - 카페와의 거리 구하기, 위도경도 값을 서버로 보내기 에러

·2024년 4월 10일

프로젝트

목록 보기
47/57

구글맵으로 내가 있는 학원의 위도경도 구하기


<정보 출처>

console.log로 테스트 하려는 카페의 위도경도 구하기

좌표(위도, 경도)로 실제 거리 구하기

	// 두 좌표 사이의 거리를 구하는 함수
    // 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>

문제상황

첫번째 에러 (삽질v.1)

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이라고...? 왜???? (삽질 v.2)

오늘안에 카페의 거리를 카페 상세페이지에 표시해주는 것이 목표였는데. null이라니...ㅋㅋㅋㅋ
왜 null값인건지 고민해보고 찾아보기로..


야밤에 다시 시도해본다...

@RequestParam Map<String, Object> (삽질 v.3)

여태까지 바보같이 ajax로 받은 데이터를 @RequestParam을 사용하지 않고있었는데다가.... ajax로 데이터가 Map으로 넘어오고있었는데 그것 또한 Map형태가 아닌 변수로 받으려고 했었다 (무슨짓을 한거니 휴먼)

이렇게 구현하면 될 것 같았는데... 여전히

NullPointerException..........

새벽 3시다.. 일단 자자..


카페와의 거리 보여주기를 구현하기 위해서

  • null값으로 넘어가는 원인 찾아 해결하기.
  • 카페의 위도와 경도는 지도api에서 찾을 수 있으니, 이제 사용자의 위치(좌표)를 구해 넘겨주는 방법도 찾아봐야 할 듯.
profile
hello world

0개의 댓글