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



我可以使用以下表达式成功地在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]:第一个参数的类型应为boolean、string、number或null,但找到的数组<字符串,2>而是

感谢你花时间阅读这篇文章,你为此付出的努力是宝贵的。

去年也遇到了类似的问题。我想我有一个解决方案给你!我相信,您需要切换["get"]参数和["literal"]参数的顺序。这个片段应该对你有用。

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

下面是一个代码沙盒链接,带有一个工作示例https://codesandbox.io/s/mapbox-filters-example-hhtg5

希望这能有所帮助!我一直在为Mapbox写一系列指南,你可能也感兴趣。以下是一些链接:

  • Mapbox开发人员手册
  • React和Mapbox GL JS中的源和层的完整指南

最新更新