첫째로, kakao map key 를 받아온다. https://developers.kakao.com/ 여기에서 자신의 앱을 등록하고 javascript KEY를 받아오면된다. 둘째, 웹의 header에 스크립트로 키를 등록해서 kakao api 를 받아올 수 있도록 세팅한다. <header> <script type=”text/javascript” src=”//dapi.kakao.com/v2/maps/sdk.js?appkey=YOUR_APP_KEY&libraries=services,clusterer”></script> </header> 셋째로, 화면에 맵을 설정한다. <div id=’centermap’ style={{width: ‘100%’ , height: `${windowHeight}px`, backgroundColor:’white’,position: ‘relative’, zIndex: 0}}> 이 태그에 kako api를 통해서 맵을 받아와 올린다. 리엑트는 componentdidmount 나 useEffect에서 실행하면된다. kakao.maps.load(() => { let markers = [] let mapContainer = document.getElementById(‘centermap’) // 지도를 표시할 div let mapOption = { center: new kakao.maps.LatLng(lat, long), // 지도의 중심좌표 level: 9// 지도의 확대 레벨 }; var map = new kakao.maps.Map(mapContainer, mapOption); let markerPosition = new kakao.maps.LatLng(lat, long) let centerMarker = new kakao.maps.Marker({ position: markerPosition }) markers.push(centerMarker) for (var i = 0; i < markers.length; i++) { markers[i].setMap(map); } 위와 같이 내 위치를 카카오 맵을 이용해서 나타낼수 있었다. 이제 주변 센터 들의 위치를 가져온 다음 마커를 생성해야한다. 여기에서 까다로운 부분은 단순히 마커를 지도를 나타내는 것만이 아니라 ‘클릭해서 선택이 가능’ 해야하며 선택한 ‘마커에 대한 정보를 가져와야’ 한다. 그리고 클릭 전, 클릭 후 마커는 아이콘이 달라야한다. 그래서 kakao 문서를 바탕으로 작업을 진행했다. let selectedMarker = null; for (var i = 0; i < centers.length; i ++) { console.log(centers) // centers 안에는 위도 경도 정보들이 있다. var imageSize = new kakao.maps.Size(30, 40), imageOptions = { spriteOrigin: new kakao.maps.Point(0, 0), spriteSize: new kakao.maps.Size(30, 40) }; // 마커 이미지의 위치와 사이즈를 결정하는 부분 커스터마이징 가능 var markerImage = createMarkerImage(map_marker, imageSize, imageOptions) let marker = createMarker(centers[i], markerImage, map); kakao.maps.event.addListener(marker, ‘click’, clickHandler(map,centers[i])); // 클릭 이벤트 핸들러를 설정하는 부분이다. markers.push(marker) function clickHandler (map, center) { return ()=>{ setClicked(center) // 클릭된 센터를 설정하는 부분 if (!selectedMarker || selectedMarker !== marker) { var imageSize = new kakao.maps.Size(30, 40), imageOptions = { spriteOrigin: new kakao.maps.Point(0, 0), spriteSize: new kakao.maps.Size(30, 40) }; let normal_image = createMarkerImage(map_marker, imageSize, imageOptions) !!selectedMarker && selectedMarker.setImage(normal_image); // 클릭된 마커 객체가 null이 아니면 // 클릭된 마커의 이미지를 기본 이미지로 변경한다 selectedMarker = marker; var imageSize = new kakao.maps.Size(50, 50) var imageOptions = { spriteOrigin: new kakao.maps.Point(0, 0), spriteSize: new kakao.maps.Size(50, 50) }; let clicked_image = createMarkerImage(clicked_marker, imageSize, imageOptions) // 현재 클릭된 마커의 이미지는 클릭 이미지로 변경합니다 marker.setImage(clicked_image); } for (var i = 0; i < markers.length; i++) { markers[i].setMap(map); } // 모든 마커를 맵에 세팅한다. 클릭 이전과 클릭 이후 마커 이미지가 다름을 확인 할 수 있다. setClicked를 통해서 이미 클릭한 센터의 정보(latitude, longtitude)를 스테잇에 저장 해놨기에 해당 마커의 위치로 경로 찾기를 하는 건 어렵지 않다. 웹뷰앱이기에 간단하게 외부 팝업으로 연결하는게 편하기에 restful api 로 kakao navigation 을 불러 왔다. window.open(`https://map.kakao.com/link/to/${clicked.serviceCenterName},${clicked.lat},${clicked.lot}/from/현재위치,${global.lat},${global.long}`) clicked.lat , clicked.lot 은 클릭된 마커의 정보이고 global.lat, global.long 은 현재 내 위치 정보이다. 이제 남은 건 검색을 통해서 특정 충전소를 찾고 그 충전소에 대한 정보를 가져오는 것이다. 대한민국에서 가장 빠른 길을 안내하는 카카오맵! ◼︎ 빠른 길찾기가 필요한 순간! ◼ 주변 정보가 필요한 순간! ◼ 더욱 전문적인 지도가 필요한 순간! ◼ 그리고 당신의 길찾기를 위한 모든 부가기능 여러분과 함께 진화하는 카카오맵은 언제든지 여러분의 목소리를 기다립니다. ---- * 선택 접근 권한은 동의하지 않아도 서비스 이용이 가능합니다. |