56
57
タスクの利用
ArcGIS API for Silverlight が提供するタスクの用途は様々ですが、それぞれのタスクの特徴や利用方法は 多くの点で共通しています。
まず、すべてのタスクは固定のユーザ ンタフェースを持ちません。これはそれぞれのゕプリケーション がそれぞれの要件に最適な方法でタスクを利用できるようにするためです。したがって、開発者は自身で タスクの入力パラメータを指定するンタフェースやタスクの結果を表示するンタフェースを実装する 必要があります。
また、タスクはリソース デゖクショナリやコードビハンド プログラムなどゕプリケーションの非ビジ ュゕル要素内において生成されます。これはすべてのタスクが、ゕプリケーションのビジュゕル要素とは 関係しない何らかの GIS ロジックを実行する必要があり、Silverlight においてロジックの実行はコード ビハンドの .NET コードにおいて記述されるためです。
上記のような共通の特徴に加えて、それぞれのタスクは類似したコード パターンを用いて実装することが できます。
最初に、使用するタスクを初期化するためにそのタスクが処理を実行するマップ サービスもしくはマップ サービス レヤの Url をタスクのコンストラクタに渡します。以下の例では検索タスクの初期化コード を示しています。
FindTask findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/
rest/services/Demographics/ESRI_Census_USA/MapServer/");
58 次にタスクを実行するための入力パラメータを指定します。指定する必要がある入力パラメータは実行す るタスクの処理によって異なります。以下の例では個別属性表示タスクの入力パラメータを指定していま す。
//入力パラメータの初期化
IdentifyParameters identifyParameters = new IdentifyParameters();
//検索するレヤ
identifyParameters.LayerOption = LayerOption.all;
//検索するマップのエクステント
identifyParameters.MapExtent = MyMap.Extent;
//検索するマップの幅
identifyParameters.Width = (int)MyMap.ActualWidth;
//検索するマップの高さ
identifyParameters.Height = (int)MyMap.ActualHeight;
//検索に使用する図形
identifyParameters.Geometry = args.MapPoint;
最後にタスクの処理を実行します。クエリ タスク、検索タスク、個別属性表示タスクが実行できる処理の 種類は 1 種類のみであり、処理は ExecuteAsync メソッドによって実行します。ルート タスクが実行で きる処理も 1 つのみですが、処理は SolveAsync メソッドによって実行します。
queryTask.ExecuteAsync(query);
59 これらのタスクは処理が完了した際にベントを発生させます。発生するベント名は処理を実行したメ ソッド名に沿って、たとえば ExecuteAsync メソッド が完了した際に発生するベントは
ExecuteCompleted ベントです(ルート タスクの SolveAsync メソッド の完了ベントは
SolveCompleted ベントです)。タスクの実行結果は、ベントの 2 つめのパラメータに格納されます。
//タスク完了時のベントハンドラをゕタッチ
findTask.ExecuteCompleted += new EventHandler<FindEventArgs>
(findTask_ExecuteCompleted);
・
void findTask_ExecuteCompleted(object sender, FindEventArgs e) {
//タスクの結果を操作 }
また、クエリ タスク、個別属性表示タスク、検索タスクには LastResult プロパテゖがあり、最後に実行 されたタスクの実行結果が格納されています。このプロパテゖは、データ バンデゖングによってタスク が実行された場合に自動的に表示する結果の値を更新したり、タスクの実行結果を後から参照する際に使 用したりすることができます。ジオメトリ タスクやジオプロセシング タスクなどのタスクも上述した手 順に類似したパターンで利用することができますが、これらのタスクは複数の種類の処理を実行すること ができます。これらのタスクの処理は <処理名>Async メソッドによって実行します。処理が完了すると
<処理名>Completed ベントが発生し、ベントのプロパテゖに値が格納されます。たとえば、ジオメ トリ タスクを使用してバッフゔを生成する場合、処理は BufferAsync メソッドによって実行され、処理 が完了すると、BufferCompleted ベントが発生します。
以下では、特に一般的に使用される、「クエリ タスク」、「検索タスク」、「個別属性表示タスク」について 詳細をご紹介します。
60