关键字检索需要利用的类是AGSServiceFeatureTable和AGSQueryParameters,通过AGSServiceFeatureTable的queryFeaturesWithParameters:系列方法,检索对应条件的元素结果。
-(id<AGSCancelable>)queryFeaturesWithParameters:(AGSQueryParameters *)parameters
queryFeatureFields:(AGSQueryFeatureFields)queryFeatureFields
completion:(nullable void(^)(AGSFeatureQueryResult *__nullable result, NSError *__nullable error))completion;
AGSServiceFeatureTable类实体是根据动态图层服务初始化得来,但是要注意,直接根据动态图层服务无法初始化得到AGSServiceFeatureTable对象,必须是服务下的子图层服务链接才行,这就意味着query检索比较繁琐,因为一个动态服务下的子图层不仅仅有多个,而且可能存在嵌套关系,能使用的动态图层服务链接是类似这样的:
http://XXXXX/arcgis/rest/services/GTKJGH/CJXC_KG_2019/MapServer/3
注意最后面的"/3",其对应的就是服务下的子图层id。AGSServiceFeatureTable初始化代码如下:
[[AGSServiceFeatureTable alloc] initWithURL:[NSURL URLWithString:[executeObject.serviceURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]]]
AGSServiceFeatureTable对象也可以通过动态图层AGSArcGISMapImageLayer实例遍历得到的子图层AGSArcGISMapImageSublayer对象的table属性访问得到,关于子图层获取,参照前面的博文。
然后是AGSQueryParameters,初始化后主要在于它的属性设置,一个是returnGeometry:是否要返回元素图形形状信息,一个是whereClause:查询的SQL语句。
whereClause关键字查询语句:"XXXFieldName" LIKE '%绿地%',标注蓝色的部分是需要查询匹配的属性名,注意不是别名(alias),标注绿色部分是关键字,语句中的%是匹配任意字符的意思,当需要查询多个属性的匹配结果,语句注意要用括号括起来,如:(("XXXFieldName1" LIKE '%绿地%') OR ("XXXFieldName2" LIKE '%绿地%')),关于属性,可以通过AGSServiceFeatureTable实例的fields属性获取:
@property (nonatomic, copy, readonly) NSArray<AGSField*> *fields;
也可以通过浏览器查看属性信息,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/c1cde442e7c293e900ab369d220ec2f8.png)
最后,使用AGSServiceFeatureTable的query系列方法检索获取结果便可,这里还需要注意,其结果的获取通过回调的AGSFeatureQueryResult的featureEnumerator属性对象的allObjects获取,得到的就是AGSFeature类元素对象:
[FeatureTable queryFeaturesWithParameters:params queryFeatureFields:AGSQueryFeatureFieldsLoadAll completion:^(AGSFeatureQueryResult * _Nullable result, NSError * _Nullable error) {
for (AGSFeature *resultFeature in result.featureEnumerator.allObjects) {
//遍历得到的元素对象,可以拿来获取属性值,以及图形信息等
}
}];