Использование кругов вместо маркеров в Google Maps API - PullRequest
0 голосов
/ 30 мая 2018

Я использую 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)

Первая проблема: отставание ухудшилось.

Вторая проблема: Я не могу установить минимальный или максимальный размер для кругов, потому что они используют радиус для настройки размера на карте.(увеличение или уменьшение, чтобы круги выглядели очень-очень маленькими / большими)

Есть ли у кого-нибудь опыт с этим или использует круги в качестве замены маркеров без отставания?

Заранее спасибо.

...