モデルへのスクリプトの統合

スクリプトをスクリプト ツールとして設定し、スクリプト ツールをモデルに追加することで、Python スクリプトや他の言語によるスクリプトをモデルに統合することができます。モデルを拡張したり、ArcGIS から外部のパッケージやプログラムにアクセスするために、Python またはその他のスクリプト言語のロジックを使用する必要がある場合は、この方法を使用できます。

スクリプトをモデルに統合するには、まずスクリプトを作成します。スクリプトは、ジオプロセシング フレームワークに統合可能な方法で作成する必要があります。詳細については、「Python スクリプトの作成」をご参照ください。

スクリプトを作成したら、スクリプト ツールを作成してツールボックスに追加します。このスクリプト ツールをモデルに追加して、モデルで追加機能を利用することができます。

アプリケーション例

ArcGIS には、HTML を操作するための組み込みの手段はありません。ただし、Python スクリプトを使用して、HTML ドキュメントを作成および変更するための方法や機能にアクセスすることができます。この HTML 機能を ArcGIS に統合するには、Python スクリプト ツールをモデルに組み込みます。

次の例では、パーセル レイヤで空間検索と属性検索を実行し、ユーザが指定したパーセルとその隣接パーセルの属性を報告する HTML レポートを生成します。HTML 生成は、モデルから実行される Python スクリプト内で実行されます。

Python スクリプト

次に示す tabletohtml.py スクリプトは、入力テーブルの内容を読み取り、HTML レポートを生成するために使用されます。スクリプトのコードは、このトピックの最後に示しています。

テーブルから HTML を生成する Python スクリプト

スクリプト ツールの作成

次の手順は、tabletohtml.py スクリプトを実行するスクリプト ツールの作成方法を示しています。スクリプト ツールの作成については、「スクリプト ツールの作成の概要」をご参照ください。

手順:
  1. ツールボックスを右クリックし、[追加] [スクリプト] の順にクリックします。
    新しいスクリプトの追加

    [スクリプトの追加] ウィザードが表示されます。

  2. [スクリプトの追加] ウィザードを使用して、スクリプトの一般プロパティを指定します。
    スクリプトの一般プロパティ
  3. [スクリプトの追加] ウィザードの次のページで、スクリプト ツールを起動したときに実行するスクリプトを指定します。
    スクリプトのソース ファイル
  4. [スクリプトの追加] ウィザードの次のページで、スクリプト ツールのパラメータ プロパティを指定します。このスクリプト ツールには、入力テーブルと出力 HTML ファイルの 2 つのパラメータがあります。これらのパラメータは、tabletohtml.py でも定義されています。
    スクリプト ツールのパラメータ プロパティの設定
  5. [完了] をクリックして、スクリプト ツールをツールボックスに追加します。

モデルへのスクリプト ツールの追加

手順:
  1. 「パーセル レポート」モデルは、パーセル レイヤで空間検索と属性検索を実行します。[テーブルから HTML を生成(Table to HTML)] スクリプト ツールをモデルに追加して、HTML 生成機能を追加します。
    モデルへのスクリプト ツールの追加
  2. [空間検索(Select Layer By Location)] ツールの出力を、スクリプト ツールに入力として接続し、スクリプト ツールの出力のパス(生成する HTML ファイルのパス)を設定します。また、スクリプト ツールの出力の名前を「レポート」に変更し、変数をモデル パラメータに設定します。
スクリプト ツールを使用するモデル例
HTML レポートを生成するためのスクリプト ツールを統合した最終的なモデル
import sys, string, os, arcgisscripting
gp = arcgisscripting.create(9.3)

tablePath = gp.GetParameterAsText(0)
filePath = gp.GetParameterAsText(1)

outfile = open(filePath, "w")
fields = gp.ListFields(tablePath)

fieldNames = []
for field in fields:
   if (field.type <> "Geometry" and field.type <> "BLOB"):
       fieldNames.append(field.name)
outfile.write("<table border=""1"">\n")
outfile.write("<tr>\n")

for fieldName in fieldNames:
    outfile.write("<th>" + fieldName + "</th>\n")
outfile.write("</tr>\n")

cur = gp.SearchCursor(tablePath)
row = cur.Next()
while row:
    outfile.write("<tr>\n")
    for fieldName in fieldNames:
        outfile.write("<td>" + str(row.getValue(fieldName)) + "</td>\n")
    outfile.write("</tr>\n")

    row = cur.Next()

del cur

outfile.write("</table>\n")

outfile.flush()
outfile.close()

7/10/2012