GP サービス サンプル:データの選択
フォルダ |
SelectingData |
目的 |
属性検索または位置検索によってデータを選択するさまざまな方法を示します。 |
サービス |
|
ジオプロセシング タスク |
各種(以下に示すモデルをご参照ください) |
入力 |
モデルによって異なります。通常は、クエリ文字列またはフィーチャ セットです。 |
出力 |
選択されたデータ |
データ |
オレゴン州、ポートランド市の小さな地域のデータセット |
エクステンション |
なし |
これらのサービスについて
ジオプロセシング サービスに共通するタスクの 1 つは、属性検索または空間検索に基づいてデータのサブセットを選択することです。このサンプルのモデルは、データを選択するための便利な方法を示します。これらのモデルで使用される主要なジオプロセシング ツールは [属性検索(Select Layer By Attribute)] と [空間検索(Select Layer By Location)] です。どちらのツールも入力としてレイヤを取得します。それらの出力は、選択されたフィーチャが含まれた、更新された入力レイヤです。
[属性検索(Select Layer By Attribute)] と [空間検索(Select Layer By Location)] は(データセットではなく)レイヤを出力するため、レイヤを出力するタスクを ArcGIS Server がどのように処理するのかを理解しておく必要があります。ジオプロセシング サービスには 3 つの構成があることを思い出してください。
最初の 2 つの構成では、ArcGIS Server がレイヤを出力するタスクを実行するときに、選択フィーチャをレイヤから読み取り、選択フィーチャをクライアントに返します。
3 つ目の構成では、ジオプロセシング サービスと結果マップ サービスの 2 つのサービスがあります。これら 2 つのサービスは、互いに依存しない状態で実行されます。タスクを実行する際、ArcGIS Server はまずジオプロセシング タスクを実行し、次に結果マップ サービスを実行してジオプロセシング サービスの出力を描画し、出力データのマップ イメージをクライアントに返します。この実行順序により、結果マップ サービスはジオプロセシング サービスによってディスク上に作成されるデータセットを必要とします。つまり、ジオプロセシング サービスのタスクの出力はレイヤではなくデータセットでなければなりません。最初の 2 つの構成で使用できるレイヤは、結果マップ サービス構成には対応しません。
このサンプルでは、2 組みのツールボックスとマップ ドキュメントがあります。それらは、(ソース マップ ドキュメントに基づくジオプロセシング サービスとして公開するための)SelectingData と、(結果マップ サービスに基づくジオプロセシング として公開するための)SelectingDataRMS です。[SelectingDataRMS] ツールボックス内のツールはディスク上のデータセットになり、[SelectingData] ツールボックス内のツールはレイヤになります。通常、[SelectingDataRMS] ツールボックス内のツールはデータをディスクにコピーしなければならないので、実行に少し時間がかかります。
SelectingData と SelectingDataRMS のどちらのサービスを公開するかは各自の判断に任せます。一般に、次の場合は結果マップ サービスを公開します。
- 大きなフィーチャ セットが選択される可能性があり、大量のフィーチャをクライアントに転送したくない。
- データを保護し、データのマップ イメージだけをクライアントに表示したい。
- 他のクライアント アプリケーションでは描画できず、ArcMap でのみ描画できる高度なカートグラフィがある。
データ
データはオレゴン州ポートランドの小さなエリアであり、C:\arcgis\ArcTutor\GP Service Examples\SelectingData\ToolData\Portland.gdb にあります。このファイル ジオデータベースは、容量の節約のため、[ファイル ジオデータベースの圧縮(Compress File Geodatabase Data)] ツールを使用して圧縮されています。圧縮されたファイル ジオデータベースを編集することはできません。編集を行う必要がある場合は、[ファイル ジオデータベースの圧縮解除(Uncompress File Geodatabase Data)] ツールを使用します。
モデルの一部はフィーチャ セット変数とレコード セット変数を使用するため、それらのフィーチャ タイプとフィールドを定義するためのスキーマが必要です。これらのスキーマは C:\arcgis\ArcTutor\GP Service Examples\SelectingData\ToolData\Templates.gdb にあります。
モデルの概要
SelectingData ツールボックスとマップ ドキュメント
ツールセット |
ツール |
説明 |
---|---|---|
属性検索 |
||
Select Tax Lots With Value Greater Than |
ユーザが入力した値よりも合計値が大きい課税区画をすべて選択します。 |
|
Select Tax Lots With Value Greater Than (with summary) |
上のツールと同じですが、さらに、選択された区画すべての合計値を合計します。 |
|
Select Tax Lot By Address (attribute method) |
指定された住所に基づいて課税区画を選択します。 |
|
Select Neighborhood |
ドロップダウン リストから近傍を選択します。 |
|
Select Layer By Area |
最初にユーザがレイヤを選択し、それらのエリアに基づいてツールがフィーチャを選択します。 |
|
Mailing List |
住所から課税区画を選択し、指定された距離内の課税区画をすべて選択して、選択された課税区画すべての郵送先名簿を作成します。 |
|
空間検索 |
||
Select Tax Lot By Address (location method) |
指定された住所に基づいて各住所のポイント フィーチャを作成し、これらのポイント フィーチャを使って課税区画を選択します。 |
|
Select Tax Lots By Neighborhood |
選択された近傍ポリゴンに基づいて課税区画を選択します。 |
|
Select Tax Lots By Neighborhood (optimized) |
上のツールと同じですが、事前に処理されたデータセットを使って選択を実行します。 |
SelectingDataRMS ツールボックスとマップ ドキュメント
[SelectingDataRMS] ツールボックス内のツールの動作は、[SelectingData] ツールボックス内のツールと同じです。主な違いは、[SelectingDataRMS] のツールが、結果マップ サービスによって描画できるフィーチャクラスを出力することです。レイヤからフィーチャクラスへフィーチャをコピーするには、[フィーチャのコピー(Copy Features)] ツールを使用します。次に示すのは、[フィーチャのコピー(Copy Features)] ツールを使用した Select Tax Lots With Value Greater Than モデルです。ツールボックス内のツールはすべて同じパターンに従います。
属性インデックスと空間インデックス
これらのサービスと同様に、特定のフィールドを頻繁に検索する場合は、検索フィールドにインデックスを作成して、検索を高速化することができます。たとえば、Select Tax Lots With Value Greater Than タスクは TOTALVAL フィールドを検索するため、クエリを最適化するには TOTALVAL フィールドに属性インデックスを設定します。[属性インデックスの追加(Add Attribute Index)] ツールを使用して、属性インデックスを作成することができます。
同様に、空間検索を実行する場合は、空間インデックスを使ってフィーチャの検索を高速化できます。ジオデータベース内のフィーチャクラスについては、空間インデックスが自動的に作成されますが、シェープファイルの空間インデックスは作成されません。
選択レイヤとツール レイヤの操作
SelectingData マップ ドキュメントには、先に示した各ツールのツール レイヤが含まれています。ツール レイヤ内のサブレイヤ(ツールの出力)は入力レイヤと同じであり、独立したレイヤではありません。サブレイヤは独立したレイヤではないので、元の入力レイヤまたは出力サブレイヤのプロパティを変更すると、他のレイヤのプロパティも変化します。[Select Tax Lots With Value Greater Than] ツールで示すように、入力レイヤと出力レイヤはどちらも Tax Lots です。ArcMap のコンテンツ ウィンドウで Tax Lot レイヤ(入力レイヤ)を右クリックしてシンボルを変更すると、両方のレイヤのシンボルが変化します。
(これらのツールが行うように)選択レイヤを操作する際には、次の 2 つのガイドラインに従ってください。
- ArcMap で(公開する前に)ツール レイヤを作成する際、サブレイヤ(モデルの出力)は、モデルの出力変数名に関係なく、常に入力レイヤと同じ名前のレイヤになります。シンボルは入力レイヤと同じになります。
- (公開した後に)サーバ タスクを実行すると、出力レイヤはモデル変数の名前になります。
変数置換を使用した式の構築
選択式には、通常、ユーザからの入力が必要です。Select Tax Lots With Value Greater Than モデルで示すように、ユーザの入力は Total value greater than 変数です。これは次の手順で作成される Double 変数です。
- ModelBuilder でキャンバスを右クリックして [変数の作成] をクリックします。
- [変数の作成] ダイアログ ボックスで、変数のタイプとして [Double] を選択します。
- [OK] をクリックします。
- 変数の名前を変更します。
- 必要に応じて、変数を開いてデフォルト値を指定します。
[属性検索(Select Layer By Attribute)] ツールで式を作成する際には、変数名をパーセント記号(%)で囲みます。
必須ではありませんが、変数を置換するプロセスの前提条件として、変数を使用することをお勧めします。次の手順に従って、前提条件を作成します。
- ModelBuilder でツールを右クリックして [プロパティ] をクリックします。
- [前提条件] タブをクリックします。
- ツール実行の前提条件として 1 つ以上の変数を選択します。
選択方法
[属性検索(Select Layer By Attribute)] ツールと [空間検索(Select Layer By Location)] ツールの両方には、さまざまなオプションが用意されています。たとえば、新しい選択セットを作成する代わりに、現在の選択セットに対してフィーチャを追加または削除することができます。[空間検索(Select Layer By Location)] ツールでは、CONTAINS、WITHIN、INTERSECT などの空間リレーションシップを確立することができます。このサンプルのモデルでは、そのうちのいくつかを使用しています。詳細については、[空間検索(Select Layer By Location)] ツールのドキュメントをご参照ください。
マップ レイヤを使用しないデータ選択
[属性検索(Select Layer By Attribute)] ツールまたは [空間検索(Select Layer By Location)] ツールを使用するために、マップ ドキュメントのレイヤを使用する必要はありません。 [フィーチャ レイヤの作成(Make Feature Layer)] ツールを使用すると、データセットからフィーチャ レイヤを作成できます(下図を参照)。
また、 [選択(Select)] ツールを使用して、データセットから選択フィーチャのデータセットを作成することもできます。この場合、レイヤは必要ありません。
[選択(Select)] ツールは属性選択を実行します。空間選択を実行する必要がある場合は、以下のツールを 1 つ以上使用することを検討してください。
- [フィーチャ レイヤの作成(Make Feature Layer)] ツール
- [解析] ツールボックスのツール([クリップ(Clip)] や [空間結合(Spatial Join)] など)
SelectionUtilities
このツールボックスには、タスクをサポートするためのさまざまなユーティリティが含まれています。
ツール |
説明 |
---|---|
Check Match Results |
[住所のジオコーディング(Geocode Addresses)] ツールの出力を確認し、住所が一致しない場合にエラーを出力します。 |
Get 1 Field Value |
テーブルの最初のレコードのフィールド値を読み取り、ジオプロセシング モデル変数に出力します。 |
Get 2 Field Value |
上のツールと同じですが、2 つのフィールドを読み取り、2 つの変数を出力します。 |
Get 3 Field Value |
上のツールと同じですが、3 つのフィールドを読み取り、3 つの変数を出力します。 |
Overlay Tax Lots And Neighborhoods |
Select Tax Lots By Neighborhood (optimized) モデルによって使用されるデータセットを作成します。 |
Print Tax Lot Mailing Labels |
指定された課税区画の選択セットに基づいて宛名ラベルのファイルを出力します。 |
モデルに関する注意事項
Select Tax Lots With Value Greater Than
これは最も単純なモデルです。合計値が入力値よりも大きい課税区画をすべて選択します。先の説明に従い、変数置換を使って選択式を構築します。
Select Tax Lots With Value Greater Than (with summary)
このモデルの動作は Select Tax Lots With Value Greater Than モデルと同じですが、選択されたすべての区画の合計値を計算するために、 [要約統計量(Summary Statistics)] ツールを追加します。[要約統計量(Summary Statistics)] ツールは、このサンプルに含まれている [SelectionUtilities] ツールボックス内のユーティリティ ツールである [Get 2 Field Values] ツールによって読み取られるテーブルを出力します。これは、Total value of all lots と Number of lots の 2 つのフィールドの値を出力するスクリプト ツールです。これらの値は、選択された課税区画とともにクライアントに返されます。
[要約統計量(Summary Statistics)] ツールの出力は、ディスク上のテーブルではなく、メモリ内テーブルに書き出されます。テーブルやフィーチャクラスのメモリへの書き込みは、ディスクへの書き込みと比べて高速です。
Select Tax Lot By Address (attribute method)
住所によるフィーチャの検索は一般的なタスクの 1 つです。このモデルは、住所によってフィーチャを選択するモデルの 1 つを示します(もう 1 つの方法については、下記を参照)
モデル エレメント |
説明 |
---|---|
TaxLot Locator |
TaxLots フィーチャクラスの住所ロケータです。このロケータは U.S. Single Address スタイルを使用します。 |
Address |
レコード セット変数。テンプレートは ToolData/templates.gdb/Address。対象地域内のサンプル アドレスについては、ToolData/sample addresses.txt をご参照ください。 |
住所が含まれたテーブルを取得し、住所のポイント フィーチャクラスを出力します。状態フィールドも出力されます。住所が検出されない場合は、このフィールドに M が設定されます。 |
|
Check Match Results |
このサンプルに含まれている [SelectionUtilities] ツールボックス内のカスタム スクリプト ツールです。住所が一致したことを確認します。 |
Success |
[Check Match Results] ツールの出力です。住所入力が 1 つであり、住所が一致した場合に True となります。 |
Get 1 Field Value |
このサンプルに含まれている [SelectionUtilities] ツールボックス内のカスタム スクリプト ツールです。住所に一致する課税区画のオブジェクト ID を取得します。 |
属性検索(Select Layer By Attribute) |
[Get 1 Field Value] ツールのオブジェクト ID 出力で課税区画を選択します。 |
Select Neighborhood
このモデルは、Neighborhood レイヤからポリゴンを選択します。
このモデルでは、近傍リストから近傍を選択できます。Neighborhood Name 変数は、すべての近傍名が含まれた [値のリスト] フィルタを持つ文字列変数です。フィルタを作成または変更するには、モデルのプロパティ ダイアログ ボックスを開いて [パラメータ] タブをクリックします。
Select Layer By Area
このモデルでは、ユーザはまずレイヤを選択してから、最小選択エリアを指定することができます。
このモデルの主な特徴は、ユーザが最初にレイヤを選択できることです。Layer to Select 変数は文字列変数であり、Tax Lots と Neighborhoods が含まれた [値のリスト] フィルタを持ちます。フィルタを表示するには、[モデル プロパティ] ダイアログ ボックスを開いて [パラメータ] タブをクリックします。
[値の計算(Calculate Value)] ツールは、文字列を取得して、それを Feature Layer 変数に変換します。文字列を別のデータ タイプに変換するこの手法については、「入力データ タイプと出力データ タイプ」をご参照ください。[値の計算(Calculate Value)] ツールの出力は、[属性検索(Select Layer By Attribute)] への入力です。
最後に、[フィーチャのコピー(Copy Features)] ツールを使って選択フィーチャをフィーチャクラスにコピーします。この最後のステップは必須です(フィーチャをコピーすることにより、ツール レイヤの作成およびテスト時の混乱を避けることができます)。フィーチャはディスクではなくメモリに書き出されます(フィーチャをメモリに書き出すほうがディスクに書き出すよりも高速です)。[SelectingDataRMS] ツールボックスでは、結果マップ サービスに選択フィーチャを描画させるために、選択フィーチャをディスクに書き出す必要があります。
Mailing List
このモデルは、選択フィーチャに基づいて近傍フィーチャを選択する方法と、近傍フィーチャの住所が含まれたテキストを生成する方法を示します。
モデル エレメント |
説明 |
---|---|
Address |
レコード セット変数。テンプレートは ToolData/templates.gdb/Address。対象地域内のサンプル アドレスについては、ToolData/sample addresses.txt をご参照ください。 |
Select Tax Lot By Address (attribute method) |
このモデルについては、上記をご参照ください。 |
Selected Lot |
選択された課税区画。Tax Lot レイヤ。 |
Search Distance |
検索に使用する距離。 |
Input Layer |
Tax Lot レイヤ。 |
空間検索(Select Layer By Location) |
検索の中心として Selected Lot を使用し、指定された距離内にある課税区画をすべて選択します。 |
Tax Lots |
検索距離内にある課税区画。 |
Print Tax Lot Mailing Labels |
[SelectionUtilities] ツールボックス内のカスタム スクリプト ツール。 |
MailingList.txt |
郵送先住所が含まれたテキスト ファイル。 |
Success |
すべてのレコードに郵送先住所が含まれている場合は True となります。郵送先住所が空である、または破壊されているレコードが 1 つでもある場合は False となります。 |
Select Tax Lot By Address (location method)
これは、[空間検索(Select Layer By Location)] ツールセットの最初のツールです。[Select Tax Lot By Address (attribute method)] ツールと動作は同じですが、フィーチャ ID を使って課税区画を選択する代わりに、 [住所のジオコーディング(Geocode Addresses)] の出力ポイント フィーチャを [空間検索(Select Layer By Location)] の入力に使用します。
この方法は、ジオコードされたポイントを別のロケータから取得する場合に使用します。たとえば、ロケータが道路データセットに基づく場合は、建物、課税区画、対象ポイントなど、道路以外のフィーチャを選択するためにジオコードされたポイントを使用する必要があります。
Select Tax Lots By Neighborhood
あるデータセットのフィーチャを使って別のデータセットのフィーチャを選択することも、一般的な選択タスクの 1 つです。このモデルは、先に説明した Select Neighborhood モデルを使って近傍を 1 つ選択し、[空間検索(Select Layer By Location)] ツールを使ってその近傍内にある課税区画をすべて選択します。
Select Tax Lots By Neighborhood (optimized)
Select Tax Lots By Neighborhood モデルによって使用される方法は、使用頻度の低い検索であれば問題ありません。つまり、この方法は、1 回限りの簡易解析で課税区画を検索する場合などに使用します。しかし、通常、ジオプロセシング サービスは、頻繁に繰り返し実行されるタスクです。近傍による課税区画の選択は頻繁に使用されるタスクなので、最適化する必要があります。
この最適化のために、[インターセクト(Intersect)] ツールを使用して、各課税区画に近傍名を割り当てます。[SelectionUtilities] ツールボックスに含まれている [Overlay Tax Lots and Neighborhoods] ツールは、[インターセクト(Intersect)] ツールを使用して、すべての課税区画とそのすべての近傍属性が含まれた新しいデータセットを作成する方法を示します。このモデルは、TaxLotsOverNeighborhoods データセットを作成するために 1 回だけ実行する必要があります。
TaxLotsOverNeighborhoods が作成されたら、あとは近傍内のすべての課税区画を選択するために簡単な属性検索を行うだけです。
公開
「GP サービス サンプル: クリップと送信」の「公開」セクションにある Portland.mxd をマップ サービスとして公開します。このマップ サービスを、このサンプルのサービスのベースマップとして使用します(このサービスのフォルダは、C:\arcgis\ArcTutor\GP Service Examples\ClipAndShip です)。
SelectingData.mxd を、ソース マップ ドキュメントに基づくジオプロセシング サービスとして公開します。フィーチャはクライアントに返されるので、サービスから返せる最大レコード数を(Tax Lot レイヤ内のフィーチャの数よりも少し多い)11,000 に設定する必要があります。
ソース マップ ドキュメントに基づくジオプロセシング サービスの公開の詳細
結果マップ サービスに基づくジオプロセシング サービスとして SelectingDataRMS を公開します。
使用
サービスを使用するには、新しい ArcMap セッションを開いて、Portland マップ サービスをベースマップとして追加します。
カタログ ウィンドウを開いて、表示されている ArcGIS Server ユーザ接続へ移動し、公開されているすべてのタスクを実行します。SelectingDataRMS サービスを展開して、Mailing List タスクを実行します。
[結果] ウィンドウを開いて、次の手順を実行します。
- MailingList タスクの結果を展開します。
- Mailing List タスクの結果を右クリックして [データの取得] を選択します。タスクの結果が <サーバ上のデータ> から MailingList.txt に変更されます。
- MailingList.txt を右クリックして [ロケーションをコピー] をクリックします(結果はテキスト ファイルなので、[マップへ追加] をクリックしても追加されません)。
- インターネット ブラウザを開き、アドレス バーに住所を貼り付けます。MailingList.txt の内容が表示されます。
- 必要に応じて、 [コピー(Copy)] ツールをクリックして、MailingList.txt を [結果] ウィンドウから [コピー(Copy)] ツールのダイアログ ボックスの入力パラメータへドラッグできます。これにより、選択した場所にファイルがコピーされます。