ArcGIS(version 100) for iOS 搜索
2018-01-23 17:39
585 查看
将要搜索的图层加入地图
AGSFeatureLayer *featureLayer = [AGSFeatureLayer featureLayerWithFeatureTable:featureTable]; [self.map.operationalLayers addObject:featureLayer];
AGSQueryFeatureFields
AGSQueryFeatureFields是一个枚举:/** @since 100 */ typedef NS_ENUM(NSInteger, AGSQueryFeatureFields) { AGSQueryFeatureFieldsIDsOnly = 0, /*!< */ AGSQueryFeatureFieldsMinimum = 1, /*!< */ AGSQueryFeatureFieldsLoadAll = 2, /*!< */ };
//只返回指定objectId的field的搜索结果,与QueryParameters的属性objectIDs配合使用. AGSQueryFeatureFieldsIDsOnly
//返回最小范围的搜索结果 AGSQueryFeatureFieldsMinimum
//返回所有的搜索结果 AGSQueryFeatureFieldsLoadAll
设置QueryParameters
//首先要初始化query AGSQueryParameters *query = [AGSQueryParameters queryParameters];
QueryParameters的属性:
returnGeometry:returnGeometry属性是布尔型, 设置搜索结果是否返回Geometry,YES是返回.
whereClause:
用于筛选查询结果的SQL语句, 当全部查询时,其属性值为字符串@”1=1”
当按条件搜索或模糊搜索时,如下:
#pragma mark - 模糊搜索 //searchText为用户输入的text, 返回值为whereClause的值. - (NSString *)getWhereStringWithFeatureLayer:(AGSFeatureLayer *)featureLayer searchText:(NSString *)searchText { BOOL isNumber = [self isNumber:searchText]; NSMutableString *muStr = [NSMutableString string]; NSArray *fields = featureLayer.featureTable.fields; for (AGSField *field in fields) { //按它们的name和number搜索: if ([field.name isEqualToString:@"name"] || [field.name isEqualToString:@"number"]) { switch (field.type) { case AGSFieldTypeText: [muStr appendString:@" upper("]; [muStr appendString:field.name]; [muStr appendString:@") LIKE '%"]; [muStr appendString:searchText.uppercaseString]; [muStr appendString:@"%' or"]; break; case AGSFieldTypeOID: if (isNumber == YES) { [muStr appendString:@" upper("]; [muStr appendString:field.name]; [muStr appendString:@") = "]; [muStr appendString:searchText]; [muStr appendString:@" or"]; } default: break; } } } NSString *resultStr = muStr; if (muStr.length == 0) { return @""; } return [resultStr substringToIndex:resultStr.length - 2]; } #pragma mark - 判断是否是数字 - (BOOL)isNumber:(NSString *)str { BOOL result = NO; NSString* number = @"^[0-9]+$"; NSPredicate *numberPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",number]; result = [numberPre evaluateWithObject:str]; if (result == YES) { return YES; }else { return NO; } }
orderByFields:
设置需要排序的Fields, 被查询的service必须支持高级查询.
当AGSQueryFeatureFields为AGSQueryFeatureFieldsMinimum时, 设置orderByFields可以改变返回的filde,如:
//搜索返回的结果中,除了返回FieldsMinimum的结果,还会返回fields的mapid. //sortOrder:设置正序/倒序 AGSOrderBy *orderBy = [AGSOrderBy orderByWithFieldName:@"mapid" sortOrder:AGSSortOrderAscending]; query.orderByFields = @[orderBy];
objectIDs:
设置只返回指定objectId的fields.
使用此属性时,AGSQueryFeatureFields要设置为AGSQueryFeatureFieldsIDsOnly
AGSServiceFeatureTable
//这里一定要将AGSFeatureLayer类型转化为AGSServiceFeatureTable类型,否则搜索不到. AGSServiceFeatureTable *serviceFeatureTable = (AGSServiceFeatureTable *)featureLayer.featureTable; //搜索 [serviceFeatureTable queryFeaturesWithParameters:query queryFeatureFields:fields completion:^(AGSFeatureQueryResult * _Nullable result, NSError * _Nullable error) { if (!error && result.featureEnumerator.allObjects.count > 0) { //其他逻辑....... } else { //其他逻辑....... } }
搜索图层全部的fields的代码
// if (featureLayer) { AGSQueryFeatureFields fields = AGSQueryFeatureFieldsLoadAll; AGSQueryParameters *query = [AGSQueryParameters queryParameters]; query.returnGeometry = YES; query.whereClause = @"1=1"; AGSServiceFeatureTable *serviceFeatureTable = (AGSServiceFeatureTable *)featureLayer.featureTable; [serviceFeatureTable queryFeaturesWithParameters:query queryFeatureFields:fields completion:^(AGSFeatureQueryResult * _Nullable result, NSError * _Nullable error) { if (!error && result.featureEnumerator.allObjects.count > 0) { //搜索到了结果...... } } }
相关文章推荐
- ArcGIS(version 100.1) for iOS 添加天地图
- ARCGIS RUNTIME FOR IOS总结(五)
- Arcgis for ios笔记
- ArcGIS for Android Runtime100 基本操作(七)——三维地图初步使用
- 【教程连载】ArcGIS for iOS 开发系列(3) – 基础篇-“Hello World Map”
- ArcGIS Runtime SDK for iOS(二) ---使用定时器绘制由point组成的polyLine,并显示位置坐标
- ArcGIS for iOS 开发系列(3) – 基础篇-“Hello World Map”
- ArcGIS for Android Runtime100 基本操作(三)——离线数据空间查询
- ArcGIS Runtime SDK for iOS(五) --- 空间几何分析与操作(上)
- 结合arcgis api for js进行PIO搜索
- GitHub For iOS Top 100 简介
- Arcgis Runtime for andriod 100 Simple marker symbol
- ArcGIS for iOS 开发系列(10) – 基础篇-空间要素-符号渲染和属性信息
- arcgis for ios 将地图放大到更大
- ARCGIS RUNTIME FOR IOS总结(三)
- ArcGIS RunTime SDK For ios 10.1.1学习笔记(一)HelloMapWorld
- ArcGIS SDK for iOS开发系列教程
- ArcGIS Runtime SDK for iOS(一) – 实现地图的不同点的callout展示
- 警告:object file was built for newer iOS version (8.3) than being linked (7.0)
- 【教程连载】ArcGIS for iOS 开发系列(2) – 开发环境配置