У меня есть два набора иконок для слоя символов. Я хочу, чтобы один значок был виден, когда слой не кластеризован, а когда кластер запущен, я хочу показать другой значок для того же слоя. У меня проблема в том, что один значок все еще виден под значком кластера, я хочу, чтобы один значок был скрыт при кластеризации. Как мне добавить этот флаг?
Чтобы показать новую иконку для кластеров, я использую:
// 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
будет эквивалентом, но он не работает.