Mapbox SDK v10 Filter Layer with Swift

xlpyo6sf  于 2023-04-19  发布在  Swift
关注(0)|答案(1)|浏览(152)

我在Map项目与swift工作.我创建了一个数据集,tileset和样式的工作室和它的工作完美的罚款现在.我需要添加一些过滤器在Map上,所以我创建2层的交流和直流.但我不能改变层按钮.我试过这个.
func showACStationLayer(){ guard let style =mapView.styleelse { return }

// Hide DC Station layer
    if let dcStationLayer = style.layer(withIdentifier: dcStationLayerIdentifier) {
        dcStationLayer.isVisible = false
    }

    // Show AC Station layer
    if let acStationLayer = style.layer(withIdentifier: acStationLayerIdentifier) {
        acStationLayer.isVisible = true
    } else {
        let acStationSource = VectorSource(identifier: "acStationSource", configuration: ["url": "your-source-url"])
        let acStationLayer = FillLayer(identifier: acStationLayerIdentifier, source: acStationSource)
        acStationLayer.fillColor = .red
        style.addLayer(acStationLayer)
    }
}

但是有一些问题。idk我能解释一下我的问题吗?
或者我如何用按钮过滤我的图层?非常感谢x1c 0d1x

ej83mcc0

ej83mcc01#

你需要调用mapView.mapboxMap.style.updateLayer(withId:type:update:)来更新图层属性。直接赋值是没有效果的。看看官方的示例代码ShowHideLayerExample
要过滤POI源数据,必须设置Layer.filter表达式。下面是通过class属性过滤数据的示例:

func filterPOILayer(for types: [String]) throws {
    try mapView.mapboxMap.style.updateLayer(withId: "poi-label", type: SymbolLayer.self) { layer in
        layer.filter = Exp(.match) {
            Expression(operator: .get, arguments: [.string("class")])
            types
            true
            false
        }
    }
}

我建议你先在Mapbox Studio中测试表达式。在那里你也可以了解存在哪些类型和类的POI。例如,为了只显示食物POI,有一个food_and_drink类。

相关问题