전국 야영장 데이터를 네이버 map에 오버레이하기 위해선 marker를 사용해야 한다.
addMarkerHandler
라는 함수로 분리하여 마커를 추가했다.position
(마커가 생성되는 위치), map
(참조할 대상), icon
(marker)export const addMarkerHandler = (naver, ref) => {
// 마커 생성
ref.marker = new naver.maps.Marker({
position: new naver.maps.LatLng(number, number),
map: ref.map,
icon: {
url: "/img/logo32.png",
size: new naver.maps.Size(32, 32),
anchor: new naver.maps.Point(0, 0),
},
});
// 마커 클릭 이벤트 등록
naver.maps.Event.addListener(ref.marker, "click", () => {
console.log('marker clicked')
});
});
}
};
mapRef.current.markerList
에 넣어준 뒤 마커 배열을 관리했다. export const addMarkerHandler = (naver, ref, list) => {
list.map((e) => {
ref.marker = new naver.maps.Marker({
position: new naver.maps.LatLng(Number(e.mapY), Number(e.mapX)),
map: ref.map,
icon: {
url: "/img/logo32.png",
size: new naver.maps.Size(32, 32),
anchor: new naver.maps.Point(0, 0),
},
});
// ref에 마커 객체 넣어주기
ref.markerList.push(ref.marker);
// 마커 클릭 이벤트 설정
naver.maps.Event.addListener(ref.marker, "click", () => {
console.log(e)
});
});
}
};
mapRef.current.markerList
로 관리하고 있는 마커 배열에 반복문으로 마커를 삭제할 수 있다.addMarkerHandler
함수에 첫 부분에 기존 마커를 삭제하는 부분을 추가해줬다.순서
myLocation state 변경 > 야영장 데이터 받아오기 > 마커 삭제 > 마커 추가 반복
export const addMarkerHandler = (naver, ref, list, pick) => {
if (!Array.isArray(list)) return;
// 기존 마커 있는 경우, 초기화
if (ref.markerList[0]) {
ref.markerList.forEach((e) => {
e.setMap(null);
});
// markerList 배열 초기화
ref.markerList.splice(0);
}
naver.maps.Event.addListener(ref.marker, "click", (e) => {
ref.map.morph(e.coord, 12);
});