コンテンツにスキップ

マーカークラスタリング

android-marker-clustering モジュールは、MapConductor 用の自動マーカークラスタリングを提供します。 ズームアウト時に近くのマーカーをクラスターにまとめ、ズームイン時に個別のマーカーとして展開します。 あらゆる地図プロバイダ(Google Maps、MapLibre、Mapbox、ArcGIS、HERE など)で動作します。

dependencies {
implementation(platform("com.mapconductor:mapconductor-bom:1.1.3"))
implementation("com.mapconductor:core")
implementation("com.mapconductor:marker-clustering")
// 地図プロバイダを選択
implementation("com.mapconductor:for-googlemaps")
}

任意の XxxMapView のコンテンツブロック内でマーカーを MarkerClusterGroup でラップします:

val markerStates: List<MarkerState> = remember { buildMarkerList() }
XxxMapView(...) {
MarkerClusterGroup<ActualMarker>(
state = remember { MarkerClusterGroupState() },
markers = markerStates,
)
}

ActualMarker はお使いのプロバイダに合わせた地図固有のマーカー型に置き換えてください (例: Google Maps の場合は Marker、MapLibre の場合は Symbol)。

MarkerClusterGroupState でクラスタリングの動作を設定します:

val clusterState = remember {
MarkerClusterGroupState<ActualMarker>(
clusterRadiusPx = 50.0,
minClusterSize = 2,
onClusterClick = { cluster ->
// クラスタータップ時の処理
},
)
}
XxxMapView(...) {
MarkerClusterGroup(
state = clusterState,
markers = markerStates,
)
}

clusterIconProvider ラムダでクラスターのカスタムアイコンを描画します:

val clusterState = remember {
MarkerClusterGroupState<ActualMarker>(
clusterIconProvider = { count ->
DefaultMarkerIcon(
fillColor = Color.Blue,
label = count.toString(),
labelTextColor = Color.White,
)
},
)
}

クラスターグループ内の追加コンテンツ

Section titled “クラスターグループ内の追加コンテンツ”

content ラムダを使って、クラスタリングされたマーカーと一緒に追加のオーバーレイを表示できます:

XxxMapView(...) {
MarkerClusterGroup(
state = clusterState,
markers = markerStates,
) {
// クラスターグループと共にレンダリングされる追加のコンポーザブル
Circle(circleState)
}
}
プロパティデフォルト説明
clusterRadiusPxDouble50.0マーカーをクラスター化するピクセル半径
minClusterSizeInt2クラスターを形成する最小マーカー数
expandMarginDoubleクラスター展開時の追加マージン
clusterIconProvider(Int) -> MarkerIconInterfaceデフォルトの丸バッジクラスターサイズに応じたアイコンを返す
onClusterClick((MarkerCluster) -> Unit)?nullクラスターマーカーがタップされたときに呼び出される
enableZoomAnimationBooleanfalseズーム変更時にマーカーをアニメーションさせる
enablePanAnimationBooleanfalseパン時にマーカーをアニメーションさせる
zoomAnimationDurationMillisLongズームアニメーションの継続時間
cameraIdleDebounceMillisLongカメラ停止後に再クラスタリングするまでのデバウンス時間