複雑なステートメントの構築

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. 複雑なステートメントのルール