我在使用 Mapbox GL 组合过滤器时遇到问题。过滤器单独工作,但组合时会产生错误。自治市镇过滤器使用一个可以动态更改的值数组,但我只是在代码中放了一个示例,说明它可能是什么样子。每当我尝试组合过滤器时,我都会收到错误消息:“期望 [==, !=, >, >=, <, <=, in, !in, all, any, none, has, !has] 之一, “找到匹配”问题似乎是将使用“匹配”表达的过滤器与使用“==”运算符的过滤器组合在一起。有谁知道如何解决这一问题。var borough_val = ["BX", "BK", "MN"];var zipCodeFilter = ["==", 'ZipCode', Number(zipcode_val)];var boroughFilter = ['match', ['get', 'Borough'], borough_val, true, false];var combinedFilter = ["all", zipCodeFilter, boroughFilter];map.setFilter('parcels_fill', combinedFilter);
1 回答
![?](http://img1.sycdn.imooc.com/545868550001f60202200220-100-100.jpg)
慕后森
TA贡献1802条经验 获得超5个赞
这是我多次陷入的陷阱。有“旧语法”和“新语法”。
旧语法: ['==', '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 无法识别更复杂的表达式,这些表达式是有效的“旧语法”。因此,在任何地方使用新语法通常是最安全的.)
添加回答
举报
0/150
提交
取消