複雑なステートメント

Spatial Analyst のライセンスで利用可能。

Image Analyst ライセンスで利用できます。

マップ代数演算では、複数の演算子とツールから成るステートメントを、1 つのステートメントで作成できます。 1 つのステートメントに複数の演算子とツールを入力できることにより、複雑な操作をより効率的にモデル化できるようになるので、全体的な処理時間を短縮できます。 複雑な式は、ArcGIS Spatial Analyst エクステンションのツールが提供する機能に制限されません。他のツールボックスのツールも含めることができます。 複雑なステートメントを構築する際、正しく実行するためには、特定の操作ルールが必要となることがあります。

複雑なステートメントのルール

有効な複雑なステートメントを作成する際のガイドとして、次のリストに示すルールを使用してください。

  • 複雑なステートメントでは、等号の左側にある出力だけが Raster オブジェクトになります。
  • 式を実行する順序は、括弧と、使用される演算子の優先順位によって決定されます。 演算子の優先順位に関する詳細については、「演算子の優先順位のテーブル」をご参照ください。
    outRaster = Raster("inras1") + Raster("inras2") / Raster("inras3")
  • 上のステートメントでは、inras2inras3 で除算され、その結果が inras1 に加算されます。

    注意:

    演算子の優先順位を知っておくことは重要です。 たとえば、ブール演算子 (~&^|) は、関係演算子 (<<=>>===!=) より優先順位が高くなります。これは、式の作成に影響します。 演算子の優先順位に関する詳細については、「演算子の優先順位のテーブル」をご参照ください。

  • 実行の順序は、括弧を使用して制御できます。 括弧を入れ子にすると、演算子の優先順位にかかわらず、最も内側にある括弧が最初に処理されます。
    outRas = Raster("inras1") / (Raster("inras2") + Raster("inras3"))

    上のステートメントでは、inras1inras2inras3 の合計で除算されます。

  • 複数のブール演算子 (~&^|) または関係演算子 (<<=>>===!=) を 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

    上のステートメントでは、inras2inras3 の合計が [ゾーン統計 (Zonal Statistics)] ツールの入力として使用されています。 num の値が減算されてから、除算されます。

  • 一連のステートメントで、前のステートメントからの出力を、後続のステートメントへの入力として使用できます。
    outAdd = Raster("inras1") + Raster("inras2")
    outRas = FocalStatistics(outAdd, NbrCircle(5, "Map"), "MEAN")

    上の例の outAdd は、inras1inras2 の加算から作成される Raster オブジェクトです。 outAdd は変数になるため、後に続く [フォーカル統計 (Focal Statistics)] ツールへの入力として使用するときに引用符は不要です。

  • 結果がラスターであれフィーチャクラスであれ、どのツールも別のツールに組み込むことができます。 組み込みのツールから得られた必須の出力が、外側のツールの入力として使用されます。
    outdistance = EucDistance(ContourList("elevation", "#", [1500]))
    この例では、[コンター リスト (Contour List)] ツールの出力が、[ユークリッド距離 (Euclidean Distance)] ツールの入力として使用されています。
    dist = EucDistance(arcpy.Select_analysis("schools", "#", "Pop>2000"))
    上の例では、解析ツールボックスの [選択 (Select)] ツールの出力が、[ユークリッド距離 (Euclidean Distance)] ツールの入力として使用されています。
    注意:

    組み込まれているツールは、大規模なワークフローの中間段階の出力を作成するだけなので、出力引数をハッシュ記号「#」で置換することができます。これにより、ツールは、この一時出力の一意のパスと名前を作成することができます。 ハッシュ記号の使用の詳細は、「Python でのツールの使用」ヘルプ トピックの「ツールの出力」で説明されています。

  • 式のツールから得られた任意の出力を使用するには、データセットを表すデータセット名か変数を使用する必要があります。
    costDist = CostDistance("source", "in_cost", 15000, "out_bklink") 
    costOut = CostPath("dest", costDist, "out_bklink")
    上の例では、任意に出力されるバックリンク ラスターは、「out_bklink」という名前でワークスペースに出力されます。
    bklink = "C:/results/out_bklink"
    costDist = CostDistance("source", "in_cost", 15000, bklink) 
    costOut = CostPath("dest", costDist, bklink)
    上の例では、バックリンク ラスターは、ツールが実行される前に変数によって定義されます。 変数は、出力バックリンク ラスターの位置と名前をポイントします。

関連トピック


このトピックの内容
  1. 複雑なステートメントのルール