Skip to content

HeatMap

HeatMapnaver.maps.visualization.HeatMap을 React 컴포넌트로 감싼 API입니다. 밀도를 색상으로 표현하는 열지도를 제공합니다.

서브모듈 필요

이 컴포넌트는 visualization 서브모듈이 필요합니다.

tsx
<NaverMapProvider ncpKeyId="..." submodules={["visualization"]}>

기본 사용법

tsx
import { NaverMap, HeatMap } from "react-naver-maps-kit";

function MapWithHeatMap() {
  const data = [
    { lat: 37.5665, lng: 126.978, weight: 10 },
    { lat: 37.5666, lng: 126.979, weight: 5 },
    { lat: 37.5667, lng: 126.98, weight: 8 }
  ];

  return (
    <NaverMap
      defaultCenter={{ lat: 37.5665, lng: 126.978 }}
      defaultZoom={14}
      style={{ width: "100%", height: "500px" }}
    >
      <HeatMap data={data} radius={20} opacity={0.6} />
    </NaverMap>
  );
}

공개 타입

ts
interface HeatMapOptionProps {
  data:
    | naver.maps.LatLng[]
    | naver.maps.PointArrayLiteral[]
    | naver.maps.visualization.WeightedLocation[]
    | Array<{ lat: number; lng: number; weight?: number }>;
  opacity?: number;
  radius?: number;
  colorMap?: naver.maps.visualization.SpectrumStyle;
  colorMapReverse?: boolean;
}

interface HeatMapProps extends HeatMapOptionProps {
  onHeatMapReady?: (heatMap: naver.maps.visualization.HeatMap) => void;
}

interface HeatMapRef {
  getInstance: () => naver.maps.visualization.HeatMap | null;
  getMap: () => naver.maps.Map | null;
  setData: (data: LatLng[] | PointArrayLiteral[] | WeightedLocation[]) => void;
  addData: (data: LatLng | PointArrayLiteral | WeightedLocation) => void;
  redraw: () => void;
}

옵션 프로퍼티

PropTypeDefaultDescription
dataLatLng[] | WeightedLocation[]-시각화 데이터 (필수)
radiusnumber20반경 (픽셀)
opacitynumber0.6불투명도 (0-1)
colorMapSpectrumStyle-색상 스펙트럼
colorMapReversebooleanfalse스펙트럼 색상 반전
onHeatMapReady(heatMap) => void-인스턴스 생성 완료 콜백

Ref 메서드

MethodReturn TypeDescription
getInstance()HeatMapHeatMap 인스턴스
getMap()naver.maps.Map지도 인스턴스
setData()void데이터 설정
addData()void데이터 추가
redraw()void다시 그리기

지원하는 Data 형식

tsx
// 1. 객체 배열 (weight 포함) - 가장 편리한 형식
const data1 = [
  { lat: 37.5665, lng: 126.978, weight: 10 },
  { lat: 37.5666, lng: 126.979, weight: 5 }
];

// 2. 객체 배열 (weight 없음)
const data2 = [
  { lat: 37.5665, lng: 126.978 },
  { lat: 37.5666, lng: 126.979 }
];

// 3. naver.maps.LatLng 배열
const data3 = [new naver.maps.LatLng(37.5665, 126.978), new naver.maps.LatLng(37.5666, 126.979)];

// 4. WeightedLocation 배열
const data4 = [
  new naver.maps.visualization.WeightedLocation(37.5665, 126.978, 10),
  new naver.maps.visualization.WeightedLocation(37.5666, 126.979, 5)
];

색상 스펙트럼 (SpectrumStyle)

스펙트럼설명
RAINBOW무지개 색상
JETJet 색상
HSVHSV 색상 공간
HOT뜨거운 색상 (검정→빨강)
COOL차가운 색상 (청록→자홍)
GREYS회색 계열
YIGnBu노랑→초록→파랑
YIOrRd노랑→주황→빨강
RdBu빨강→파랑
PORTLANDPortland 색상
OXYGENOxygen 색상
tsx
<HeatMap data={data} colorMap={naver.maps.visualization.SpectrumStyle.JET} colorMapReverse={true} />

동작 규칙

  • NaverMap 내부에서만 사용 가능합니다.
  • visualization 서브모듈이 로드되어야 사용 가능합니다.
  • { lat, lng, weight } 형태의 객체 배열은 자동으로 WeightedLocation으로 변환됩니다.
  • Props 변경 시 자동으로 setData(), setOptions(), redraw()가 호출됩니다.
  • 언마운트 시 setMap(null)로 정리됩니다.

Released under the MIT License.