본문 바로가기
spring/오류 및 메모

카카오 지도 api 사용중...

by coie 2021. 4. 10.

기존 CRUD게시판을

맛집 리뷰로 적자하고

카카오 지도 api를 사용할려고하는데

 

for ( var i=0; i<places.length; i++ ) {

        // 마커를 생성하고 지도에 표시합니다
        var placePosition = new kakao.maps.LatLng(places[i].y, places[i].x),
            marker = addMarker(placePosition, i), 
            itemEl = getListItem(i, places[i]); // 검색 결과 항목 Element를 생성합니다

        // 검색된 장소 위치를 기준으로 지도 범위를 재설정하기위해
        // LatLngBounds 객체에 좌표를 추가합니다
        bounds.extend(placePosition);

        // 마커와 검색결과 항목에 mouseover 했을때
        // 해당 장소에 인포윈도우에 장소명을 표시합니다
        // mouseout 했을 때는 인포윈도우를 닫습니다
        (function(marker, title) {
            kakao.maps.event.addListener(marker, 'mouseover', function() {
                displayInfowindow(marker, title);
            });

            kakao.maps.event.addListener(marker, 'mouseout', function() {
                infowindow.close();
            });
            kakao.maps.event.addListener(marker, 'click', function() {
                // 마커 위에 인포윈도우를 표시합니다//맨마지막값만 들어감.
            	 displayInfowindow(marker, '?!');
        	});
            
            itemEl.onmouseover =  function () {
                displayInfowindow(marker, title);
            };

            itemEl.onmouseout =  function () {
                infowindow.close();
            };
        })(marker, places[i].place_name);

        fragment.appendChild(itemEl);
    }

아무래도 api문서가 있으니 별 문제는 없는데

click할 시 어떤 값을 넣고싶은데

이미 반복문에 감싸져있고 

맨마지막값만 들어가서

어디에 설정해야할까.....

 

 

----------------임시? 해결?---------------------

 

 kakao.maps.event.addListener(marker, 'click', function() {
                if(marker.getRange()==500){
            			
            			var imgOptions =  {
            		            spriteSize : new kakao.maps.Size(36, 691), // 스프라이트 이미지의 크기
            		            spriteOrigin : new kakao.maps.Point(0, (Number(marker.getTitle())*46)+10), // 스프라이트 이미지 중 사용할 영역의 좌상단 좌표
            		            offset: new kakao.maps.Point(13, 37) // 마커 좌표에 일치시킬 이미지 내에서의 좌표
            		    };
                		var markerImage = new kakao.maps.MarkerImage(
                		'https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/marker_red.png',
                		new kakao.maps.Size(31, 37), 
                		imgOptions);
                		marker.setImage(markerImage);
                		marker.setRange(300);
                		
                }else{
                	 marker.setRange(500);
                	 var imgOptions =  {
         		            spriteSize : new kakao.maps.Size(36, 691), // 스프라이트 이미지의 크기
         		            spriteOrigin : new kakao.maps.Point(0, (Number(marker.getTitle())*46)+10), // 스프라이트 이미지 중 사용할 영역의 좌상단 좌표
         		            offset: new kakao.maps.Point(13, 37) // 마커 좌표에 일치시킬 이미지 내에서의 좌표
         		   	 };
                	 var markerImage = new kakao.maps.MarkerImage(
                     'https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/marker_number_blue.png',
                     new kakao.maps.Size(36, 37),
                     imgOptions);
                	 marker.setImage(markerImage);
                	
                }
            });

아마 이렇게 하면 안 될것같은데...하면서

이미 만들어진 api에서 내가 활용을해야하니

각 marker의 title에 idx를 입력해주고

range 는 로드뷰에서 사용하는 값으로 나는 사용할이 없다

그래서 그 값들을 이용해서 설정했다

 

--------------------진짜 해결----------------------

 

kakao.maps.event.addListener(marker, 'click', (function(placePosition,i) {
            	displayInfowindow(marker, title);
            	return function() {
                    // #clickLatlng 영역에 좌표정보 출력
                    var message = '선택하신 위치는 ' +'"'+title+'"' +placePosition+' 입니다' + 'i값은 ' + i;
                    var resultDiv = document.getElementById('clickLatlng');
                    resultDiv.innerHTML = message;
                   
                    var ClickimageSrc = 'http://t1.daumcdn.net/localimg/localimages/07/2009/map/icon/ico_mn_13.png', // 마커 이미지 url, 스프라이트 이미지를 씁니다
                    NormalimageSrc = 'https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/marker_number_blue.png', 
                    ClickimageSize = new kakao.maps.Size(31, 40),// 마커 이미지의 크기
                    NormalimageSize = new kakao.maps.Size(36, 37),
                    imgOptions = new kakao.maps.Point(13, 37);
                    
                   var ClickImage = new kakao.maps.MarkerImage(ClickimageSrc,ClickimageSize,imgOptions),
                   	   Normalmage = new kakao.maps.MarkerImage(NormalimageSrc,NormalimageSize,imgOptions);
                   
                   if (!selectedMarker || selectedMarker !== marker) {

                       // 클릭된 마커 객체가 null이 아니면
                       // 클릭된 마커의 이미지를 기본 이미지로 변경하고
                       !!selectedMarker && selectedMarker.setImage(Normalmage);

                       // 현재 클릭된 마커의 이미지는 클릭 이미지로 변경합니다
                       marker.setImage(ClickImage);
                   }

                   // 클릭된 마커를 현재 클릭된 마커 객체로 설정합니다
                   selectedMarker = marker;
                }

            })(placePosition,i));

일단 위의 코드는

해당 마크를 클릭하면

아래에 해당 마크의 이름, 좌표가 나오고

자신이 클릭한것을 확인 할 수 있도록.

역시 문서를 하루종일 봐야....이해를 하는 것 같다

 

-예제-

 

일단 기본적으로 보이는 맵이다.

 

여기서 하나를 클릭하면

 

맵 위에 선택한 주소를 알려주고

맵에서도 위치를 알려주고 사용자가 알기 쉽게 표시를 줬다.

'spring > 오류 및 메모' 카테고리의 다른 글

웹소켓,http 공부  (0) 2021.04.25
j쿼리 클릭 이벤트가 안되는....  (0) 2021.04.23
스프링 시큐리티 중 ajax오류  (0) 2021.03.22
스프링 시큐리티와 인터셉터  (0) 2021.03.19
스프링 시큐리티중 에러  (0) 2021.03.18