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
]
}
}
我目前正在尝试设置给定图层中各个单元的不透明度。基于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
]
}
}