如何在 Mapbox JS setFilter() 中编写输入多个值的表达式进行过滤?

How to write expression for inputting multiple values in Mapbox JS setFilter() for filtration?

我可以使用如下表达式在我的 mapbox setFilter() 中成功传递单个值:

var business_domain_values = {0 : 'Corporate', 1 : 'Industrial',
                                  2 : 'Infrastructure', 3 : 'Institutional',
                                  4 : 'Commercial', 5 : 'Residential', 
                                  6 : 'Healthcare', 7 : 'Science & Technology', 
                                  8 : 'Financial Facilities'};

map.setFilter('AW', ['any', ['in', 'Corporate', ['get', 'Business_Unit']]]); 
                              OR
map.setFilter('Key Prospect', ['==', ['get', 'Business_Unit'], business_domain_values[0]]);

但是,我想传递多个值,如 Commercial、Industrial 等,以进行过滤。努力构建像

这样的表达式

方法 #1。

 map.setFilter('AW', ['any', ['in', ['Corporate', 'Industrial'], ['get', 'Business_Unit']]]);

这导致

evented.js:145 错误:layers.AW.filter[1][1][0]:未知表达式“公司”。如果您想要文字数组,请使用 ["literal", [...]].

方法 #2。

map.setFilter('AW', ['any', ['in', ['literal', ['Corporate', 'Industrial']], ['get', 'Business_Unit']]]);

这导致

evented.js:145 错误:layers.AW.filter[1]:预期的第一个参数是布尔值、字符串、数字或空值类型,但发现数组 而不是

感谢您花时间阅读本文,您为此付出的努力非常宝贵。

去年遇到了类似的问题。想我有一个解决方案给你!我相信您需要切换 ["get"] 参数和 ["literal"] 参数的顺序。此代码段应该适合您。

map.setFilter("AW", [
  "any",
  ["in", ["get", "Business_Unit"], ["literal", ["Corporate", "Industrial"]]
]);

这是一个带有工作示例的代码沙箱 link https://codesandbox.io/s/mapbox-filters-example-hhtg5

希望对您有所帮助!我一直在为 Mapbox 编写一系列指南,您可能也会感兴趣。这里有一些 links: