猿问

Mapbox GL 组合过滤器问题

我在使用 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);


慕的地8271018
浏览 523回答 1
1回答

慕后森

这是我多次陷入的陷阱。有“旧语法”和“新语法”。旧语法: ['==', '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 无法识别更复杂的表达式,这些表达式是有效的“旧语法”。因此,在任何地方使用新语法通常是最安全的.)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答