You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mapbox v2.14.1不接受筛选表达式?语法正确却报错

问题描述

我尝试为某图层设置筛选表达式,该图层所有要素的属性中均有名为"iri"的字符串类型字段,需进行简单的相等匹配判断。但Mapbox v2.14.1报错,提示与传入的筛选器不符。

控制台输出的筛选器对象为:

["==",["get","iri"],"some-iri-value"]

Mapbox的错误输出:

evented.js:151 Error: layers.my-layer.filter: array expected, string found
    at bs (validate_style.js:13:41)
    at iA (style.js:64:5)
    at aA._validate (style.js:2234:16)
    at aA.setFilter (style.js:1647:18)
    at Map.setFilter (map.js:2720:20)

我认为该语法正确,且在样式属性中可正常使用,请问我遗漏了什么?

解决方案

这个问题的核心是Mapbox GL JS v2.x版本的setFilterAPI和样式JSON的筛选规则存在差异:

  • 样式JSON里支持数组格式的筛选表达式,但v2.x的setFilter方法要求传入字符串化的数组表达式,而非直接传数组。
  • 你直接传入数组会被判定为不符合参数要求,所以触发了"array expected, string found"的错误。

你可以通过两种方式解决:

  1. 将数组表达式转为JSON字符串传入
map.setFilter('my-layer', JSON.stringify(["==",["get","iri"],"some-iri-value"]));
  1. 使用简化的字符串筛选语法(无需get表达式)
map.setFilter('my-layer', ['==', 'iri', 'some-iri-value']);

另外补充:Mapbox GL JS v3.x版本已经修复了这个不一致的问题,setFilter可以直接传入数组表达式,但v2.x版本仍需遵循上述规则。

内容的提问来源于stack exchange,提问作者Michael Hillman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:52:08