Android - Google Map API 설치부터 심화 활용까지 (클러스터링) (3) (Kotlin)

업데이트:

  • 연구주제 : Android - Google Map 활용 (Kotlin)
  • 연구목적 : 안드로이드에서의 코틀린 활용
  • 연구일시 : 2020년 04월 08일 09:00~17:00
  • 연구자 : 이재환 ljh951103@naver.com
  • 연구장비 : HP EliteDesk 800 G4 TWR, Kotlin, Android studio, IntelliJ
  • 관련연구 : Java, Android, Kotlin, Google, API


서론

클러스터링이란 무엇인가?
개념을 알기 전에, 다음 사진을 보자.

image

다음과 같이 마커가 여러개 있는 경우, 지저분해 보일 뿐만아니라 마커를 구분할 수가 없게된다.


image

위의 사진은 좀 전의 사진에 비해서 굉장히 깔끔해졌다.
이 처럼 가까운 거리에 따라 마커들을 하나의 무리로 만들어 주는 기법이 클러스터링이다.


본론

클러스터링을 사용하려면 우선 라이브러리를 추가해야한다.
앱 수준, Gradle 파일에 다음을 추가한다.

dependencies {
  ...
  compile 'com.google.maps.android:android-maps-utils:0.4'
  ...
}


그 후, 클러스터링 마커를 저장할 데이터 클래스를 생성한다.
클러스터링을 사용하려면 ClusterItem을 구현하여 위, 경도 정보를 반환하는 getPosition()을 재정의 해야한다.

class LatLngData(
    val index : Int,
    val id : Long,
    val latlng: LatLng) : ClusterItem {
    override fun getPosition(): LatLng {
        return latlng
    }
}


이제 Seoul, SEOUL_LAT, SEOUL_LNG 같이 좌표값을 할당하고 ClusterManager를 사용하여 임의의 마커 10개를 추가해준다.

fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap
        mMap.addMarker(MarkerOptions().position(Seoul))
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(Seoul, 14.0f))

        // 클러스터 매니저 생성
        val mClusterManager: ClusterManager<LatLngData> = ClusterManager(this, mMap)
        mMap.setOnCameraChangeListener(mClusterManager)
        for (i in 0..9) {
            val lat: Double = SEOUL_LAT + i / 200.0
            val lng: Double = SEOUL_LNG + i / 200.0
            mClusterManager.addItem(LatLngData(i, i,LatLng(lat, lng)))
        }
    }


이제 구글 맵을 실행하보면 다음과 같이 클러스터링이 형성됨을 볼 수 있다.

image


결론

저번에는 커스텀마커를 구글 맵에서 사용해보았고 이번에는 클러스터링을 만들어 보았다.
그럼 둘 다 쓸수는 없을까?
물론 가능하다. 하지만 클러스터링에는 마커만 커스텀 할 때랑 과정이 조금 다르다.

다음 포스팅에서는 커스텀 마커와 클러스터링을 동시에 구현해보겠다.


향후과제

구글 맵 클러스터링, 커스텀 마커 동시 활용


참고자료

https://blog.b1ue.sh/google-map-clustering-part-1/
https://developers.google.com/maps/documentation/android-sdk/utility/marker-clustering


Writer: Jae-Hwan Lee

댓글남기기