我可以使用以下表达式成功地在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中的源和层的完整指南