为了账号安全,请及时绑定邮箱和手机立即绑定

Mapbox GL 组合过滤器问题

Mapbox GL 组合过滤器问题

慕的地8271018 2021-08-26 20:13:41
我在使用 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 回答

?
慕后森

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 无法识别更复杂的表达式,这些表达式是有效的“旧语法”。因此,在任何地方使用新语法通常是最安全的.)


查看完整回答
反对 回复 2021-08-26
  • 1 回答
  • 0 关注
  • 522 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信