通过字符串化JSON数组属性中包含的值过滤图层

时间:2019-06-15 20:34:36

标签: mapbox mapbox-ios

我们的一个Mapbox图块集中的一个表具有ID的字符串化JSON数组属性:

"string_ids":"[\"a\",\"b\"]"

我想使用此属性过滤功能,但似乎无法在Predicates and Expressions documentation中找到实现此功能的方法。因此,例如,我想过滤功能,以便仅将显示“ string_id”为“ a”的功能过滤。

我相信这会在准备好(https://github.com/mapbox/mapbox-gl-js/issues/4113)后解决我的问题,但是只是想知道目前是否有其他解决方案?

2 个答案:

答案 0 :(得分:1)

NSExpression / NSPredicate实现在支持哪些运算符方面有所不同。 (如果您查看Apple的NSPredicate文档,可能会发现某些核心数据后端也缺乏对某些运营商的支持。)

iOS Map SDK不支持among other operators的字符串INCONTAINSLIKE。在后台,SDK将NSExpressions和NSPredicates转换为the expression syntax described in the Mapbox Style Specification

如您所述,样式规范缺少searching for substrings的运算符。它还缺少用于splitting a string或将字符串转换为JSON对象的运算符(尚未出现,但是可以随意打开它)。

一种解决方法可能是使用-[MGLVectorTileSource featuresInSourceLayersWithIdentifiers:predicate:]在源中查询功能,手动评估属性值是否应显示,然后将修改后的功能添加到新的MGLShapeSource。

您可能遇到的另一个限制是功能查询结果can’t have feature properties set to nested objects and arrays

答案 1 :(得分:0)

v5.8.0-alpha.1版本的Mapbox iOS SDK开始,现在支持该功能。

因此,为了结束我最初的问题的循环,该谓词现在可以按需运行:NSPredicate(format: "string_ids contains 'a'")