我使用Google Maps Android API在地图上显示标记。我的标记基本上是两个圆圈(内部实心圆圈,外部圆圈略微透明,可根据地图的缩放级别进行调整)。由于我的标记总数已增长到1000-2000个标记,因此我的应用程序存在滞后问题。根据规范,聚类不是一种选择。
我从Google Maps API小组获得Ankur在Google I / O 18上的一些反馈。我应该使用圆圈代替抽屉来制作我的标记。
我正在添加和创建这样的圈子:
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)
第一个问题:滞后变得更糟。
第二个问题:我无法为圆圈设置最小或最大尺寸,因为它们使用半径来调整地图上的尺寸。 (放大或缩小让圆圈看起来非常小/大)
有没有人有过这方面的经验,或者使用圆圈作为标记的替代品而没有滞后?
提前致谢。