入力データ タイプと出力データ タイプ
「ジオプロセシング サービスの重要な概念」で説明したとおり、特定のデータ タイプだけをジオプロセシング サービスの入力パラメータと出力パラメータとして使用できます。
公開されたモデルまたはスクリプト内のプロセスは、すべてのデータ タイプが利用できるサーバ上で実行されます。このため、モデルまたはスクリプト プロセスにあらゆるデータ タイプを使用することができます。データ タイプが制限されるのは入力と出力のパラメータだけです。
データ タイプは次の 4 つのレベルでサポートされます。
- すべてのクライアントにわたって完全にサポートされる。
- ArcGIS Desktop クライアントでのみサポートされる。
- すべてのクライアントでサポートされない。TIN などの一部のデータ タイプは入力パラメータとして使用することができず、モデルは公開されません。公開すると、次のエラーが表示されます。
- データ タイプは String データ タイプに変換されます。たとえば、Areal Unit データ タイプは、公開されたタスクでは String データ タイプになります。
ArcGIS Desktop において有効なモデルとスクリプトを ArcGIS Server に公開するためには、それらを(サポートされる入出力データ タイプのみを使用するように)修正しなければならないことがあります。
入力データ タイプ
次の表に、3 つのクライアントの重要な入力パラメータ データ タイプをまとめます。
入力パラメータ データ タイプ |
ArcGIS Desktop クライアントでサポートされる |
ArcGIS Explorer クライアントでサポートされる |
Web アプリケーション クライアントでサポートされる |
---|---|---|---|
フィーチャ セット |
はい |
はい |
はい |
レコードセット |
はい |
はい |
はい |
フィーチャクラス |
いいえ(ただしフィーチャクラス入力はフィーチャ セット データ タイプで間接的にサポートされる) |
いいえ |
いいえ |
テーブル |
いいえ(ただしテーブル入力はレコード セット データ タイプで間接的にサポートされる) |
いいえ |
いいえ |
ラスタ |
はい |
いいえ |
いいえ |
標準タイプ(Long、Double、Boolean、Date、String など)と距離単位("1000 meters" など) |
はい |
はい |
はい |
ファイル(*.zip または *.xml ファイルなど) |
はい |
はい |
はい |
レイヤ(たとえばフィーチャ レイヤ、ラスタ レイヤ、ネットワーク解析レイヤなど、あらゆるレイヤ タイプ) |
結果マップ サービスまたはソース マップ ドキュメントに含まれるレイヤのみ |
結果マップ サービスまたはソース マップ ドキュメントに含まれるレイヤのみ |
結果マップ サービスまたはソース マップ ドキュメントに含まれるレイヤのみ |
このリストに含まれていない入力データ タイプについては、モデルまたはスクリプトを公開すると、次のいずれかが発生します。
- ツールは公開されますが、データ タイプはデータの文字列表現が含まれた String データ タイプに変換されます。
- ツールは公開されず、エラーが発生します。以下のデータ タイプは公開エラーになります。
- ラスタを除く、ジオデータセット(フィーチャクラスなど)またはテーブル
- データ エレメント
- バリュー テーブル/複数値
- リストであるモデル変数
フィーチャクラスとテーブル
フィーチャクラスとテーブル データ タイプは、ArcGIS Explorer や Web アプリケーションといった軽量クライアントとともにインストールできない大きなソフトウェア ライブラリに依存するため、入力パラメータとしてサポートされません。このためジオプロセシングには、フィーチャクラスおよびテーブル データ タイプと置き換えることができるフィーチャ セットとレコード セットの 2 つの軽量データ タイプが含まれています。
フィーチャ セットを使用すると、すべての Web クライアントがマップ上のフィーチャを対話形式でデジタイズできるようになります。ArcGIS Desktop では、フィーチャ セット データ タイプを使用することにより既存のフィーチャクラスを入力することもできます。ArcGIS Desktop では必要なソフトウェア ライブラリが利用できるため、フィーチャクラスを使用することができます。同様に、レコード セットを使用すると、すべてのクライアントがテーブル レコードを対話形式で作成できるようになります。ArcGIS Desktop では、既存のテーブルを指定することもできます。
ラスタ データセット
入力としてラスタ データセットを使用するジオプロセシング サービスは、ArcGIS Desktop クライアントでのみ有効です。ArcGIS Explorer クライアントでは、サービスをタスクとして追加することはできません。Web アプリケーションでは、サービスはエラーを返します。
出力データ タイプ
次の表に、3 つのクライアントの重要な入力パラメータ データ タイプをまとめます。この表に続いて、各データ タイプに関する注意事項を示します。
出力パラメータ データ タイプ |
ArcGIS Desktop クライアントでサポートされる |
ArcGIS Explorer クライアントでサポートされる |
Web アプリケーション クライアントでサポートされる |
---|---|---|---|
フィーチャクラス |
はい |
はい |
はい |
フィーチャ レイヤ |
はい |
はい |
はい |
ラスタ |
はい |
いいえ(結果マップ サービスでのみ表示できる) |
いいえ(結果マップ サービスでのみ表示できる) |
ラスタ レイヤ |
はい |
いいえ |
いいえ |
ジオデータセット(フィーチャクラスまたはラスタ以外) |
いいえ(結果マップ サービスでのみ表示できる) |
いいえ(結果マップ サービスでのみ表示できる) |
いいえ(結果マップ サービスでのみ表示できる) |
テーブル |
はい |
いいえ(テーブル データ タイプを出力パラメータに持つサービスは利用可能なタスクのリストに表示されない) |
はい |
標準タイプ(Long、Double、Boolean、Date、String など)と距離単位("1000 meters" など) |
はい([結果] ウィンドウにサービスの結果として表示される) |
はい(タスク結果に表示される) |
はい |
ファイル |
はい |
はい |
はい |
このリストに含まれていないデータ タイプについては、モデルまたはスクリプトを公開すると、次のいずれかが発生します。
- ツールは公開されますが、データ タイプはデータの文字列表現が含まれた String データ タイプに変換されます。
- ツールは公開されず、エラーが発生します。
結果マップ サービスを使って出力データを描画する場合は、タスクからすべてのジオデータセットを出力することができます。この理由は、結果マップ サービスがジオデータセットを描画し、クライアントに(データセット自体ではなく)マップを返送するためです。
フィーチャクラス
フィーチャクラス データ タイプは、出力データ タイプとしてサポートされます。モデルまたはスクリプトを公開するとツールがスキャンされ、出力フィーチャクラスが検出された場合は出力フィーチャ セットに変換され、このフィーチャ セットがクライアントに返されます。この変換は内部で実行されるため、モデルまたはスクリプトは変更されません。この変換は、変換を実行するために必要なソフトウェア ライブラリをすべて搭載したサーバ上で実行されるため、出力フィーチャクラスでのみ発生します。このため、厳密に言うと、フィーチャクラスは出力データ タイプとしてサポートされません。フィーチャクラスを使用できるのは、ArcGIS Server がフィーチャクラスをフィーチャ セット データ タイプに変換する方法を知っているためです。
フィーチャ レイヤ
フィーチャ レイヤはディスク上のフィーチャクラスを参照し、属性検索または空間検索の結果である一連の選択フィーチャをサポートします。[フィーチャ レイヤの作成(Make Feature Layer)] ツールを使用してフィーチャ レイヤを作成し、[属性検索(Select Layer By Attribute)] および [空間検索(Select Layer By Location)] ツールを使用して検索を実行します。ジオプロセシング タスクでは、選択セットが含まれたフィーチャ レイヤを出力するのはよくあることです。
ArcGIS Server が出力フィーチャ レイヤを検出すると、選択フィーチャがフィーチャクラスに変換され、選択フィーチャだけがクライアントに返されます。
出力フィーチャ レイヤは、結果マップ サービスではサポートされません。
結果マップ サービスを使用する際には、ジオプロセシング サービスと結果マップ サービスの 2 つのサービスがあることに注意してください。これら 2 つのサービスは、互いに依存しない状態で実行されます。タスクを実行すると、ArcGIS Server はジオプロセシング タスクを最初に実行し、次に結果マップ サービスを実行して、ジオプロセシング サービスの出力を描画します。フィーチャ レイヤは一時オブジェクトであり、タスクの実行中はメモリに格納されます。タスクが完了すると、これらのメモリ内フィーチャ レイヤは削除されます。結果マップ サービスがレイヤ内の同じフィーチャクラスを参照する場合、選択フィーチャに関するすべての情報(タスクの結果)はマップ サービスを描画するときに削除され、結果マップ サービスはすべてのフィーチャを描画します。マップ サービスによってレイヤ内の選択フィーチャを描画する必要がある場合は、まず、フィーチャ レイヤを入力として使用する [フィーチャのコピー(Copy Features)] ツールを使用して、これらの選択フィーチャをフィーチャクラスに保存する必要があります。[フィーチャのコピー(Copy Features)] ツールは、レイヤ内の選択フィーチャだけをコピーします。その後、結果マップ サービスを使用して、コピーされたフィーチャを描画することができます。
ラスタ データセット
ラスタ データセットは、ArcGIS Desktop クライアントでのみ出力としてサポートされます。
ラスタ レイヤ
フィーチャ レイヤと同様に、ラスタ レイヤは ArcGIS Desktop クライアントでのみ出力できます。ArcGIS Server が出力ラスタ レイヤを検出すると、クライアントにラスタが返されます。フィーチャ レイヤがサポートされないのと同じ理由により、出力ラスタ レイヤは結果マップ サービスでサポートされません。
その他のレイヤ
フィーチャ レイヤとラスタ レイヤだけが出力としてサポートされます(そして先に述べたように、ラスタ レイヤは ArcGIS Desktop クライアントでのみサポートされます)。netCDF レイヤ、ネットワーク解析レイヤ、Geostatistical Analysis レイヤなど、その他のレイヤはすべてサポートされません。
その他のジオデータセット
フィーチャクラスまたはラスタ以外の出力ジオデータセット データ タイプ(TIN またはテレインなど)は、そのデータをクライアントに返送することができません。ただし、ジオプロセシング サービスでは、データの表示に結果マップ サービスを使用することができます。ジオプロセシング サービスの結果は、あらゆるクライアントで描画できるマップ サービス レイヤとなります。
テーブル
フィーチャクラス データ タイプなどのテーブル データ タイプもサポートされ、レコード セットに変換されてからクライアントに返送されます。
サポートされないデータ タイプへの対処
公開したいモデルまたはスクリプトの入力または出力データ タイプがサポートされない場合、またはデータ タイプが文字列に変換される場合は、サポートされる入出力データ タイプのみを使用するよう、モデルまたはスクリプトを修正しなければなりません。一般的な方法は次の 2 つです。
- 文字列表現を使用する
- データをファイルに変換する
文字列表現の使用
すべてのデータ タイプに文字列表現が存在するという重要な概念を示します。データの文字列表現の詳細については、「ジオプロセシング ツールのパラメータのデータ タイプ」をご参照ください。
モデルの入力が、ArcGIS Server への公開時に文字列に変換されるデータ タイプの 1 つである場合は、文字列入力を取得した後、文字列を適切なデータ タイプに変換するようモデルを修正することができます。この変換を行う方法を次に示します。ここではまず、データ タイプの値を文字列に変換します。これはモデルで行わなければならないこととは逆ですが、すべてのデータ タイプに文字列表現が存在するという重要な概念を示します。続いて、文字列をデータ タイプ値に変換する方法を示します。これがサービスで使用する方法となります。
ここで使用するデータ タイプは面積単位です。
最初の部分では、面積単位の文字列形式を決定します。
- 新しいモデルを作成します。
- 面積単位データ タイプの変数を作成し、名前を Input AU に変更します。
- [値の計算(Calculate Value)] ツールを追加します。
- [値の計算(Calculate Value)] をダブルクリックしてダイアログ ボックスを開きます。[条件式] パラメータに「%Input AU%」を入力します。これにより、[値の計算(Calculate Value)] が Input AU 変数の値を読み取ります。[データ タイプ] パラメータでは、[String] を選択します。
- 必要に応じて、Input AU 変数を [値の計算(Calculate Value)] の前提条件として設定することができます。前提条件は、ツールを実行する前に変数に値が含まれていなければならないことを意味します。前提条件コネクタは破線で示されます。
- [Input AU] 変数をダブルクリックして、値を「1000 平方メートル」に設定します。
- [OK] をクリックします。
- ModelBuilder でモデルを実行します。[output_value] をダブルクリックして値を調べます。値は面積単位の文字列表現です。文字列表現の「平方」と「メートル」の間にスペースが含まれていないことに注意してください。
ここで示したように、すべてのデータ タイプ値には文字列表現があります。[値の計算(Calculate Value)] を使用して、あらゆるデータ タイプの文字列表現を表示することができます。たとえば、[値の計算(Calculate Value)] に空間参照変数を入力して、その文字列表現を表示することができます。
次の手順では、文字列変数を別のデータ タイプに変換する方法を示します。入力変数が String、出力が面積単位であることを除けば、先の手順と同じです。
- 新しいモデルを作成します。
- String データ タイプの変数を作成し、名前を「Input AU String」に変更します。
- [値の計算(Calculate Value)] ツールを追加します。
- [値の計算(Calculate Value)] をダブルクリックしてダイアログ ボックスを開きます。[条件式] パラメータに「%Input AU String%」を入力します。これにより、[値の計算(Calculate Value)] が Input AU String 変数の値を読み取ります。
[データ タイプ] パラメータには [面積単位] を選択します。
- 必要に応じて、Input AU String 変数を [値の計算(Calculate Value)] の前提条件として設定することができます。前提条件は、ツールを実行する前に変数に値が含まれていなければならないことを意味します。前提条件コネクタは破線で示されます。
- [Input AU String] 変数をダブルクリックして、値を「1000 squaremeters」に設定します。
- [OK] をクリックします。
- ModelBuilder でモデルを実行します。[output_value] をダブルクリックして値を調べます。値は面積単位です。output_value のデータ タイプは、実際には面積単位ではなく Any 値です。Any 値のデータ タイプは汎用データ タイプであり、任意のツール パラメータに接続することができます。
この変換方法の例については、「GP サービス サンプル: データの選択」の Select Layer By Area モデルもご参照ください。
次の図は、入力として面積単位を使用する [建物ポリゴンの単純化(Simplify Building)] ツールを使用するモデルを示しています。面積単位はジオプロセシング サービスでサポートされる入力パラメータ データ タイプではないため、モデルの入力パラメータ [最小エリア] は先の方法で面積単位に変換される文字列です。output_value 変数は、ModelBuilder の [接続] ツール()を使って [建物ポリゴンの単純化(Simplify Building)] の [最小エリア] パラメータに接続されます。
この方法を使用するには、ツールのユーザが正しい文字列を入力する必要があります。たとえば、[値の計算(Calculate Value)] に(「1000 squaremeters」ではなく)「1000 square meters」が入力された場合、変換先の面積単位には何も含まれません。大文字と小文字は区別されません。つまり、SquareMETERS と squareMeters は同じものと見なされます。
文字列からデータ タイプへの変換プロセスにおいてさらにエラー チェックを行いたい場合は、データ タイプ変換を実行してスクリプトにエラー チェックを追加するスクリプト ツールを記述することができます。次の Python コードは基本的な考え方を示しています。
import arcpy # Get the string and call SetParameterAsText on the output # in_string = arcpy.GetParameterAsText(0) # Do error checking/conversion here, converting "meters squared" # to "squaremeters" for example # Set the output parameter # arcpy.SetParameterAsText(1, in_string)
ツールの入力データ タイプは String であり、出力データ タイプはターゲット データ タイプ(面積単位など)になります。出力パラメータの [タイプ] は [Derived] です。
データからファイルへの変換
フォルダベースのワークスペース(ファイル ジオデータベース、カバレッジ、シェープファイル)に使用できる手法は、Zip 圧縮ユーティリティを使ってワークスペースから *.zip ファイルを作成し、その *.zip ファイルをツールの入力にすることです。ジオプロセシング サービスでは、unzip スクリプト(以下を参照)を使ってファイルをワークスペースに展開し、そこから作業を続行することができます。出力についても同じことが言えます。ワークスペースの *.zip ファイルを作成し、それを出力に使用します。
次に、zip.py と unzip.py の 2 つの Python スクリプトへのリンクを示します。
- zip.py スクリプトは、入力ワークスペース(ファイル ジオデータベース、カバレッジが含まれているフォルダ、またはシェープファイルが含まれているフォルダ、つまりパーソナルまたはエンタープライズ ジオデータベース以外のもの)と出力ファイル名を受け取り、圧縮された Zip ファイルを作成します。出力ファイル名には「.zip」拡張子を追加する必要があります。スクリプトは拡張子を自動的に追加しません。
パラメータ プロパティは次のとおりです。
Zip.py のパラメータラベル
データ タイプ
タイプ
方向
入力ワークスペース
ワークスペース
必須
入力
出力ファイル
ファイル
必須
出力
- unzip.py スクリプトは、*.zip ファイル、出力場所(既存のフォルダ)、出力名(新しいフォルダ)を受け取り、新しいフォルダに内容を書き出します。*.zip ファイルにファイル ジオデータベースが含まれている場合は、出力ファイルに「.gdb」拡張子を追加します。
ラベル |
データ タイプ |
タイプ |
方向 |
---|---|---|---|
入力 ZIP ファイル |
ファイル |
必須 |
入力 |
出力場所 |
ワークスペース |
必須 |
入力 |
出力名 |
String |
必須 |
入力 |
出力パス |
ワークスペース |
派生 |
出力 |
これらの zip ユーティリティの使用例については、「GP サービス サンプル: クリップと送信」および「GP サービス サンプル: データ オンデマンド」をご参照ください。