Карты Google: более 200 маркеров и кластеризация – медленноAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Карты Google: более 200 маркеров и кластеризация – медленно

Сообщение Anonymous »

Я получаю данные асинхронно с серверной части, поэтому возможности загрузить их из памяти нет.
Я создал карту вот так

Код: Выделить всё

@Composable
private fun HoaxLocatorScreen(
cameraPosition: CameraPositionState,
userMarkerState: MarkerState,
userMarkerKey: PersistentList,
hoaxLocation: HoaxLocation,
hoaxVenues: ImmutableList,
onClusterTap: () -> Unit,
) {
GoogleMap(
cameraPositionState = cameraPosition,
modifier = Modifier
.fillMaxSize()
) {
when (hoaxLocation) {
HoaxLocation.HoaxFineLocation -> {
MarkerComposable(
userMarkerKey,
state = userMarkerState
) {
HoaxUserFineLocationIndicator()
}
}

is HoaxLocation.HoaxCoarseLocation -> {
hoaxLocation.radius?.toDouble()?.let { locationRadius ->
Circle(
center = userMarkerState.position,
radius = locationRadius,
fillColor = HoaxYellow.copy(alpha = 0.3f),
strokeColor = HoaxYellow,
strokeWidth = 2f
)
}
}

HoaxLocation.HoaxUnknownLocation -> {
}
}

HoaxClustering(
hoaxVenues = hoaxVenues,
)
}
}
и

Код: Выделить всё

@Composable
fun HoaxClustering(
hoaxVenues: ImmutableList,
) {
val clusterManager = rememberClusterManager()

clusterManager?.algorithm =
PreCachingAlgorithmDecorator(NonHierarchicalDistanceBasedAlgorithm())

val renderer = rememberClusterRenderer(
clusterContent = { hoaxVenueCluster ->
HoaxClusterItem(
size = hoaxVenueCluster.size
)
},
clusterItemContent = { hoaxVenue ->
HoaxVenueMarker()
},
clusterManager = clusterManager,
)

SideEffect {
clusterManager ?: return@SideEffect
clusterManager.setOnClusterClickListener {
false
}
clusterManager.setOnClusterItemClickListener {
false
}
clusterManager.setOnClusterItemInfoWindowClickListener {

}
}

SideEffect {
if (clusterManager?.renderer != renderer) {
clusterManager?.renderer = renderer ?: return@SideEffect
}
}

if (clusterManager != null) {
Clustering(
items = hoaxVenues,
clusterManager = clusterManager,
)
}

}
Но это становится очень медленным.
Да, я проверил и не делаю сумасшедшего количества рекомпозиций.
Я пробовал использовать этот алгоритм, который показывает только те маркеры, которые виден на экране, но в сочетании с кластеризацией это плохой выбор (количество маркеров кластера становится динамическим и меняется в зависимости от положения просмотра)
Что я могу сделать?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ering-slow
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»