Как показать / скрыть значок для SymbolLayer при запуске кластеризации - PullRequest
0 голосов
/ 25 апреля 2019

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

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

// 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 будет эквивалентом, но он не работает.

1 Ответ

0 голосов
/ 25 апреля 2019

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

PropertyFactory.iconAllowOverlap(true)

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

...