Javascript Mapbox GL组合过滤器问题

Javascript Mapbox GL组合过滤器问题,javascript,mapbox,mapbox-gl-js,Javascript,Mapbox,Mapbox Gl Js,我在使用Mapbox GL组合过滤器时遇到问题。过滤器单独工作,但组合使用时会产生错误。borough过滤器使用一个可以动态更改的值数组,但我只是在代码中举例说明它可能是什么样子。每当我尝试组合过滤器时,我都会得到一个错误:预期为[==,!=,>,>=,中的一个。这是一个我已多次落入的陷阱。有旧语法和新语法 旧语法:['=','ZipCode','90210'] 新语法:['=',['get','ZipCode'],'90210'] 正如您所注意到的,在某种程度上仍然支持旧语法。但是如果您尝试将

我在使用Mapbox GL组合过滤器时遇到问题。过滤器单独工作,但组合使用时会产生错误。borough过滤器使用一个可以动态更改的值数组,但我只是在代码中举例说明它可能是什么样子。每当我尝试组合过滤器时,我都会得到一个错误:预期为[==,!=,>,>=,中的一个。这是一个我已多次落入的陷阱。有旧语法和新语法

旧语法:['=','ZipCode','90210']

新语法:['=',['get','ZipCode'],'90210']

正如您所注意到的,在某种程度上仍然支持旧语法。但是如果您尝试将旧语法和新语法结合起来,Mapbox GL JS会假设整个表达式都是新语法,并且无法解析

简单的解决方法是在整个过程中使用新语法:

var borough_val = ["BX", "BK", "MN"];

var zipCodeFilter = ["==", ['get', 'ZipCode'], Number(zipcode_val)];
var boroughFilter = ['match', ['get', 'Borough'], borough_val, true, false];

var combinedFilter = ["all", zipCodeFilter, boroughFilter];
map.setFilter('parcels_fill', combinedFilter);

也有一些情况下,Mapbox GL JS无法识别更复杂的表达式,这些表达式是有效的旧语法。因此,在任何地方使用新语法通常都是最安全的。

这是我多次陷入的陷阱。有旧语法也有新语法

旧语法:['=','ZipCode','90210']

新语法:['=',['get','ZipCode'],'90210']

正如您所注意到的,在某种程度上仍然支持旧语法。但是如果您尝试将旧语法和新语法结合起来,Mapbox GL JS会假设整个表达式都是新语法,并且无法解析

简单的解决方法是在整个过程中使用新语法:

var borough_val = ["BX", "BK", "MN"];

var zipCodeFilter = ["==", ['get', 'ZipCode'], Number(zipcode_val)];
var boroughFilter = ['match', ['get', 'Borough'], borough_val, true, false];

var combinedFilter = ["all", zipCodeFilter, boroughFilter];
map.setFilter('parcels_fill', combinedFilter);

在某些情况下,Mapbox GL JS无法识别更复杂的表达式,而这些表达式是有效的旧语法。因此,在任何地方使用新语法通常都是最安全的。

似乎不支持将匹配作为筛选器定义?可能这是旧语法,看起来像与旧的过滤器语法相比,新版本中有一些变化,但是我应该使用什么来代替呢?我已经尝试了“in”但没有用。我想应该是['in',Borough',…Borough\u val],但这只是我的假设。您需要使用对象扩展运算符,以便合并数组区域,而不是使用嵌套数组。谢谢。我想出了另一种方法。似乎我必须将zipCodeFilter的语法更改为[==,['get','ZipCode'],Numberzipcode\u val];它似乎是这样工作的,我想文档可能会更清晰。似乎不支持将匹配作为筛选器定义?可能这是旧语法。似乎新版本与旧筛选器语法相比有一些更改,但我使用了什么替代方法?我尝试了“输入”但没有可用性我想应该是这样的['in','Borough',…Borough_val],但这只是我的假设。你需要使用对象扩展运算符,以便合并数组Borough_val,而不是使用嵌套数组。谢谢。我想出了另一种方法。似乎我必须将zipCodeFilter的语法更改为[=,['get','ZipCode'],Numberzipcode_val];它似乎是这样工作的,我想文档可能会更清晰。