我正在使用 Mapbox GL JS 1.12。
我正在尝试通过特征 ID 有选择地挤出建筑物。我已成功过滤 Mapbox Studio 中“建筑挤压”层的数据以实现此效果。但是,我很想知道代码方式,这样我就不必在 UI 上的输入表单中手动输入一长串 id。
根据我从在线文档和其他代码片段中收集的信息,我觉得这是一种直观且正确的方法。
let filter=[
"any",
["in", [123456, 245085, 435086], ["to-number", ["get", "id"]]],
['==', 'extrude', 'true']
]
map.setFilter('some-buildings-3d',filter)
错误:
错误:layers.some-buildings-3d.filter[1][1]:预期字符串,数组 找到了
错误:layers.fire-stations-3d.filter[1][2]:字符串、数字或 预期布尔值,找到数组
我正在使用默认的“复合”源来添加图层;
map.addLayer(
{
'id': 'some-buildings-3d',
'source': 'composite',
'source-layer': 'building',
'type': 'fill-extrusion',
'paint': {
'fill-extrusion-color': '#aaa',
'fill-extrusion-opacity': 0.6
}
},labelLayerId
);
StackO 中是否有人有使用 Mapbox 表达式过滤数据的经验并知道正确的方法,而不是继续盲目地试错?
in
的
语法是:
["in",
keyword: InputType (boolean, string, or number),
input: InputType (array or string)
]: boolean
我认为你需要
any
。
[
"any",
["in", 123456, ["to-number", ["get", "id"]]],
["in", 245085, ["to-number", ["get", "id"]]],
["in", 435086, ["to-number", ["get", "id"]]],
]