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
서론
클러스터링이란 무엇인가?
개념을 알기 전에, 다음 사진을 보자.
다음과 같이 마커가 여러개 있는 경우, 지저분해 보일 뿐만아니라 마커를 구분할 수가 없게된다.
위의 사진은 좀 전의 사진에 비해서 굉장히 깔끔해졌다.
이 처럼 가까운 거리에 따라 마커들을 하나의 무리로 만들어 주는 기법이 클러스터링이다.
본론
클러스터링을 사용하려면 우선 라이브러리를 추가해야한다.
앱 수준, 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)))
}
}
이제 구글 맵을 실행하보면 다음과 같이 클러스터링이 형성됨을 볼 수 있다.
결론
저번에는 커스텀마커를 구글 맵에서 사용해보았고 이번에는 클러스터링을 만들어 보았다.
그럼 둘 다 쓸수는 없을까?
물론 가능하다. 하지만 클러스터링에는 마커만 커스텀 할 때랑 과정이 조금 다르다.
다음 포스팅에서는 커스텀 마커와 클러스터링을 동시에 구현해보겠다.
향후과제
구글 맵 클러스터링, 커스텀 마커 동시 활용
참고자료
https://blog.b1ue.sh/google-map-clustering-part-1/
https://developers.google.com/maps/documentation/android-sdk/utility/marker-clustering
Writer: Jae-Hwan Lee
댓글남기기