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