MapBox中设置图层单个要素选择性不透明度报错如何解决
错误原因
- 你混淆了Mapbox GL的筛选器(filter)和条件样式表达式的用法:
filter本身是独立的图层配置项,作用是筛选出符合条件的要素才会被图层渲染,返回值只能是布尔值(true/false),不能直接作为fill-opacity这类 paint 属性的赋值表达式。- 你当前把
in判断直接作为fill-opacity的属性值,还额外加了两个返回值(1/3、0),但in表达式本身只接受3个参数:判断规则、待匹配的值、匹配集合,多出来的参数就会触发参数数量不匹配的报错。
- 你之前给颜色/图案设置时生效,大概率是之前的写法外层套了
case条件分支表达式,本次遗漏了这一层。
正确实现代码
如果你要实现「匹配GEOID20的要素不透明度1/3,其余为0」的效果,fill-opacity的表达式应该这么写:
["case", // 条件:当前要素的GEOID20在geoids数组里 ["in", ["get", "GEOID20"], ["literal", geoids]], // 条件成立返回的不透明度 1/3, // 条件不成立返回的默认值 0 ]
如果你不需要显示未匹配的要素,也可以不用写case判断不透明度,直接给图层加filter筛选,然后统一设置fill-opacity: 1/3即可,性能会更好:
// 图层filter配置 filter: ["in", ["get", "GEOID20"], ["literal", geoids]], // paint配置 "fill-opacity": 1/3
内容的提问来源于stack exchange,提问作者pizzimathy
相关产品推荐
相关产品推荐

