如何在Mapbox GL map.setFilter中使用'in'表达式
我试图根据一组条件过滤geoJson层(称为“目的地”)。我的“目的地”层有一个名为如何在Mapbox GL map.setFilter中使用'in'表达式,mapbox,mapbox-gl-js,Mapbox,Mapbox Gl Js,我试图根据一组条件过滤geoJson层(称为“目的地”)。我的“目的地”层有一个名为uniqueID的字符串类型的属性,大多数时候只有一个数字ID,但有时有多个。我想根据ID数组过滤此层(使用map.setFilter)。过滤器应该这样做:如果在ID数组中找到“destination”层中的任何uniqueID值,则过滤掉该特征 下面是我的“目的地”层的一个片段: 下面是我可能使用的ID数组示例:[20009841393] 我尝试过使用表达式(文档)中的来使用过滤器,如下所示: let this
uniqueID
的字符串类型的属性,大多数时候只有一个数字ID,但有时有多个。我想根据ID数组过滤此层(使用map.setFilter
)。过滤器应该这样做:如果在ID数组中找到“destination”层中的任何uniqueID
值,则过滤掉该特征
下面是我的“目的地”层的一个片段:
下面是我可能使用的ID数组示例:[20009841393]
我尝试过使用表达式(文档)中的来使用过滤器,如下所示:
let thisFilter=[“any”].concat(uniqueIDs.map(id=>[“in”,id,[“get”,“uniqueID”]]);
map.setFilter(“目的地”,thisFilter);
但我一直收到这样的错误信息:
Error: "layers.destinations.filter[0][2]: string, number, or boolean expected, array found"
但是,文件规定如下:
["in",
keyword: InputType (boolean, string, or number),
input: InputType (array or string)
]: boolean
表达式中的第三个参数应该是数组。那我为什么会犯这样的错误呢
有什么想法吗?谢谢大家! 我认为你的错误与
中的无关。您可以通过简化表达式,将any
与中的单个分开来发现这一点
您的错误是any
采用了数量可变的参数:
['any', ['in', ...], ['in', ...]]
鉴于您正在传递一个数组:
['any', [['in', ...], ['in', ...]]]
我会这样改写你的表达:
let thisFilter=[“any”,…uniqueID.map(id=>[“in”,id,[“get”,“uniqueID”]]);
['any', [['in', ...], ['in', ...]]]