[サービス エディター] で結果を公開するときは、タスク パラメーターごとに [入力モード] を指定します。[入力モード] に応じて、クライアントがファイルをタスクに入力する方法が決定されます。このトピックの目的は、一部の入力モード オプションがパラメーターに利用できないことをユーザーに理解してもらうことと、使用可能な入力モード オプションと連携動作するタスクの作成方法を示すことです。
入力モード オプションの種類をまとめると、次の 3 通りになります。
- ユーザー定義値:クライアントがパラメーターの値を指定します。
- 選択リスト:クライアントは文字列 (選択リスト) のリストが表示されたら、選択リストから 1 つ以上の文字列を選択する必要があります。入力のデータ タイプに応じて、選択リスト内の文字列が決定されます。この文字列はレイヤーの名前や、単純なキーワード オプションなどです。
- 定数値:結果を作成したときにパラメーターに指定した値が、タスクで使用されます。その値は定数であり、クライアントは変更できないため、サービス公開時のタスク パラメーターにはなりません。
特定のパラメーターの入力モードは、ツールのデータ タイプによって決まります。データ タイプのカテゴリには、次の 3 種類があります。
- データセット:ディスク上に保存されたデータ (フィーチャクラス、テーブル、フォルダー、マップ ドキュメント、データベースなど)。
- スカラー:数値や文字列など、データセット以外のものすべてを指します。
- バリュー テーブル:値のマルチフィールド テーブルである特殊なデータ タイプです。
データセット
GIS サービスは、GIS 機能を搭載していないコンピューター上で使用されている Web ブラウザーのように、非常に単純なクライアントでも動作します。そのような単純なクライアントが理解できるのは、単純なデータのパケット、たとえばテキスト、数字、ファイル、地理フィーチャおよびその属性 (フィールド) をサーバーに転送 (送受信する) 方法くらいです。ジオプロセシング タスクのコンテキストにおいて GIS データセットは、出力先指定および出力先固定の 2 つのカテゴリに分類できます。
- 出力先指定データセットはフィーチャ、ラスター、テーブル、およびファイルです。出力先指定データセットが格納されているパラメーターは、[ユーザー定義値] 入力モードをサポートしています。
- 出力先固定データセットはフィーチャ、ラスター、テーブルおよびファイル以外のものすべてです。出力先固定データセットのカテゴリには、次の 2 種類があります。
- コンプレックス データセットはジオメトリック ネットワーク、ネットワーク データセット、トポロジ、TIN などのデータセットです。それらのデータ タイプは、単純なフィーチャ間の複雑なリレーションシップをモデリングすることから、コンプレックス データセットと呼ばれています。
- コンテナー データセットはフォルダー、ファイル ジオデータベース、パーソナル ジオデータベース、マップ ドキュメント (*.mxd) などのアイテムです。これらのデータ タイプには、他のさまざまなデータセット (名前やコンテナーなど) が格納されています。
ツール パラメーターのデータ タイプの指定
タスク パラメーターが [ユーザー定義値] 入力モードをサポートするかどうかを確認するには、それを [サービス エディター] で調べて入力モードが選択項目として表示されるかどうかを確認します。[サービス エディター] で入力を行う前に [ユーザー定義値] がサポートされているかどうかを判別することもできます。そのためには、次のいずれかの方法でツール パラメーターのデータ タイプを確認します。
- ツールのリファレンス ページの構文セクションに、各パラメーターについて説明した表があります。このテーブルの最後の列には、パラメーターのデータ タイプが記載されています。
- ModelBuilder で変数を右クリックし、[プロパティ] をクリックして、[データ タイプ] タブをクリックします。ダイアログ ボックスの上部にデータ タイプが表示されます。
- スクリプト ツールの場合、カタログ ウィンドウでスクリプト ツールを右クリックし、[プロパティ] を選択します。[プロパティ] ダイアログ ボックスの [パラメーター] タブをクリックします。パラメーター テーブルに、各パラメーターのデータ タイプが一覧表示されます。
選択リストおよび出力先固定データセット
入力パラメーター値が出力先固定データセットを参照するレイヤーである場合、[選択リスト] を入力モード オプションとして選択できます。例として、タスク内でユーザーの交通モード (自動車、バイク、または歩行) に応じた最適ルートを検索する交通モード ネットワーク パラメーターを下の図に示します。
このパラメーターのデータ タイプはネットワーク データセット レイヤーです。ネットワーク データセットは Web 経由で転送できないコンプレックス データセットであるため、このパラメーターに対しては [ユーザー定義値] を使用できません。ただし、[選択リスト] を使用して、使用するレイヤー名の選択リストを指定することはできます。クライアントは選択リストからいずれかのレイヤー名を選択すると、そのレイヤーはクライアントが選択したタスクによって使用されます。その際にタスクがアクセスしたネットワーク データセットは、レイヤーによって参照され、サーバー上に保存されます。
コンプレックス データセットのほとんどは、対応するレイヤー表現があります。上の例に、ネットワーク データセット レイヤーを示します。TIN レイヤー、Geostatistical レイヤー、パーセル ファブリック レイヤー、LAS データセット レイヤーなどがあります。出力先固定データセットがある場合は常に、そのレイヤー表現を入力値として使用できます。上の例のタスクは、モデルを実行し、道路ネットワーク レイヤーを入力として指定して作成されたものです。ディスク上のネットワーク データセットへのパスをレイヤー名の代わりに指定してモデルを実行した場合、入力モードは [定数値] に設定されます。[選択リスト] オプションが表示されるようにするには、レイヤーを入力として使用してツールを実行する必要があります。
以上をまとめると、次のようになります。
- クライアントは単純なフィーチャ、ラスター、テーブル、およびファイルをインターネット経由で送受信 (転送) できます。
- ネットワーク データセット、TIN、パーセル ファブリックなどのコンプレックス データセットは出力先固定です。コンテナー データセット (たとえば、フォルダー、ジオデータベース、マップ ドキュメントなど) も出力先固定です。つまり、そのようなコンプレックス データセットやコンテナーをクライアントが作成してインターネット経由で転送する方法はありません。これは、ArcMap などの機能の豊富なクライアントに対しても当てはまります。
- コンプレックス データセットのほとんどには、レイヤー表現があります。つまり、データセットを ArcMap に追加することが可能で、それにより [コンテンツ] ウィンドウにレイヤーが作成されます。
- レイヤー名の選択リストを作成できます。それらのレイヤー名の 1 つ以上をクライアントがタスクへの入力として選択します。その後、レイヤーから参照されるデータセットがタスクによって使用されます。
- レイヤー名の選択リストを作成するには、レイヤーを入力として使用してツールを実行する必要があります。[サービス エディター] の選択リストには、[コンテンツ] ウィンドウ内にある適用可能なレイヤーが設定されます。
- ディスク上のデータセットへのパスを使用してツールを実行した場合、[コンテンツ] ウィンドウ内に正しいタイプのレイヤーがあるとしても [選択リスト] オプションを利用できません。
定数値およびコンプレックス データセット
タスクへの入力がコンプレックス データセットへのパス (たとえば、D:\mydata\chicago.gdb\transportation\streetnetwork、ネットワーク データセット) である場合、[入力モード] は [定数値] に固定されます。[入力モード] を [定数値] に設定して公開した場合、データセットが (サーバーのデータ ストア内に見つからない限り) サーバーにコピーされ、コピーされたデータセットがタスクで使用されます。
データセットを ArcMap に追加してレイヤーを作成できる場合、レイヤーを入力データとして使用して、ツールを再実行できます。これにより、共有可能な結果が新しく作成され、[サービス エディター] で [選択リスト] が入力モードとしてサポートされるようになります。
定数値およびコンテナー データセット
コンテナーはフォルダー、ファイル ジオデータベース、パーソナル ジオデータベース、マップ ドキュメント (*.mxd) などのアイテムです。これらのデータ タイプには、他のさまざまなデータセット (名前やコンテナーなど) が格納されています。コンテナーが出力先固定で、[入力モード] を [定数] に設定してタスクを公開した場合、(データ ストアがサーバーのデータセット内に見つからない限り) データセットがタスクで使用できるようにサーバーにコピーされます。いくつかの一般的なコンテナーについては、この後で説明します。
フォルダー
タスクへの入力がフォルダーである場合、[入力モード] が [定数値] に固定されます。[入力モード] を [定数値] に設定して公開した場合、フォルダーおよびその内容 (下の注記を参照) は、サーバーのデータ ストア内に見つからない限りサーバーにコピーされ、コピーされたフォルダーがタスクで使用されます。
マップ ドキュメント (*.mxd)
タスクへの入力がマップ ドキュメントである場合、[入力モード] が [定数値] に固定されます。[入力モード] を [定数値] に設定して公開した場合、マップ ドキュメント、そのすべてのレイヤー、およびレイヤーから参照されるすべてのデータセットは、マップ ドキュメントがサーバーのデータ ストア内に見つからない限り、サーバーにコピーされます。参照先のデータセットは、サーバーのデータストア内に見つからない場合、サーバーにもコピーされます。基本的に、マップ ドキュメントはパッケージ化され、サーバーに送信されてから、サーバー上で解凍されます。
ジオデータベース
タスクへの入力がジオデータベースである場合、[入力モード] が [定数値] に固定されます。[入力モード] を [定数値] に設定して公開した場合、データセットが (サーバーのデータ ストア内に見つからないとき) サーバーにコピーされ、コピーされたデータセットがタスクで使用されます。
パーソナル ジオデータベース (*.mdb) はサーバー プラットフォーム (64 ビット Windows および Linux) 上ではサポートされないので、サーバーにコピーされる際に、ファイル ジオデータベースに変換されます。エンタープライズ ジオデータベースも、サーバーにコピーされる際に、ファイル ジオデータベースに変換されます。
非可搬性の出力
ツールの出力がコンプレックス データセットまたはコンテナー データセットである場合、そのデータセットはクライアントに転送できません。[サービス エディター] で、出力パラメーターの [データ タイプ] に [文字列] が表示されます。下の図で、タスクによって返された値は、データセット自体ではなく、作成された TIN データセットの名前になります。
非可搬性の出力を扱うには、いくつかの方法があります。
- 結果マップ サービスを使用して、クライアントに結果をマップとして送信します。データセットはクライアントに転送されません。転送されるのはデータのマップだけです。
- データセットを出力先指定データセットに変換します。たとえば、[TIN → ラスター (TIN to Raster)] ツールを使用して TIN (出力先固定) をラスター データセット (出力先指定) に変換できます。
- [レイヤーとテーブル ビュー] ツールセット のいずれかツールを使用してデータセットのレイヤー パッケージ (*.lpk) を作成し、[レイヤーのパッケージ化 (Package Layer)] ツールを使用してレイヤー パッケージを作成します。レイヤー パッケージとはファイルであり、ファイルはインターネット経由で転送することが可能です。パッケージの場合、クライアントで解凍を行います。
- ZIP ユーティリティを使用して結果データセットまたはフォルダーのファイルを作成し、*.zip ファイルをクライアントに転送します。ファイルの解凍に関しては、クライアントが責任を担うものとします。「サービス サンプル: クリップと送信」では、分析範囲からのレイヤーをファイル ジオデータベース (および他のフォーマット) にクリップし、クライアントに移動される *.zip ファイルを作成します。 この手法を使用する際は、下のリンクをご参照ください。
スカラー
スカラー データ タイプは、データセット以外のものすべてを含みます。スカラー データ タイプは、シンプルなデータ タイプと呼ばれることもあります。ジオプロセシングには多くのスカラー データ タイプがあります。例としてフィールド (テーブル内のフィールド)、SQL 式、演算式、フィールド マッピング、ファジー関数が挙げられますが、それ以外にもさまざまなものがあります。使用頻度が低いものもあれば、フィールドや SQL 式などのようによく使用されるものもあります。
スカラー データ タイプ Boolean、Date、Double、Linear Unit、Long、および String は、すべてのクライアントによって完全にサポートされているので、変換しなくてもインターネット経由で送受信できます。他のあらゆるスカラー データ タイプは文字列に変換しなければならないので、サポート対象外になるか出力先固定になります。
あらゆるデータ タイプには明確な文字列表現があるので、サポートされていないスカラー データ タイプから文字列への変換では問題が発生することはめったにありません。したがって、その実体をクライアント向けにドキュメント化できるよう把握しておけばそれだけで十分です。状況によっては、クライアントから提供されたその他の情報を使用して、文字列表現の作成作業を行えるようにツールを変更することをお勧めします。それら両方の手法については、この後で説明します。特殊なデータ タイプの 1 つ「バリュー テーブル」については、固有のセクション (後述)で説明します。
パラメーターの文字列表現の確認
ほとんどの文字列表現は自明です。たとえば、Field データ タイプの文字列表現は、フィールドの名前です。時には、少し深く掘り下げて文字列表現を確認しなければならないこともあります。
次の例に、ポイントからサーフェスを内挿する場合に使用される [IDW](逆距離加重) ツールの [検索半径] パラメーターを示します。下の図に示すように、このパラメーター 1 つは 3 つの部分で構成されています。方法 ([可変] または [固定] のどちらか)、および[検索範囲の設定] の 2 つの値です
- このパラメーターの文字列表現を確認するには、まずツールのリファレンス ページのパラメーター構文セクションに注目してください。このテーブルの最初の列にはパラメーター名 (非自明な例では文字列表現) が記載されています。このテーブルの最後の列には、パラメーターのデータ タイプが記載されています。先に述べた [検索半径] パラメーターの最初の列の内容は、下の図に示すとおりです。
また、ツール リファレンス ページの下部にある Python コード サンプルを閲覧することもお勧めします。このようなサンプルには、パラメーターの文字列表現がよく使用されるからです。
- パラメーターの文字列表現を表示するには、ツールを実行し、[結果] ウィンドウで結果を右クリックして、[Python スニペットとしてコピー (Copy as Python Snippet)] を選択します。スニペットをテキスト エディターに貼り付けて調べます。[IDW] ツール実行用のコード スニペットは、arcpy.gp.Idw_sa (...,"2","VARIABLE 12 250","#") のようになります (簡潔になるように初期パラメーターは除いてあります)。行をたどって順に見ていくと、(上の図に対応した) 検索半径の文字列表現が「VARIABLE 12 250」であることを確認できます。さらにツールを実行してパラメーター値を変更し、Python スニペットをコピーして、任意のパラメーターの文字列表現を調べることができます。
文字列表現を確認したら、その内容をクライアントに伝える必要があるので、タスクのドキュメントに記録しておいてください。
ツール内での文字列表現の構成
文字列表現が複雑な場合やクライアントにとって文字列の作成が過度の負担になる場合、クライアント用の文字列が作成されるようにツールを変更することをお勧めします。SQL Expression データ タイプは、この典型的な例です。下の図に示すモデルにおいて SQL Expression は Expression パラメーターのデータ タイプです。このモデルをタスクとして実行するには、有効な SQL 式文字列をクライアントが指定する必要があります。
所有者名に基づいてパーセルを選択することを目的としたタスクでは、クライアントが所有者の名前を入力すればそのクライアント用の有効な SQL ステートメントが生成されるようにモデルを作成するとよいでしょう。この作成を行う場合、次の図に示すような 変数置換を使用すれば簡単です。Owner name 変数は文字列型データであり、クライアントがパーセルの所有者名を入力すると、有効な SQL 式がモデル内に作成されます。その他の変数置換の使用例については、トピック「インライン モデル変数の置換の例」をご参照ください。
独自の選択リストの作成
ジオプロセシング ツールの多くは、その文字列パラメーター用の選択リスト (別称: 値のリスト フィルター) を定義します。上の図に示す [属性検索 (Select Layer By Attribute)] ツールの場合、[選択タイプ] パラメーター用の文字列の選択リスト (NEW_SELECTION、ADD_TO_SELECTION、REMOVE_FROM_SELECTION など) が用意されています。文字列変数用のユーザー独自の選択リストを作成するには、値のリスト フィルターを使用します。
バリュー テーブル
他にも多数あるマルチフィールド テーブルの中で、[インターセクト (Intersect)] および [マージ (Merge)] ツールに使用されているのが、バリュー テーブルです。下の図に示す [インターセクト (Intersect)] ツール、およびその [入力フィーチャ] パラメーターは、[フィーチャ] および [ランク] の 2 列を含んだバリュー テーブルです。
バリュー テーブルは非可搬性であり、[入力モード] は [サービス エディター] 内の [定数値] に固定されます。
クライアントに値を入力させる (定数値を使用させないようにする) 必要がある場合、モデルまたはスクリプトをバリュー テーブル以外のデータ タイプを使用するように変更する必要があります。
バリュー テーブルには任意の行数を保持できます。クライアントに入力させる行が固定数かそれとも可変数かに応じて、ツールをどのように変更したらよいかが決まってきます。バリュー テーブル内の列のいずれかにデータセットが格納されている場合、各行にデータセットを格納するための固有のパラメーターが必要になるため、行の数は固定でなければなりません。
下の図は、ModelBuilder でバリュー テーブルを公開せずに 2 つのランク付きフィーチャクラスをインターセクトさせるための手法です。[道路] 変数および [公園] 変数は、バリュー テーブルに入力すれば、ModelBuilder によって自動的に作成されます。[道路ランク] 変数および [公園ランク] 変数は、次の手順で作成します。
- Long タイプのスタンドアロン変数を 2 つ作成します。その両方のスタンドアロン変数の名前を変更して、モデル パラメーターにします。
- 次の図に示すように、[インターセクト (Intersect)] ツールを開き、[ランク] 列内のセルをクリックします。作成しておいた 2 つの Long 変数のどちらか一方を選択することができます。
個々の入力を受け入れ、スクリプト内にバリュー テーブル パラメーターを作成し、その後でツールを呼び出せるスクリプト ツールをいつでも作成することができます。下記のコードは、バリューテーブル パラメーターを使用せずに 2 つのフィーチャクラスのインターセクトを実行します。
# Script tool to intersect two feature classes.
#
import arcpy
inFeatures1 = arcpy.GetParameterAsText(0) # data type = Feature layer
inRank1 = arcpy.GetParameterAsText(1) # data type = Long integer
inFeatures2 = arcpy.GetParameterAsText(2) # data type = Feature layer
inRank2 = arcpy.GetParameterAsText(3) # data type = Long integer
outFeatures = arcpy.GetParameterAsText(4) # data type = Feature class
# Default values
#
joinAttributes = "ALL"
xyTolerance = "#"
outputType = "INPUT"
# Construct the value table parameter, a list of lists
#
valueTable = [ [inFeatures1, inRank1], [inFeatures2, inRank2] ]
arcpy.Intersect_analysis(valueTable, outFeatures, joinAttributes,
xyTolerance, outputType)
下の例は、[ディゾルブ (Dissolve)] ツールを使用してパラメーターの文字列表現、およびバリュー テーブル内の行の可変数値を使用する方法を、例を挙げながら説明したものです。[ディゾルブ (Dissolve)] ツールはラインまたはポリゴンのフィーチャクラスまたはレイヤーを受け入れ、[ディゾルブ フィールド] パラメーター内の 1 つ以上のフィールドの値に基づいてフィーチャを集約します。集約には、[統計フィールド] パラメーター (バリュー テーブル) を使用して、集約されたフィーチャに関する統計情報を計算できます。
クライアントが入力フィーチャ上にあるディソルブ フィールドおよび統計フィールドを指定する限り、タスクが実行されます。この指定を行うには、[ディソルブ フィールド] および [統計フィールド] パラメーターの文字列表現を受け入れるスクリプト ツールを作成する必要があります。入力フィーチャ スキーマ内にあるフィールドの選択リストをスクリプト ツールに表示させる必要はありません。事実上、ツール ダイアログ ボックスおよび [サービス エディター] に組み込まれているインテリジェンスを迂回し、パラメーターの文字列表現だけを使用してツールを実行することになります。
# Script tool code to do a Dissolve using strings for the Dissolve Fields(s) and
# Statistics Fields(s) parameters
#
import arcpy
inFeatures = arcpy.GetParameterAsText(0) # data type = Feature layer
outFeatures = arcpy.GetParameterAsText(1) # data type = Feature class
dissolveFields = arcpy.GetParameterAsText(2) # data type = String
statFields = arcpy.GetParameterAsText(3) # data type = String
multi_part = False # Always produce single-part features
unsplit_lines = True # Only dissolve lines if the share common vertex
arcpy.Dissolve_management(inFeatures, outFeatures, dissolveFields, statFields,
multi_part, unsplit_lines)
このスクリプト ツールを実行するときは、[ディソルブ フィールド] および [統計フィールド] パラメーターの文字列表現を指定します。上の図の例では、[ディソルブ フィールド] = DISTRICT かつ [統計フィールド] = POP98 SUM;NAME FIRST です。(「データ タイプの文字列表現の確認方法」の詳細については、上記をご参照ください)。その 2 つのパラメーターは文字列であるため、[サービス エディター] で [ユーザー定義値] に設定することができます。