触发集群时如何显示/隐藏SymbolLayer的图标

时间:2019-04-25 08:56:09

标签: mapbox mapbox-android

我为符号层设置了两个图标集。我希望一个图标在一个图层未聚簇且触发群集时可见,我想为同一图层显示一个不同的图标。我的问题是单个图标仍在群集图标下方可见,我希望在群集时隐藏单个图标。如何添加此标志?

为显示群集的新图标,我使用:

// 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 :(得分:0)

我发现了与重叠属性有关的问题。

false

将其设置为{{1}}以供我的单层修复。