複雑なステートメントの構築
マップ代数演算の最も強力な側面の 1 つは、単一のステートメント内に複数の演算子やツールを構成したステートメントを作成できることです。1 つのステートメントに複数の演算子やツールを入力できるため、複雑な処理のモデリングが容易になり、全体的な処理時間を短縮できます。複雑な式は、ArcGIS Spatial Analyst エクステンションのツールが提供する機能に制限されません。他のツールボックスのツールも含めることができます。複雑なステートメントの構築では、正しく実行する必要がある特定の処理ルールがあります。
複雑なステートメントのルール
- 複雑なステートメントでは、等号の左側にある出力だけが Raster オブジェクトになります。
- 式の実行順序は、括弧および使用する演算子の優先度によって決まります。演算子の優先順位に関する詳細については、「演算子の優先順位のテーブル」をご参照ください。
outRaster = Raster("inras1") + Raster("inras2") / Raster("inras3")
-
上のステートメントでは、inras2 が inras3 で除算され、その結果が inras1 に加算されます。
- 実行順序の制御には括弧を使用できます。括弧はネストすることができます。この場合は、演算子の優先順位にかかわらず、最も内側にある括弧内の式が最初に処理されます。
outRas = Raster("inras1") / (Raster("inras2") + Raster("inras3"))
上のステートメントでは、inras1 が inras2 と inras3 の合計で除算されます。
- 複数のブール演算子(~、&、^、|)や関係演算子(<、<=、>、>=、==、!=)を 1 つの式の中で連続して使用するときは、括弧を使う必要があります。たとえば、(a>2) & (a<5) という式には括弧が必要です。
outRas = (Raster("a") > 2 ) & ( Raster("a") < 5)
詳細:括弧は必要としなくても、書き直す必要がある式もあります。たとえば、a < b < c という形の式は実行されず、括弧を追加すると式の意味が変わります。したがって、この式を正常に実行するには、(a < b) & (b < c) という形に書き直す必要があります。
- 演算子、変数、数字、ツールのすべてを複雑なステートメントで使用することができます。
outRas = Sin("inras1") + Raster("inras2") + 8
const = 10 outRas = Raster("inras1") + 2 * const
- 演算子を使って作成されたステートメントの括弧に適用されるすべてのルールは、ツールと演算子を使って作成されたステートメントの括弧にも適用されます。最も深くネストされた括弧内のツールまたは演算子が最初に処理されます。
num = 10 outRas = (ZonalStatistics((Raster("inras2") + Raster("inras3")), "Value", "valueras", "MAXIMUM") - num ) / 8
上のステートメントでは、inras2 と inras3 の合計が [ゾーン統計(Zonal Statistics)] ツールの入力として使用されています。num の値が減算されてから、除算されます。
- 連続する複数のステートメントでは、前のステートメントの出力を、後に続くステートメントの入力として使用できます。
outAdd = Raster("inras1") + Raster("inras2") outRas = FocalStatistics(outAdd, NbrCircle(5, "Map"), "MEAN")
上の例の outAdd は、inras1 と inras2 の加算から作成される Raster オブジェクトです。outAdd は変数になるため、後に続く [フォーカル統計(Focal Statistics)] ツールへの入力として使用するときに引用符は不要です。
- 結果がラスタであるか、フィーチャクラスであるかにかかわらず、任意のツールを別のツールに組み込むことができます。組み込まれたツールからの必須出力が、外側のツールの入力として使用されます。この例では、[コンター リスト(Contour List)] ツールからの出力が [ユークリッド距離(Euclidean Distance)] ツールへの入力として使用されます。
outdistance = EucDistance(ContourList("elevation", "#", [1500]))
上の例では、[解析] ツールボックスの [選択(Select)] ツールの出力が、[ユークリッド距離(Euclidean Distance)] ツールの入力として使用されています。dist = EucDistance(arcpy.Select_analysis("schools", "#", "Pop>2000"))
注意:組み込まれているツールは、大規模なワークフローの中間段階の出力を作成するだけなので、出力引数をハッシュ記号「#」で置換することができます。これにより、ツールは、この一時出力の一意のパスと名前を作成することができます。ハッシュ記号の使用の詳細は、「Python でのツールの使用」ヘルプ トピックの「ツールの出力」で説明されています。
- 式に含まれるツールからのオプション出力を使用するには、データセット名またはデータセットを表現する変数を使用する必要があります。上の例では、オプションの出力バック リンク ラスタが、ワークスペースに「out_bklink」という名前で出力されます。
costDist = CostDistance("source", "in_cost", 15000, "out_bklink") costOut = CostPath("dest", costDist, "out_bklink")
上の例では、ツールが実行される前に、バック リンク ラスタが変数で定義されます。この変数は、出力バック リンク ラスタが持つことになる場所と名前をポイントします。bklink = "C:/results/out_bklink" costDist = CostDistance("source", "in_cost", 15000, bklink) costOut = CostPath("dest", costDist, bklink)