入力モードおよびパラメータ データ タイプ

[サービス エディタ] で結果を公開するときは、タスク パラメータごとに [入力モード] を指定します。[入力モード] に応じて、クライアントがファイルをタスクに入力する方法が決定されます。このトピックの目的は、一部の入力モード オプションがパラメータに利用できないことをユーザに理解してもらうことと、使用可能な入力モード オプションと連携動作するタスクの作成方法を示すことです。

入力モード オプションの種類をまとめると、次の 3 通りになります。

特定のパラメータの入力モードは、ツールのデータ タイプによって決まります。データ タイプのカテゴリには、次の 3 種類があります。

これらのデータ タイプについては、以降の 3 つのセクションでそれぞれ例を挙げながら順番に説明します。

データセット

GIS サービスは、GIS 機能を搭載していないコンピュータ上で使用されている Web ブラウザのように、非常に単純なクライアントでも動作します。そのような単純なクライアントが理解できるのは、単純なデータのパケット、たとえばテキスト、数字、ファイル、地理フィーチャおよびその属性(フィールド)をサーバに転送(送受信する)方法くらいです。ジオプロセシング タスクのコンテキストにおいて GIS データセットは、出力先指定および出力先固定の 2 つのカテゴリに分類できます。

ツール パラメータのデータ タイプの指定

タスク パラメータが [ユーザ定義値] 入力モードをサポートするかどうかを確認するには、それを [サービス エディタ] で調べて入力モードが選択項目として表示されるかどうかを確認します。[サービス エディタ] で入力を行う前に [ユーザ定義値] がサポートされているかどうかを判別することもできます。そのためには、次のいずれかの方法でツール パラメータのデータ タイプを確認します。

  • ツールのリファレンス ページの構文セクションに、各パラメータについて説明した表があります。このテーブルの最後の列には、パラメータのデータ タイプが記載されています。
  • ModelBuilder で変数を右クリックし、[プロパティ] をクリックして、[データ タイプ] タブをクリックします。ダイアログ ボックスの上部にデータ タイプが表示されます。
  • スクリプト ツールの場合、カタログ ウィンドウでスクリプト ツールを右クリックし、[プロパティ] を選択します。[プロパティ] ダイアログ ボックスの [パラメータ] タブをクリックします。パラメータ テーブルに、各パラメータのデータ タイプが一覧表示されます。
[ユーザ定義値] 入力モードをサポートしている出力先指定データ タイプとしては、フィーチャクラス、フィーチャ レイヤ、フィーチャ セット、ラスタ レイヤ、ラスタ データセット、テーブル、テーブル ビュー、レコード セットおよびファイルがあります。

選択リストおよび出力先固定データセット

入力パラメータ値が出力先固定データセットを参照するレイヤである場合、[選択リスト] を入力モード オプションとして選択できます。例として、タスク内でユーザの交通モード(自動車、バイク、または歩行)に応じた最適ルートを検索する交通モード ネットワーク パラメータを下の図に示します。

ネットワーク データセット レイヤの選択リスト

このパラメータのデータ タイプはネットワーク データセット レイヤです。ネットワーク データセットは Web 経由で転送できないコンプレックス データセットであるため、このパラメータに対しては [ユーザ定義値] を使用できません。ただし、[選択リスト] を使用して、使用するレイヤ名の選択リストを指定することはできます。クライアントは選択リストからいずれかのレイヤ名を選択すると、そのレイヤはクライアントが選択したタスクによって使用されます。その際にタスクがアクセスしたネットワーク データセットは、レイヤによって参照され、サーバ上に保存されます。

コンプレックス データセットのほとんどは、対応するレイヤ表現があります。上の例に、ネットワーク データセット レイヤを示します。TIN レイヤ、Geostatistical レイヤ、パーセル ファブリック レイヤ、LAS データセット レイヤなどがあります。出力先固定データセットがある場合は常に、そのレイヤ表現を入力値として使用できます。上の例のタスクは、モデルを実行し、道路ネットワーク レイヤを入力として指定して作成されたものです。ディスク上のネットワーク データセットへのパスをレイヤ名の代わりに指定してモデルを実行した場合、入力モードは [定数値] に設定されます。[選択リスト] オプションが表示されるようにするには、レイヤを入力として使用してツールを実行する必要があります。

以上をまとめると、次のようになります。

  • クライアントは単純なフィーチャ、ラスタ、テーブル、およびファイルをインターネット経由で送受信(転送)できます。
  • ネットワーク データセット、TIN、パーセル ファブリックなどのコンプレックス データセットは出力先固定です。コンテナ データセット(たとえば、フォルダ、ジオデータベース、マップ ドキュメントなど)も出力先固定です。つまり、そのようなコンプレックス データセットやコンテナをクライアントが作成してインターネット経由で転送する方法はありません。これは、ArcMap などの機能の豊富なクライアントに対しても当てはまります。
  • コンプレックス データセットのほとんどには、レイヤ表現があります。つまり、データセットを ArcMap に追加することが可能で、それによりコンテンツ ウィンドウにレイヤが作成されます。
    • レイヤ名の選択リストを作成できます。それらのレイヤ名の 1 つ以上をクライアントがタスクへの入力として選択します。その後、レイヤから参照されるデータセットがタスクによって使用されます。
    • レイヤ名の選択リストを作成するには、レイヤを入力として使用してツールを実行する必要があります。[サービス エディタ] の選択リストには、コンテンツ ウィンドウ内にある適用可能なレイヤが設定されます。
    • ディスク上のデータセットへのパスを使用してツールを実行した場合、コンテンツ ウィンドウ内に正しいタイプのレイヤがあるとしても [選択リスト] オプションを利用できません。
注意注意:

レイヤ名の選択リストを公開した場合、レイヤから参照されるデータはプロジェクト データになり、サーバのデータストアに見つからない場合、GIS サーバにコピーされます。

定数値およびコンプレックス データセット

タスクへの入力がコンプレックス データセットへのパス(たとえば、D:\mydata\chicago.gdb\transportation\streetnetwork、ネットワーク データセット)である場合、[入力モード][定数値] に固定されます。[入力モード] を [定数値] に設定して公開した場合、データセットが(サーバのデータ ストア内に見つからない限り)サーバにコピーされ、コピーされたデータセットがタスクで使用されます。

データセットを ArcMap に追加してレイヤを作成できる場合、レイヤを入力データとして使用して、ツールを再実行できます。これにより、共有可能な結果が新しく作成され、[サービス エディタ][選択リスト] が入力モードとしてサポートされるようになります。

注意注意:

ジオメトリック ネットワーク用にレイヤを作成できません。ジオメトリック ネットワークを含むパラメータによって、その入力モードが常に [定数値] に設定されます。

定数値およびコンテナ データセット

コンテナはフォルダ、ファイル ジオデータベース、パーソナル ジオデータベース、マップ ドキュメント(*.mxd)などのアイテムです。これらのデータ タイプには、他のさまざまなデータセット(名前やコンテナなど)が格納されています。コンテナが出力先固定で、[入力モード] を [定数] に設定してタスクを公開した場合、(データ ストアがサーバのデータセット内に見つからない限り)データセットがタスクで使用できるようにサーバにコピーされます。いくつかの一般的なコンテナについては、この後で説明します。

フォルダ

タスクへの入力がフォルダである場合、[入力モード][定数値] に固定されます。[入力モード] を [定数値] に設定して公開した場合、フォルダおよびその内容(下の注記を参照)は、サーバのデータ ストア内に見つからない限りサーバにコピーされ、コピーされたフォルダがタスクで使用されます。

注意注意:

フォルダを公開プロセスの一部としてサーバにコピーする場合、コピーされるのはファイルおよびジオデータセットだけで、フォルダ内のサブフォルダは一切コピーされません。一部のジオデータセット(たとえば、ファイル ジオデータベース、ラスタ、TINS)は技術的にはフォルダですが、コピー対象のフォルダ内に検出された場合は、サーバにコピーされます。

マップ ドキュメント(*.mxd

タスクへの入力がマップ ドキュメントである場合、[入力モード][定数値] に固定されます。[入力モード] を [定数値] に設定して公開した場合、マップ ドキュメント、そのすべてのレイヤ、およびレイヤから参照されるすべてのデータセットは、マップ ドキュメントがサーバのデータ ストア内に見つからない限り、サーバにコピーされます。参照先のデータセットは、サーバのデータストア内に見つからない場合、サーバにもコピーされます。基本的に、マップ ドキュメントはパッケージ化され、サーバに送信されてから、サーバ上で解凍されます。

ジオデータベース

タスクへの入力がジオデータベースである場合、[入力モード][定数値] に固定されます。[入力モード] を [定数値] に設定して公開した場合、データセットが(サーバのデータ ストア内に見つからないとき)サーバにコピーされ、コピーされたデータセットがタスクで使用されます。

パーソナル ジオデータベース(*.mdb)はサーバ プラットフォーム(64 ビット Windows および Linux)上ではサポートされないので、サーバにコピーされる際に、ファイル ジオデータベースに変換されます。エンタープライズ ジオデータベースも、サーバにコピーされる際に、ファイル ジオデータベースに変換されます。

非可搬性の出力

ツールの出力がコンプレックス データセットまたはコンテナ データセットである場合、そのデータセットはクライアントに転送できません。[サービス エディタ] で、出力パラメータの [データ タイプ][文字列] が表示されます。下の図で、タスクによって返された値は、データセット自体ではなく、作成された TIN データセットの名前になります。

出力先固定の出力は文字列に変換されます。

非可搬性の出力を扱うには、いくつかの方法があります。

  • 結果マップ サービスを使用して、クライアントに結果をマップとして送信します。データセットはクライアントに転送されません。転送されるのはデータのマップだけです。
  • データセットを出力先指定データセットに変換します。たとえば、[TIN → ラスタ(TIN to Raster)] ツールを使用して TIN(出力先固定)をラスタ データセット(出力先指定)に変換できます。
  • [レイヤとテーブル ビュー] ツールセット のいずれかツールを使用してデータセットのレイヤ パッケージ(*.lpk)を作成し、[レイヤのパッケージ化(Package Layer)] ツールを使用してレイヤ パッケージを作成します。レイヤ パッケージとはファイルであり、ファイルはインターネット経由で転送することが可能です。パッケージの場合、クライアントで解凍を行います。
  • ZIP ユーティリティを使用して結果データセットまたはフォルダのファイルを作成し、*.zip ファイルをクライアントに転送します。ファイルの解凍に関しては、クライアントが責任を担うものとします。「サービス サンプル: クリップと送信」では、分析範囲からのレイヤをファイル ジオデータベース(および他のフォーマット)にクリップし、クライアントに移動される *.zip ファイルを作成します。 この手法を使用する際は、下のリンクをご参照ください。
    • Zip.py は、入力フォルダ名と出力ファイル名を取得して、圧縮された *.zip ファイルを作成します。
    • Unzip.py は入力 *.zip ファイルと出力フォルダを取得して、このフォルダにコンテンツを書き出します。

スカラー

スカラー データ タイプは、データセット以外のものすべてを含みます。スカラー データ タイプは、シンプルなデータ タイプと呼ばれることもあります。ジオプロセシングには多くのスカラー データ タイプがあります。例としてフィールド(テーブル内のフィールド)、SQL 式、演算式、フィールド マッピング、ファジー関数が挙げられますが、それ以外にもさまざまなものがあります。使用頻度が低いものもあれば、フィールドや SQL 式などのようによく使用されるものもあります。

スカラー データ タイプ Boolean、Date、Double、Linear Unit、Long、および String は、すべてのクライアントによって完全にサポートされているので、変換しなくてもインターネット経由で送受信できます。他のあらゆるスカラー データ タイプは文字列に変換しなければならないので、サポート対象外になるか出力先固定になります。

あらゆるデータ タイプには明確な文字列表現があるので、サポートされていないスカラー データ タイプから文字列への変換では問題が発生することはめったにありません。したがって、その実体をクライアント向けにドキュメント化できるよう把握しておけばそれだけで十分です。状況によっては、クライアントから提供されたその他の情報を使用して、文字列表現の作成作業を行えるようにツールを変更することをお勧めします。それら両方の手法については、この後で説明します。特殊なデータ タイプの 1 つ「バリュー テーブル」については、固有のセクション(後述)で説明します。

パラメータの文字列表現の確認

ほとんどの文字列表現は自明です。たとえば、Field データ タイプの文字列表現は、フィールドの名前です。時には、少し深く掘り下げて文字列表現を確認しなければならないこともあります。

次の例に、ポイントからサーフェスを内挿する場合に使用される [IDW](逆距離加重)ツールの [検索半径] パラメータを示します。下の図に示すように、このパラメータ 1 つは 3 つの部分で構成されています。方法([可変] または [固定] のどちらか)、および[検索範囲の設定] の 2 つの値です

より複雑なスカラー データ タイプの例

  1. このパラメータの文字列表現を確認するには、まずツールのリファレンス ページのパラメータ構文セクションに注目してください。このテーブルの最初の列にはパラメータ名(非自明な例では文字列表現)が記載されています。このテーブルの最後の列には、パラメータのデータ タイプが記載されています。先に述べた [検索半径] パラメータの最初の列の内容は、下の図に示すとおりです。

    search_radius パラメータの文字列表現

    また、ツール リファレンス ページの下部にある Python コード サンプルを閲覧することもお勧めします。このようなサンプルには、パラメータの文字列表現がよく使用されるからです。

  2. パラメータの文字列表現を表示するには、ツールを実行し、[結果] ウィンドウで結果を右クリックして、[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 Expression データ タイプを使用するモデル例

所有者名に基づいてパーセルを選択することを目的としたタスクでは、クライアントが所有者の名前を入力すればそのクライアント用の有効な SQL ステートメントが生成されるようにモデルを作成するとよいでしょう。この作成を行う場合、次の図に示すような 変数置換を使用すれば簡単です。Owner name 変数は文字列型データであり、クライアントがパーセルの所有者名を入力すると、有効な SQL 式がモデル内に作成されます。その他の変数置換の使用例については、トピック「インライン モデル変数の置換の例」をご参照ください。

変数置換を使用すれば、クライアント用の有効な SQL 式を作成できます。

独自の選択リストの作成

ジオプロセシング ツールの多くは、その文字列パラメータ用の選択リスト(別称: 値のリスト フィルタ)を定義します。上の図に示す [属性検索(Select Layer By Attribute)] ツールの場合、[選択タイプ] パラメータ用の文字列の選択リスト(NEW_SELECTION、ADD_TO_SELECTION、REMOVE_FROM_SELECTION など)が用意されています。文字列変数用のユーザ独自の選択リストを作成するには、値のリスト フィルタを使用します。

値のリスト フィルタの詳細

バリュー テーブル

他にも多数あるマルチフィールド テーブルの中で、[インターセクト(Intersect)] および [マージ(Merge)] ツールに使用されているのが、バリュー テーブルです。下の図に示す [インターセクト(Intersect)] ツール、およびその [入力フィーチャ] パラメータは、[フィーチャ] および [ランク] の 2 列を含んだバリュー テーブルです。

バリュー テーブルは非可搬性であり、[入力モード][サービス エディタ] 内の [定数値] に固定されます。

バリュー テーブル パラメータは常に、定数文字列に設定されます。

クライアントに値を入力させる(定数値を使用させないようにする)必要がある場合、モデルまたはスクリプトをバリュー テーブル以外のデータ タイプを使用するように変更する必要があります。

バリュー テーブルには任意の行数を保持できます。クライアントに入力させる行が固定数かそれとも可変数かに応じて、ツールをどのように変更したらよいかが決まってきます。バリュー テーブル内の列のいずれかにデータセットが格納されている場合、各行にデータセットを格納するための固有のパラメータが必要になるため、行の数は固定でなければなりません。

下の図は、ModelBuilder でバリュー テーブルを公開せずに 2 つのランク付きフィーチャクラスをインターセクトさせるための手法です。[道路] 変数および [公園] 変数は、バリュー テーブルに入力すれば、ModelBuilder によって自動的に作成されます。[道路ランク] 変数および [公園ランク] 変数は、次の手順で作成します。

  1. Long タイプのスタンドアロン変数を 2 つ作成します。その両方のスタンドアロン変数の名前を変更して、モデル パラメータにします。
  2. 次の図に示すように、[インターセクト(Intersect)] ツールを開き、[ランク] 列内のセルをクリックします。作成しておいた 2 つの Long 変数のどちらか一方を選択することができます。

ModelBuilder のバリュー テーブルの分解

個々の入力を受け入れ、スクリプト内にバリュー テーブル パラメータを作成し、その後でツールを呼び出せるスクリプト ツールをいつでも作成することができます。下記のコードは、バリューテーブル パラメータを使用せずに 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 つ以上のフィールドの値に基づいてフィーチャを集約します。集約には、[統計フィールド] パラメータ(バリュー テーブル)を使用して、集約されたフィーチャに関する統計情報を計算できます。

[ディゾルブ(Dissolve)] ツールおよびそのパラメータ 2 つ

クライアントが入力フィーチャ上にあるディソルブ フィールドおよび統計フィールドを指定する限り、タスクが実行されます。この指定を行うには、[ディソルブ フィールド] および [統計フィールド] パラメータの文字列表現を受け入れるスクリプト ツールを作成する必要があります。入力フィーチャ スキーマ内にあるフィールドの選択リストをスクリプト ツールに表示させる必要はありません。事実上、ツール ダイアログ ボックスおよび [サービス エディタ] に組み込まれているインテリジェンスを迂回し、パラメータの文字列表現だけを使用してツールを実行することになります。

# 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 つのパラメータは文字列であるため、[サービス エディタ][ユーザ定義値] に設定することができます。

関連トピック

9/14/2013