MapBox 中的选择性不透明度

Selective Opacity in MapBox

我目前正在尝试设置给定图层中各个单元的不透明度。基于this question,我正在创建一个过滤器以获取正确的单元 - 在选择相同的单元以设置单个模式时可以正常工作 - 并尝试相应地设置不透明度值。我的过滤器是以下 MapBoxGL 样式表达式:

filter = [
    "in",
    ["get", "GEOID20"],
    ["literal", geoids],
    1/3, 0
]

根据我对样式表达式的理解,这个应该将查询找到的单位的不透明度设置为1/3,并将其他所有设置为0。但是,我始终得到相同的 JS 错误:

Error: layers.browse_in_vtds20.paint.fill-opacity: Expected 2 arguments, but found 4 instead.

我哪里错了?上面的表达式适用于单独设置 colors/patterns,为什么它不适用于设置不透明度?

你只对了一半。您的这部分过滤器是正确的:

filter = [
    "in",
    ["get", "GEOID20"],
    ["literal", geoids]
]

最后一部分(1/3, 0)您似乎混淆了数据驱动表达式。

过滤器减少了为图层显示的要素数量。如果某些内容与过滤器不匹配,则不会显示。就是这样。

数据驱动的表达式根据每个特征的属性改变一些东西。

您可以通过两种方式解决此问题。

首先,一个不透明度为 0.3 的图层,以及一个隐藏不相关点的滤镜。

例如:

{
  "id": "mypoints",
  "type": "circle",
  "paint": {
    "circle-opacity": 1/3,
  },
  "filter": [
    "in",
    ["get", "GEOID20"],
    ["literal", geoids]
  ]
}

或者,显示所有点的数据驱动表达式,一些在 1/3,一些在 0。

{
  "id": "mypoints",
  "type": "circle",
  "paint": {
    "circle-opacity": [
      "case", [
        "in",
        ["get", "GEOID20"],
        ["literal", geoids]
      ],
      1/3,
      0
    ]
  }
}