마커가 데이터를 가지고 있을 수 있나요?(클러스터에서의 접근)

image

위는 오픈닥터라는 사이트의 이미지입니다
위와 같은 방식으로 마커클러스터링 내의 마커들을 출력하려 하였으나,
marker의 title로 데이터를 전달 받는 방법밖에 발견하지 못하였습니다.

질문) 커스텀오버레이 마커들의 클릭 이벤트의 등록이 끝난 후
마커 클러스터러가 생성되는데 마커클러스터의 클릭 시 멤버들의 content는 어떻게 가져오나요?

++ getMarkers()를 써서 마커들이 뭐가 들어있는지는 알았는데 이를 클러스터의 클릭이벤트에 사용할 수 없었습니다.


2022-06-17 질문이 이상해 답변이 곤란하신 것 같아 새로 정리해서 써봅니다.

  useEffect(() => {
    if (kakaoMap === null || markerPositions === undefined) {
      return;
    }
    var clusterer = new kakao.maps.MarkerClusterer({
      map: kakaoMap, // 마커들을 클러스터로 관리하고 표시할 지도 객체
      averageCenter: true, // 클러스터에 포함된 마커들의 평균 위치를 클러스터 마커 위치로 설정
      minLevel: 2, // 클러스터 할 최소 지도 레벨
      disableClickZoom: true, // 클러스터 마커를 클릭했을 때 지도가 확대되지 않도록 설정한다
    });
    var markers = userData.map((data) => {
      const position = new kakao.maps.LatLng(data.location.lat, data.location.lng);
      var marker = new kakao.maps.Marker({
        position,
      });
      //커스텀오버레이
      const content = `<div class="bg-black opacity-70 top-[20px] right-1 relative p-1">
      <p class=" text-white">${data.object}</p></div>`;
      var overlayHover = new kakao.maps.CustomOverlay({
        content,
        map: kakaoMap,
        position,
      });
      kakao.maps.event.addListener(marker, "mouseover", function () {
        overlayHover.setMap(kakaoMap);
        mouseOver();
      });
      kakao.maps.event.addListener(marker, "mouseout", function () {
        overlayHover.setMap(null);
        mouseOut();
      });
      kakao.maps.event.addListener(marker, "click", function () {
        MouseClick(data);
        // overlay.setMap(kakaoMap);
      });
      kakao.maps.event.addListener(kakaoMap, "click", function () {
        overlayHover.setMap(null);
        mapClick();
        // MouseClick(userData.id);
      });

      overlayHover.setMap(null);

      return marker;
    });
    clusterer.addMarkers(markers);
    kakao.maps.event.addListener(clusterer, "clusterclick", function (cluster) {
      console.log(cluster.getMarkers());
    });
  }, [kakaoMap, markerPositions]);

첫번째 useEffect에서 카카오맵을 불러와서 두번째 useEffect에서 위와 같은 처리를 하게 됩니다.
마커를 생성하고 마커에 커스텀 오버레이와 마우스 이벤트들을 추가해주는 코드입니다.
그리고 마커클러스터를 사용하여 마커의 생성이 끝난 후 클러스터링을 합니다.

이 경우에서 userData를 접근하려면 마커의 생성 시점에 접근해야하는데(content 의 ${userData.object}
클릭이벤트의 MouseClick(userData); 처럼 접근하려 하였으나

클러스터링은 marker들이 전부 렌더링 된 이후에 시작하게되어서
접근이 힘들어졌습니다.

그래서 해결방법을 혼자 찾아봤지만 제 능력으로는
marker안에 title 에 데이터를 넣고 마커에 비교하는 방법밖에 못찾게되었습니다.

혹시, 클러스터를 클릭했을때 안의 마커들이 어떤 데이터를 가지고 있는지 알려면
어떤 방식을 사용해야 하는지 알수있을까요?

image

먼저 게시글 확인이 늦어진 점 죄송합니다.
클러스터러 클릭 이벤트에서는 클러스터러에 속한 마커 정보만 가져올 수 있기 때문에
그 외 정보를 가져오려면 별도로 데이터를 관리해서 값을 구해야합니다.
아래 답변처럼 맵핑테이블 또는 객체 확장을 통해 마커에 매칭되는 데이터를 가져와주세요.
https://devtalk.kakao.com/t/topic/101488/2?u=lea.ju
https://devtalk.kakao.com/t/marker-title-attr/106280/4?u=lea.ju

이미 중복되는 질문이 있었는데 확인 못하고 질문한 점 죄송합니다 ㅠㅠ
답변 감사합니다! :smiling_face_with_tear: