Я использую Google Maps Android API для отображения маркеров на карте.Мои маркеры - это в основном два круга (внутренний сплошной круг со слегка прозрачными внешними кругами, которые корректируются в соответствии с уровнем масштабирования карты).Поскольку мое общее количество маркеров выросло до 1000-2000 маркеров, мое приложение имеет проблемы с задержкой.Кластеризация не является вариантом в соответствии со спецификациями.
Я получил отзыв от Google I / O 18 от Ankur от команды Google Maps API.Я должен использовать круги вместо рисования для своих маркеров.
Я добавляю и создаю круги следующим образом:
private var selectedPoi: Poi? = null
fun addCircles(pois: List<Poi>) {
pois.forEach { poi ->
val zoomLevel = map.cameraPosition.zoom.toDouble()
val isSelected = selectedPoi?.id == poi.id
val innerCircleOptions = circleOptionsProvider.getInnerCircleOptions(poi, markersVisible, isSelected)
val outerCircleOptions = circleOptionsProvider.getOuterCircleOptions(poi, zoomLevel, markersVisible, isSelected)
map.addCircle(innerCircleOptions).apply { tag = poi }
map.addCircle(outerCircleOptions).apply { tag = poi }
}
}
fun getInnerCircleOptions(poi: Poi, markersVisible: Boolean, isSelected: Boolean): CircleOptions =
CircleOptions()
.fillColor(colorForPoi(poi, isSelected))
.strokeWidth(0f)
.zIndex(if (isSelected) INNER_CIRCLE_SELECTED_Z_INDEX else INNER_CIRCLE_Z_INDEX)
.center(poi.location.toLatLng())
.radius(5.0)
.visible(markersVisible)
.clickable(!isSelected)
fun getOuterCircleOptions(poi: Poi, zoomLevel: Double, markersVisible: Boolean, isSelected: Boolean): CircleOptions =
CircleOptions()
.fillColor(if (isSelected) context.color(R.color.colorPrimary) else context.color(R.color.black_30))
.strokeWidth(0f)
.zIndex(if (isSelected) OUTER_CIRCLE_SELECTED_Z_INDEX else OUTER_CIRCLE_Z_INDEX)
.center(poi.location.toLatLng())
.radius(radiusForZoomLevel(zoomLevel, isSelected))
.visible(markersVisible)
.clickable(!isSelected)
Первая проблема: отставание ухудшилось.
Вторая проблема: Я не могу установить минимальный или максимальный размер для кругов, потому что они используют радиус для настройки размера на карте.(увеличение или уменьшение, чтобы круги выглядели очень-очень маленькими / большими)
Есть ли у кого-нибудь опыт с этим или использует круги в качестве замены маркеров без отставания?
Заранее спасибо.