mapbox 表达式通过 ids 数组过滤图层的要素属性(要素 id)

问题描述 投票:0回答:1

我正在使用 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 表达式过滤数据的经验并知道正确的方法,而不是继续盲目地试错?

mapbox mapbox-gl
1个回答
0
投票

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"]]],
]
© www.soinside.com 2019 - 2024. All rights reserved.