反復処理におけるイテレータの使用の概要(ループ)
反復処理はループとも呼ばれ、プロセスをある程度の自動化を利用して繰り返すことを意味します。タスクの反復を自動化することで、タスクの実行に必要な時間と作業量が削減されるため、反復処理は非常に重要です。ModelBuilder の反復処理では、反復ごとに異なる設定または異なるデータを使用して、プロセスを繰り返し実行できます。ModelBuilder の反復処理には柔軟性もあり、モデル全体または単一のツールまたはプロセスを繰り返し実行できます。
イテレータ |
説明 |
---|---|
開始値から終了値までの間を、指定した間隔で反復処理します。これは、スクリプトまたはプログラム言語で使用される For と同じ機能を果たし、指定されたアイテム数だけ実行されます。 |
|
他のスクリプト言語またはプログラミング言語の「while」と同様に機能し、入力または入力セットで条件が true または false の間、反復処理を行います。 |
|
フィーチャクラス内のフィーチャを反復処理します。 |
|
テーブルの行を反復処理します。 |
|
フィールド内の各値を反復処理します。 |
|
値のリストを反復処理します。 |
|
ワークスペースまたはフィーチャ データセット内のデータセットを反復処理します。 |
|
ワークスペースまたはフィーチャ データセット内のフィーチャクラスを反復処理します。 |
|
フォルダ内のファイルを反復処理します。 |
|
ワークスペースまたはラスタ カタログ内のラスタを反復処理します。 |
|
ワークスペース内のテーブルを反復処理します。 |
|
フォルダ内のワークスペースを反復処理します。 |
イテレータについて
各イテレータが使用するパラメータのセットはそれぞれ異なりますが、すべてのイテレータ ツールの全体的な構造はよく似ています。よく使用されるイテレータとして、[フィーチャクラスの反復(Iterate Feature Classes)] について以下で説明します。
[フィーチャクラスの反復(Iterate Feature Classes)] には、反復処理するすべてのフィーチャクラスを格納する [入力ワークスペース] が必要です。[ワイルドカード] と [フィーチャ タイプ] の 2 つの追加パラメータを使用すると、反復処理するワークスペース内のフィーチャクラスが制限されます。
- [ワイルドカード] は、名前によりフィーチャクラスを制限します。
- [フィーチャ タイプ] は、フィーチャのタイプ(アノテーション、アーク、ディメンション、エッジ、ジャンクション、ラベル、ライン、ノード、ポイント、ポリゴン、リージョン、ルート、またはティック)によりフィーチャクラスを制限します。
[再帰] パラメータを使用すると、ワークスペース内のサブフォルダにあるフィーチャクラスの反復処理を制御できます。
[フィーチャクラスの反復(Iterate Feature Classes)] には、出力フィーチャクラスとフィーチャクラスの名前の 2 つの出力変数があります。出力フィーチャクラスは、次のツールに接続して処理できます。また、「名前」変数は、インライン変数置換で使用できます。たとえば、[バッファ(Buffer)] ツールをモデルに追加して、「フィーチャクラス」変数をツールに接続した場合は、ワークスペースのすべてのフィーチャクラスがバッファ処理されます。
イテレータの入力と出力
次の表に、イテレータの一覧と、それぞれの入力および出力を示します。ほとんどのイテレータに、2 つ目の出力として「値」または「名前」があります。これは、インライン変数置換で使用できます。
イテレータ |
入力 |
出力 1 |
出力 2 |
---|---|---|---|
値 |
値 |
- |
|
値 |
Boolean 値(True または False) |
- |
|
フィーチャ |
フィーチャ |
値 |
|
テーブル |
レコード |
値 |
|
テーブル |
フィールド値 |
- |
|
値 |
値 |
- |
|
ワークスペースまたはフィーチャ データセット |
データセット |
名前 |
|
ワークスペースまたはフィーチャ データセット |
フィーチャクラス |
名前 |
|
フォルダ |
ファイル |
名前 |
|
ワークスペースまたはラスタ カタログ |
ラスタ データセット |
名前 |
|
ワークスペース |
テーブル |
名前 |
|
フォルダ |
ワークスペース |
名前 |
- 1 つのモデルに対して、イテレータを 1 つだけ使用できます。モデルにイテレータが存在している場合、別のイテレータを追加するオプションは無効になります。
- イテレータをモデルに追加すると、モデル内のすべてのツールがイテレータの各値に対して反復処理されます。各反復値に対してモデル内の各ツールを実行したくない場合は、イテレータだけを含むサブモデル(モデル内のモデル、またはネストされたモデル)を作成し、メイン モデルにモデル ツールとして追加します。
- イテレータを含むモデルを Python スクリプトにエクスポートすると、スクリプトには反復処理の論理が含まれなくなります。Python のリストの論理をスクリプトに追加して、同様の処理を実行できます。
- イテレータを使用すると、[モデル プロパティ] の [反復処理] にデフォルト値の -1 が設定されます。これは、回数を制限せずにモデルを実行するか、設定された回数ではなくイテレータの入力の数に基づいてモデルを実行することを意味します。
- イテレータに接続されたツールの出力には、次の方法で反復処理ごとに一意の名前を付け、上書きされるのを避けることができます。
- システム変数 %n% を使用します(たとえば、「C:\Sctatch\scratch.gdb\output_%n%」)。
- モデルで使用されているイテレータの [名前] または [値] の出力をインライン変数として使用します(たとえば、「C:\Sctatch\scratch.gdb\output_%Name%」や「C:\Sctatch\scratch.gdb\output_%Value%」)。
- モデル内のその他の変数をインライン変数として使用します(たとえば、XYZ という変数がある場合は、出力の名前を「C:\Scratch\scratch.gdb\output_%XYZ%」のように使用できます)。この変数では、定数値を使用しないでください。
- [マップへ追加] オプションをオンにした場合、ツールの出力は変数名を使用して ArcMap の表示に追加されます。すべての反復処理の出力を、変数名の代わりに一意の出力名を使用して ArcMap の表示に追加する場合は、表示する出力を [値の収集(Collect Value)] ツールに接続し、[値の収集(Collect Value)] を右クリックして [マップへ追加] オプションをオンにします。モデル ツールのダイアログ ボックスからモデルを実行する場合は、出力モデル パラメータだけが表示に追加されるため、[値の収集(Collect Value)] ツールの出力をモデル パラメータにします。
イテレータは、ArcGIS 10 より前のバージョンで提供されていた [モデル プロパティ] 内の一連のオプションに置き換わるものです。