エンタープライズ ジオデータベースを用いた クエリ レイヤーの活用方法 (実践編)

496
0
07-30-2024 10:58 PM

エンタープライズ ジオデータベースを用いた クエリ レイヤーの活用方法 (実践編)

はじめに

本シリーズ記事では、クエリ レイヤーの公開方法・ ArcGIS Maps SDK for .NET でクエリ レイヤーを利用する方法を2部構成でご説明いたします。前回の記事ではエンタープライズ ジオデータベースを用いたクエリ レイヤーの概要と公開方法に関してご紹介しました。今回は公開されたレイヤーを ArcGIS Maps SDK for .NET で開発するクライアント アプリケーションにてマップ表示する方法、参照元 DB を更新する方法に関してご説明していきます。

 

本記事では前回の構成に加え、下記の構成で作業を実施していきます。

ArcGIS Maps SDK for .NET の利用方法はこちらのサイトをご参照ください。

 

作業環境

SDK

ArcGIS Maps SDK for .NET 200.3

 

1.構成図.png

 

レイヤーのマップ表示

公開されているレイヤーを呼び出し、クライアント アプリケーションに表示させます。

公開からマップ表示までの一連の処理は通常のフィーチャ レイヤーと同一となります。

手順としては、まずレイヤーを公開したサーバーのサービスにアクセスし、サービスの URL をレイヤー ID まで含む形で取得します。

2.マップ表示-サービスURL取得.png

 

次に ArcGIS Maps SDK for .NET を用いコーディングしていきます。

先ほど取得したサービスの URLを基にフィーチャ サービスの URL(_featureLayerPath) を指定して、フィーチャ テーブル (ServiceFeatureTable) オブジェクトを作成します。次にフィーチャ テーブルからフィーチャ レイヤー (FeatureLayer) オブジェクトを作成します。最後にMap オブジェクトの操作レイヤー (OperationalLayers) にフィーチャ レイヤーを追加することで下図のようにマップにレイヤーが表示されます。

 

 

//サービス URL
public string _featureLayerPath = <サービスURL>;
//フィーチャテーブル
public ServiceFeatureTable serviceFeatureTable;
//フィーチャレイヤー
public FeatureLayer featureLayer;
 
serviceFeatureTable = new ServiceFeatureTable(new Uri(_featureLayerPath));
featureLayer = new FeatureLayer(serviceFeatureTable);

MyMapView.Map.OperationalLayers.Add(featureLayer);

 

 

 

3.クエリレイヤー表示.png

 

クエリ レイヤー内の各テーブルの追加・更新処理

クエリ レイヤーにて結合したテーブル自体には追加・更新できないため、結合元のテーブルに対し個々に追加・更新を行います。その際、レイヤーとスタンドアロン テーブルでサービスの参照先が一部異なります。また、テーブルへの追加と更新では処理内容が異なります。

 

サービスの参照先(レイヤーの場合)

公開したレイヤーのサービスの URL をレイヤー ID まで含む形で取得します。

 

4.テーブル更新-サービスURL取得(レイヤー).png

 

 

サービスの参照先(スタンドアロン テーブル の場合)

レイヤーの場合と異なり、空のレイヤーがレイヤー ID の 番目に格納され 番以降にスタンドアロン テーブルが格納されます。

該当のスタンドアロン テーブルを確認し、 URL をレイヤー ID まで含む形で取得します。

 

5.テーブル更新-サービスURL取得(スタンドアロン).png

 

 

追加・更新処理

追加と更新ではコーディングの仕方が異なります。

 

まず、追加・更新の共通処理として、サービスの URL を基にフィーチャ サービスの  URL(_featureLayerPath) を指定して、フィーチャ テーブル (ServiceFeatureTable) オブジェクトを作成します。

 

 

//サービス URL
private string _ featureLayerPath = <サービス URL>
//フィーチャテーブル
public ServiceFeatureTable serviceFeatureTable;

serviceFeatureTable = new ServiceFeatureTable(new Uri(_featureLayerPath));

 

 

次にデータ追加の場合とデータ更新の場合の記述方法をそれぞれご説明いたします。

 

データ追加の場合

データ追加用の空のフィーチャを作成します。作成したフィーチャを読み込み、データをフィールドに設定します。最後にテーブルへ今回作成したフィーチャを追加し、変更をフィーチャ サービスにアップロードします。

 

 

Feature Feature_Geo = serviceFeatureTable.CreateFeature();
await (Feature_Geo as ArcGISFeature).LoadAsync();
Feature_Geo.SetAttributeValue(<フィールド名>, <値>);

await serviceFeatureTable.AddFeatureAsync(Feature_Geo);
await serviceFeatureTable.ApplyEditsAsync();

 

 

以下の動画はデータを追加した際の例となります。

本例では東京都の公園をシンボル表示しています。

今回はジオコーディングで千代田区の ESRIジャパン本社の住所に公園シンボルを追加し、レイヤーの表示が切り替わることを確認しました。

 

 

データ更新の場合

クエリにて更新対象のデータを取得します。まずパラメータクラスのインスタンスを作成し、更新対象を探索するクエリの条件句を設定します。クエリを実行し、結果を取得します。取得したデータに対し繰り返し処理を実施します。繰り返し処理内にて、個々のフィーチャを読み込みフィールドごとに値を設定し、テーブルへ今回更新したフィーチャを追加、変更をフィーチャ サービスにアップロードします。

 

 

QueryParameters param = new QueryParameters(); 
param.WhereClause = <SQLのWhere句の内容を記述>;

FeatureQueryResult featureResult = await serviceFeatureTable.QueryFeaturesAsync(param);

foreach (Feature feature in featureResult)
{
    await(feature as ArcGISFeature).LoadAsync();
    feature.SetAttributeValue(<フィールド名>, <値>);
    await serviceFeatureTable.UpdateFeatureAsync(feature); 
    await serviceFeatureTable.ApplyEditsAsync();
}

 

 

以下の動画はデータを更新した際の例となります。

本例では東京都の区毎の平均家賃をクラス分けし表示しています。

今回は千代田区の平均家賃を 110000 円から 4000 円に変え、レイヤーの表示が切り替わることを確認しました。

 

 

最後に

本記事では、公開されたレイヤーを ArcGIS Maps SDK for .NET で開発するクライアント アプリケーションにてマップ表示する方法、参照元 DB を更新する方法をご説明しました。参照元 DB を追加・更新することにより、同じ DB を利用している他システムと連携できます。連携により、レイヤー情報のリアルタイム変更や他システムへのデータの反映等できますので、是非お試しください。

 

参考資料

クエリ レイヤー

ArcGIS Enterprise

エンタープライズ ジオデータベース セットアップガイド (SQLServer)

ArcGIS Maps SDK for .NET Library Reference

ArcGIS Developers 開発リソース集

ArcGIS Maps SDK for .NET

サンプルコード

 

Version history
Last update:
‎07-30-2024 10:58 PM
Updated by:
Contributors