카카오 맵 API를 통해 맛집들의 위치를 지도상의 마커로 카테고리별로 구현하였습니다. 마커 클릭 시 해당 맛집의 상세 페이지로 이동합니다.
export default function useMap(): JSX.Element {
const router = useRouter();
useEffect(() => {
// 맵 만들기 ===================================
if (window.kakao && window.kakao.maps) {
kakao.maps.load(() => {
var mapContainer = document.getElementById('map'), // 지도를 표시할 div
mapOption = {
center: new kakao.maps.LatLng(35.146777765504034, 126.9252125104924), // 지도의 중심좌표
level: 4, // 지도의 확대 레벨
};
var map = new kakao.maps.Map(mapContainer, mapOption);
const locations = [
{
// 식당정보
},
];
locations.map((location, index) => {
const markerImage = new kakao.maps.MarkerImage(location.imageSrc, new kakao.maps.Size(30, 30), {
offset: new kakao.maps.Point(14, 0),
});
const marker = new kakao.maps.Marker({
position: location.position,
image: markerImage,
});
marker.setMap(map);
const content =
'<div class="customoverlay">' +
` <a href="#" id="navigateLink${index}" style="display: block; background: #50627F; color: #fff; text-align: center; height: 20px; line-height: 22px; border-radius: 4px; padding: 0px 10px; font-size:12px; text-decoration:none;">` +
` <span class="title">${location.name}</span>` +
' </a>' +
'</div>';
const position = location.position;
const customOverlay = new kakao.maps.CustomOverlay({
map: map,
position: position,
content: content,
yAnchor: 1,
});
const navigateLink = document.getElementById(`navigateLink${index}`);
if (navigateLink) {
navigateLink.addEventListener('click', function (e) {
e.preventDefault();
router.push(location.route);
});
}
kakao.maps.event.addListener(marker, 'click', function () {
router.push(location.route);
});
});
});
}
}, []);
return <></>;
}