iNaviMaps
  • 소개
  • 개발 가이드
    • 준비하기
    • 준비하기 (0.20.0 미만 버전)
    • 지도 추가하기
    • 지도 유형과 스타일 설정하기
      • 지도 유형 설정하기
      • 나만의 지도 스타일 만들기
    • 지도와 상호작용하기
      • 컨트롤과 제스처
      • 지도 이벤트
      • 사용자 위치 확인
      • 카메라와 뷰
    • 지도 위에 그리기
      • 개요
      • 셰이프 이벤트
      • 마커
      • 정보 창
      • 도형
      • 위치 아이콘
      • 경로
      • 클러스터링
    • 좌표계 변환하기
  • 참고 사이트
    • API 레퍼런스
    • 변경 내역
    • 샘플 앱
  • 바로가기
    • iOS SDK
Powered by GitBook
On this page
  • 개요
  • 아이템
  • 클러스터
  • 클러스터링 구성
  • 아이템 구성
  • 아이템 관리
  • 지도에 그려질 마커 속성
  • 마커 클릭 이벤트

Was this helpful?

  1. 개발 가이드
  2. 지도 위에 그리기

클러스터링

클러스터링 기능을 이용하여 여러 개의 데이터를 그룹화하여 지도 위에 표출할 수 있습니다.

Previous경로Next좌표계 변환하기

Last updated 4 years ago

Was this helpful?

개요

클러스터링이란 주어진 개체들을 여러 개의 그룹으로 묶는 일련의 작업을 의미합니다. 아이나비 지도 SDK는 지도의 줌 레벨에 따라 지도상에 표출된 인접한 마커들을 묶어 클러스터를 만들고, 지도 위에 마커로 표출하는 기능을 제공합니다.

아이템

클러스터링할 최소한의 데이터 단위를 의미합니다. 지점을 기반으로 클러스터링이 이루어지기 때문에 지점 위치 속성이 반드시 필요합니다. 지도 위에 마커 형태로 표출됩니다.

클러스터

그룹화 된 아이템 또는 클러스터를 의미합니다. 클러스터 역시 줌 레벨에 따라 인접한 아이템 또는 클러스터와 묶여질 수 있습니다. 지도 위에 마커 형태로 표출됩니다.

클러스터링 구성

아이템 구성

data class MyItem(private val position: LatLng, val title: String) : ClusterItem {
  override fun getPosition() = position
}
private var clusterManager: ClusterManager<MyItem>? = null

override fun onMapReady(inaviMap: InaviMap) {
    clusterManager = ClusterManager<MyItem>(this, inaviMap)
}

아이템 관리

구분

함수명

단일 아이템 추가

여러 개의 아이템 추가

단일 아이템 삭제

여러 개의 아이템 삭제

모든 아이템 삭제

지도에 그려질 마커 속성

// Activity가 ClusterManager.OnRenderListener를 구현함

// OnRenderListener 설정
override fun onMapReady(inaviMap: InaviMap) {
  // ...
  clusterManager?.onRenderListener = this
}

// 콜백 함수 구현
// '클러스터'가 그려지는 시점에 호출되는 콜백 함수
override fun onRenderCluster(cluster: Cluster<MyItem>, markerOptions: InvMarkerOptions) {
  markerOptions.position = cluster.position
}

// '아이템'이 그려지는 시점에 호출되는 콜백 함수
override fun onRenderClusterItem(clusterItem: MyItem, markerOptions: InvMarkerOptions) {
  markerOptions.position = clusterItem.position
  markerOptions.iconImage = InvMarkerIcons.RED
  markerOptions.title = "${clusterItem.title}"
}

마커 클릭 이벤트

// Activity가 ClusterManager.OnClickListener를 구현함

// ClusterManager.OnClickListener 설정
clusterManager?.onClickListener = this

// 콜백 함수 구현
// '클러스터'가 클릭된 시점에 호출되는 콜백 함수
override fun onClusterClick(cluster: Cluster<MyItem>, markerOptions: InvMarkerOptions): Boolean {
    Toast.makeText(this, "클러스터 클릭", Toast.LENGTH_SHORT).show()
    return true // 이벤트 소비 여부. false이면 지도로 이벤트가 전달됨
  }

// '아이템'이 클릭된 시점에 호출되는 콜백 함수
override fun onClusterItemClick(clusterItem: MyItem, markerOptions: InvMarkerOptions): Boolean {
  Toast.makeText(this, "아이템 클릭", Toast.LENGTH_SHORT).show()
  return true // 이벤트 소비 여부. false이면 지도로 이벤트가 전달됨
}

지도 위에 클러스터링을 적용하기 위해서는 먼저 인터페이스를 구현한 데이터 클래스를 만들어야 합니다.

클래스는 지도의 클러스터링을 관리합니다. 아이템 추가/삭제, 지도 위에 그려질 마커의 형태, 클릭 이벤트 등을 설정할 수 있습니다.

클래스에서 제공하는 함수로 클러스터링할 아이템을 추가하거나 삭제할 수 있습니다. 아이템의 구성요소가 변경되면 변경된 아이템들을 바탕으로 다시 클러스터링을 수행합니다.

객체에 속성을 설정하여 지도 위에 그려질 아이템 및 클러스터에 대한 마커의 아이콘 이미지, 타이틀 등을 설정할 수 있습니다.

에는 클러스터가 그려지는 시점에 호출되는 함수, 아이템이 그려지는 시점에 호출되는 함수 두 가지가 있습니다. 두 콜백 함수 모두 파라미터로 인터페이스를 구현한 객체가 전달되며, 이 객체를 통해 지도 위에 그려질 마커의 속성을 변경할 수 있습니다.

객체에 를 설정하면 지도에 표출된 아이템 또는 클러스터에 대한 마커를 클릭했을 때의 이벤트를 감지할 수 있습니다.

에는 클러스터 마커가 클릭된 시점에 호출되는 함수, 아이템 마커가 클릭된 시점에 호출되는 함수 두 가지가 있습니다. 두 콜백 함수 모두 파라미터로 인터페이스를 구현한 객체가 전달되며, 이 객체를 통해 클릭된 마커의 속성을 변경할 수 있습니다.

ClusterItem
ClusterManager
ClusterManager
ClusterManager
onRenderListener
ClusterManager.OnRenderListener
onRenderCluster()
onRenderClusterItem()
InvMarkerOptions
ClusterManager
onClickListener
ClusterManager.OnClickListener
onClusterClick()
onClusterItemClick()
InvMarkerOptions
addItem()
addItems()
removeItem()
removeItems()
clearItems()
아이템에 대한 마커가 지도에 표출된 모습
클러스터에 대한 마커가 지도에 표출된 모습