Как показать/скрыть значок для SymbolLayer при запуске кластеризации

У меня есть два набора значков для слоя символов. Я хочу, чтобы один значок был виден, когда слой не сгруппирован, и когда кластер срабатывает, я хочу показать другой значок для того же слоя. У меня проблема в том, что один значок все еще виден под значком кластера, я хочу, чтобы один значок был скрыт при кластеризации. Как добавить этот флаг?

Чтобы показать новый значок для кластеров, я использую:

// Add Source
val options = GeoJsonOptions().withCluster(true).withClusterRadius(30)
val stopSource = GeoJsonSource(sourceId, collection, options)
style.addSource(stopSource)

// Add single layer
val singleLayer = SymbolLayer(singleLayerId, sourceId).apply {
                       withProperties(
                           PropertyFactory.iconImage(singleLayerId),
                           PropertyFactory.iconAllowOverlap(true)
                       )
                   }

style.addImage(singleLayerId, singleIcon)
style.addLayer(singleLayer)


// Add cluster layer
val clusterLayer = SymbolLayer(clusterLayerId, sourceId).apply {

                       setFilter(eq(get("cluster"), true))

                       withProperties(
                           PropertyFactory.iconImage(clusterLayerId),
                           PropertyFactory.iconAllowOverlap(true)
                       )
                   }

style.addImage(clusterLayerId, clusterIcon)
style.addLayer(clusterLayer)

Это работает, но только для кластеров. Единственный значок все еще виден.

Я использую флаг setFilter(eq(get("cluster"), true)) по чистой догадке, так как я просмотрел реализацию iOS, которая имеет то же требование, и, похоже, она работает так, как предполагалось.

Если я использую setFilter(eq(get("cluster"), false)) для одного слоя, значок вообще не виден.

iOS использует флаг, например:

Значок одного слоя: layer.predicate = NSPredicate(format: "%K != YES", "cluster")

Значок кластерного слоя: layer.predicate = NSPredicate(format: "%K == YES", "cluster")

Мои надежды, что setFilter будет эквивалентом, но это не работает.


person Rob    schedule 25.04.2019    source источник


Ответы (1)


Я нашел проблему, которая была связана с перекрывающимся свойством.

PropertyFactory.iconAllowOverlap(true)

Установка этого параметра на false для моего однослойного исправлена.

person Rob    schedule 25.04.2019