在Google Maps API中使用Circles而不是Markers

时间:2018-05-30 14:11:46

标签: android google-maps google-maps-android-api-2 marker

我使用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)

第一个问题:滞后变得更糟。

第二个问题:我无法为圆圈设置最小或最大尺寸,因为它们使用半径来调整地图上的尺寸。 (放大或缩小让圆圈看起来非常小/大)

有没有人有过这方面的经验,或者使用圆圈作为标记的替代品而没有滞后?

提前致谢。

0 个答案:

没有答案