TedNaverMapClustering
TedNaverMapClustering는 네이버지도용 클러스터 유틸리티 라이브러리
입니다.
- 클러스터링을 사용하려면 Google지도를 사용해야 했습니다.
: Google지도에서만 Clustering Utility를 통해 클러스터링을 지원했으니까요 - 한국에서 앱을 서비스하기에는 네이버지도가 더 좋은 기능들이 많지만 클러스터링을 사용하려면 어쩔수 없이 Google지도를 사용할 수 밖에 없었죠..
- 네이버지도 팀에서 클러스터링기능을 지원해주면 좋겠지만
나오겠지...나오겠지..
그렇게 몇년이 지나도 클러스터링 기능은 나오지 않았습니다. - 관련 블로그 포스팅: https://gun0912.tistory.com/83
그래서 네이버지도용 클러스터링 라이브러리를 만들었습니다
스크린샷 | 사용예시 |
---|---|
설정
Gradle
dependencies {
implementation 'io.github.ParkSangGwon:tedclustering-naver:x.y.z'
//implementation 'io.github.ParkSangGwon:tedclustering-naver:1.0.2'
}
라이브러리가 유용했다면 위쪽에 별표 버튼을 눌러 저를 신나게 해주세요.
사용법
Repository의 샘플앱을 실행하시고 코드를 보시면 더 쉽게 이해하실 수 있습니다.
1. ClusterItem 구현
- 클러스터링에 쓰일 Model에
TedClusterItem
interface를 implements getTedLatLng()
함수를 구현
Kotlin
data class NaverItem(var position: LatLng) : TedClusterItem {
...
override fun getTedLatLng(): TedLatLng {
return TedLatLng(position.latitude, position.longitude)
}
...
}
Java
public class JavaItem implements TedClusterItem {
...
@NotNull
@Override
public TedLatLng getTedLatLng() {
return new TedLatLng(latLng.latitude, latLng.longitude);
}
...
}
2. TedNaverClustering 구현
- 클러스터링을 위해 TedNaverClustering를 구현해줍니다.
Kotlin
TedNaverClustering.with<NaverItem>(this, naverMap)
.items(getItems())
.make()
Java
TedNaverClustering.with(this, naverMap)
.items(getItems())
.make();
커스터마이징
- 필요한 여러 기능들을 마음대로 변경할 수 있습니다.
모양 변경
customCluster()
: 클러스터 View를 원하는 모양으로 변경customMarker()
: 마커를 원하는 모양으로 변경clusterText()
: 클러스터에 표시될 텍스트 변경clusterBackground()
: 클러스터에 표시될 배경색 변경
Listener
markerClickListener()
: 마커 클릭 ListenerclusterClickListener()
: 클러스터 클릭 ListenermarkerAddedListener()
: 마커가 추가될때 호출되는 ListenerclusterAddedListener()
: 클러스터가 추가될때 호출되는 Listener
애니메이션
clusterAnimation()
: 클러스터->마커, 마커->클러스터 변경될때 애니메이션 유무clickToCenter()
: 클러스터/마커 클릭시 지도 가운데로 이동되는 애니메이션 유무
기타
minClusterSize()
: 클러스터로 보여줄 최소 개수clusterBuckets()
: 클러스터링 기준 범위 목록 설정setAlgorithm()
: 직접 구현한 알고리즘 설정
FAQ
클러스터링을 만드는 알고리즘은 어떻게 되나요?
TedNaverMapClustering
의 클러스터링 알고리즘은 GoogleMap의 클러스터링 알고리즘과 같은 방식으로 클러스터링 됩니다.- 자세한 구현방식이 궁금하시다면 Efficient Filtering and Clustering Mechanism for Google Maps을 읽어보시면 도움이 되실겁니다.
- 본인만의 알고리즘으로 클러스터링을 하길 원하는경우 ScreenBasedAlgorithm를 상속받아 알고리즘을 구현하고
setAlgorithm()
로 설정해주면 됩니다.
다른 지도도 비슷한 방식으로 클러스터링을 만들 수 있나요?
TedNaverMapClustering
은 네이버지도 뿐만 아니라 어떤 지도도 클러스터링을 지원할 수 있도록 설계되어 있습니다.- tedclustering 모듈은 특정 지도에 속해있지 않기 때문에 클러스터링이 필요한 어떤 지도든 확장가능합니다.
- 하지만 현재 Google지도와 Tmap지도는 공식적으로 클러스터링을 지원하고 있기 때문에 추후 클러스터링이 필요한 지도가 있다면 라이브러리형태로 추가되서 지원할 예정입니다.
License
Copyright 2019 Ted Park
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.```