11. ArcGIS Runtime SDK for iOS 100.X チュートリアル シリーズのキーワード検索

キーワードの取得に必要なクラスはAGSServiceFeatureTableとAGSQueryParametersであり、AGSServiceFeatureTableのqueryFeatureWithParameters:seriesメソッドにより、条件に該当する要素結果を取得します。

-(id<AGSCancelable>)queryFeaturesWithParameters:(AGSQueryParameters *)parameters
                             queryFeatureFields:(AGSQueryFeatureFields)queryFeatureFields
                                     completion:(nullable void(^)(AGSFeatureQueryResult *__nullable result, NSError *__nullable error))completion;

AGSServiceFeatureTable クラス エンティティは、動的レイヤー サービスに基づいて初期化されますが、AGSServiceFeatureTable オブジェクトは動的レイヤー サービスに基づいて直接初期化できないことに注意してください。これは、サービスの下のサブレイヤー サービス リンクである必要があります。つまり、クエリ動的サービスの下には複数のサブレイヤーがあるだけでなく、ネストされた関係も存在する可能性があるため、取得はより面倒です。使用できる動的レイヤー サービス リンクは次のようになります。

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 オブジェクトのテーブル プロパティを通じてアクセスすることもできます。サブレイヤーの取得については、前のブログ投稿を参照してください。

次に AGSQueryParameters ですが、初期化後は主に returnGeometry: 要素の図形情報を返すかどうか、もう 1 つは whereClause: クエリ SQL 文のプロパティの設定に依存します。

whereClause キーワード クエリ ステートメント: " XXXFieldName " LIKE '% green %'、青でマークされた部分は、クエリして照合する必要がある属性名です。これはエイリアス (alias) ではないことに注意してください。緑でマークされた部分は、キーワード、およびステートメント内の % は、文字の意味に一致します。複数の属性の一致結果をクエリする必要がある場合は、ステートメントを次のように括弧で囲む必要があります。 ((" XXXFieldName1 " LIKE ' % green % ') OR (" XXXFieldName2 " LIKE '% green %'))、属性に関しては、AGSServiceFeatureTable インスタンスのフィールド属性を通じて取得できます。

@property (nonatomic, copy, readonly) NSArray<AGSField*> *fields;

次の図に示すように、ブラウザを通じて属性情報を表示することもできます。 

Web側サービスの属性情報を参照する

最後に、AGSServiceFeatureTable のクエリ シリーズ メソッドを使用して結果を取得します。ここで、結果はコールバック AGSFeatureQueryResult の featureEnumerator 属性オブジェクトの allObjects を通じて取得され、取得されたのは AGSFeature クラス要素オブジェクトであることにも注意してください。

[FeatureTable queryFeaturesWithParameters:params queryFeatureFields:AGSQueryFeatureFieldsLoadAll completion:^(AGSFeatureQueryResult * _Nullable result, NSError * _Nullable error) {
    for (AGSFeature *resultFeature in result.featureEnumerator.allObjects) {
//遍历得到的元素对象,可以拿来获取属性值,以及图形信息等
}
}];

 

おすすめ

転載: blog.csdn.net/qq_31672459/article/details/103297087