mapbox gl setFilter按indexOf、contains或substring筛选
我想使用setFilter表达式按子字符串筛选tileset中给定的特征属性。注意:我不想加载tileset外部的特性数组,我希望它只使用setFilter,而不是getFeatures函数,并且不使用循环。如果用户开始键入“mapbox gl setFilter按indexOf、contains或substring筛选,mapbox,mapbox-gl-js,Mapbox,Mapbox Gl Js,我想使用setFilter表达式按子字符串筛选tileset中给定的特征属性。注意:我不想加载tileset外部的特性数组,我希望它只使用setFilter,而不是getFeatures函数,并且不使用循环。如果用户开始键入“smith..”,它将仅在功能键入时使用setFilter过滤掉这些功能 我只看到“==”或“match”,但不区分大小写的子字符串过滤也没有,比如索引of,包含,类似,比如['contains',feature.prop',smi']然后['contains',featu
smith..
”,它将仅在功能键入时使用setFilter
过滤掉这些功能
我只看到“==”
或“match”
,但不区分大小写的子字符串过滤也没有,比如索引of
,包含,类似,比如['contains',feature.prop',smi']
然后['contains',feature.prop',smith']
我在mapbox示例中看到了示例,用于在键入时进行过滤,但我只想使用setFilter
。它看起来不支持我想做的事情,但我想我还是会问的。必须从tileset填充任何本地特性数组是对客户端资源的浪费。它违背了一开始就将数据放在tileset中的目的
任何用于通过部分字符串解析要素属性的标准表达式,而不是完全匹配?正如您所注意到的,Mapbox GL表达式不支持子字符串或正则表达式。因此,我认为唯一的解决办法是按照您提到的思路:获取属性值列表并将其用作自动完成
有两种方法可以获得属性值列表,而不需要进行单独的、可以说是冗余的查询
使用TileJSON中的值。根据TileJSON的生成方式,它通常包含每个属性最常用值的列表(我认为最多1000个左右)
使用querySourceFeatures()
获取当前视口中的所有要素,然后向下过滤以查找您关心的属性值。如果用户想要过滤当前在视口之外的内容,这将没有帮助
正如您所注意到的,Mapbox GL表达式不支持子字符串或正则表达式。因此,我认为唯一的解决办法是按照您提到的思路:获取属性值列表并将其用作自动完成
有两种方法可以获得属性值列表,而不需要进行单独的、可以说是冗余的查询
使用TileJSON中的值。根据TileJSON的生成方式,它通常包含每个属性最常用值的列表(我认为最多1000个左右)
使用querySourceFeatures()
获取当前视口中的所有要素,然后向下过滤以查找您关心的属性值。如果用户想要过滤当前在视口之外的内容,这将没有帮助