您的位置:首页 > 移动开发 > IOS开发

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 OC iOS