我有一些具有tags
属性的功能,这是一个数组:
[
{
"type": "Feature",
"properties": {
"id":1,
"tags": ["tagA","tagB"]
}
},
{
"type": "Feature",
"properties": {
"id":2,
"tags": ["tagB","tagE"]
}
},
{
"type": "Feature",
"properties": {
"id":3,
"tags": ["tagZ","tagF"]
}
},
{
"type": "Feature",
"properties": {
"id":4,
"tags": ["tagN","tagP"]
}
},
{
"type": "Feature",
"properties": {
"id":5,
"tags": ["tagY","tagT"]
}
}
]
使用允许的标签列表,
const allowedTags = ['tagY','tagZ']
…Mapbox层过滤器将从我的输入中获得至少有一个标签的特征(在本例中,特征#3和#5)的语法是什么?
我测试了这个
const tagsFilter = ['in', ['get', 'tags'], ['literal', ['tagY','tagZ']]];
map.setFilter("markers",tagsFilter);
但是它不起作用。似乎这种语法更应该用于比较单个值,如
const idFilter = ['in', ['get', 'id'], ['literal', [3,5]]];
谢谢!
我发现这要感谢这个例子:
['any',
['in', 'tagY', ['get', 'tags']],
['in', 'tagZ', ['get', 'tags']]
]
我用它构造了一个函数:
function getTagsFilter(tags){
//no tags set
if ( (tags || []).length === 0) return;
//expression for each tag
const tagFilters = tags.map(tag=>['in',tag,['get', 'tags']])
return ['any'].concat(tagFilters);
}
const allowedTags = ['tagY','tagZ'];
map.setFilter("markers",getTagsFilter(allowedTags));//yeepee!
要排除这些标签,只需使用
map.setFilter("markers",['!',getTagsFilter(disabledTags)]);//yeepee again!