Spatial Analyst でのマップ代数演算

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

マップ代数計算では、代数演算を使用して Spatial Analyst のツール、演算子、関数、クラスにアクセスすることができます。 最も基本的な形式では、出力ラスターを等号 (=) の左側に指定し、ツール、演算子、およびツールのパラメーターを右側に指定します。 以下の例をご参照ください。

from arcpy.sa import *
outShade = Hillshade("inelevation.tif", 99, 33)

上のステートメントは陰影起伏を計算するもので、太陽によるイルミネーションを方位 99 度と高度 33 度で決定し、outShade という Raster オブジェクトを作成して結果を保存します。

マップ代数演算ではシンプルなステートメントも実行できますが、この言語の力は複雑なステートメントやモデルの作成時に発揮されます。 マップ代数演算は Python に統合されているため、モデラーは Python および ArcPy のすべての機能とそのエクステンション (モジュール、クラス、関数、プロパティ) を使用することができます。

必要性が高まるにつれ、マップ代数演算の多くの側面を探求できます。 次のクイック ツアーでは、使用を開始するための基本事項を説明します。

マップ代数演算実行の基本

マップ代数演算を使用するには、次の 3 つの方法があります。

  • [ラスター演算 (Raster Calculator)] ツール
  • [Python] ウィンドウ
  • Python 統合開発環境 (IDE)

ラスター演算

[ラスター演算 (Raster Calculator)] ツールは、マップ代数演算の式を実行します。 このツールには演算インターフェイスがあり、ボタンをクリックするだけで、ほとんどのマップ代数演算のステートメントを作成できます。 [ラスター演算 (Raster Calculator)] はスタンドアロン ツールとして使用できますが、ModelBuilder 内でも使用できます。 その結果、このツールを使用して、マップ代数演算を ModelBuilder に統合できるようになります。

ラスター演算のユーザー インターフェイス
ラスター演算のユーザー インターフェイスを示します。

上の式では、2 番目と 3 番目のラスターが乗算され、その結果が 1 番目に加算されて、3 つのラスターが演算されます。 演算子は、定義された優先順位に従って処理されます。

[ラスター演算 (Raster Calculator)] ツールは、他の Spatial Analyst ツールを置き換えるものではありません。 適切な演算に対しては他のツールの使用を継続してください。 たとえば、傾斜角の計算を行うには、[傾斜角 (Slope)] ツールを使用します。 [ラスター演算 (Raster Calculator)] ツールは、1 行の代数演算ステートメントを実行するように設計されています。

[ラスター演算 (Raster Calculator)] は、すべてのツールと同様にジオプロセシング ツールであるため、ModelBuilder に統合することができます。 詳細については、以下のトピックをご参照ください。

Python ウィンドウ

[Python] ウィンドウでは、ArcGIS Pro 内でジオプロセシング ツールと Python の機能を使用できます。 このウィンドウから実行する Python の機能は、単一行テキストから複数行のコード ブロックまで広範囲にわたります。 [Python] ウィンドウでは、サードパーティ製の Python モジュールやライブラリを使用して追加の機能にもアクセスできます。

[Python] ウィンドウを起動するには、[解析] タブで [Python] ドロップダウン メニューをクリックし、[Python] ウィンドウ ボタン Python ウィンドウを表示 を選択します。 あるいは、[表示] タブの [ウィンドウ] グループで [Python] ウィンドウをクリックします。

Python ウィンドウの例

上の一連のステートメントでは、ArcPy サイト パッケージ、ジオプロセシング環境、Spatial Analyst モジュールがインポートされ、ワークスペースが設定され、[傾斜角 (Slope)] ツールが実行され、出力が実ファイルとして保存されます。 ステートメントの最後で Enter キーを押すと、そのステートメントが即座に実行されます。

Python ウィンドウの機能には、あらかじめ組み込まれた行のオート コンプリート、変数の使用、Python および ArcPy の機能へのアクセスなどがあります。

Python 統合開発環境

[Python] ウィンドウで入力できるステートメントの数に制限はありませんが、さらに複雑なモデルを作成するには扱いにくくなる可能性があります。 Spatial Analyst モジュールのツール、演算子、関数、クラスは、任意の IDE (統合開発環境) からアクセスすることもできます。 自分の好きな IDE を起動して、希望するステートメントを入力してください。

次のスクリプトでは、ArcPy、ジオプロセシング環境、Spatial Analyst モジュールがインポートされ、変数が設定され、エクステンションがチェックアウトされ、[傾斜角 (Slope)] ツールが実行され、出力が保存されます。

# Name: Slope
# Description: Identifies the rate of maximum change
#               in z-value from each cell.
# Requirements: Spatial Analyst Extension


# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *

# Set environment settings
env.workspace = "C:/data"

# Set local variables
inRaster = "elevation"
outMeasurement = "DEGREE"
zFactor = 0.3043

# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")

# Run Slope
outSlope = Slope(inRaster, outMeasurement, zFactor)

# Save the output
outSlope.save("C:/output/outslope02")

[Python] ウィンドウの場合と同様に、IDE では利用可能なすべての Python および ArcPy の機能へのアクセスが提供されます。

ツールの操作

ラスターを出力するすべての Spatial Analyst ツールは、代数演算形式で使用できます。 データセット名は、[コンテンツ] ウィンドウまたは現在のワークスペースでは使用できますが、それ以外の場合は絶対パスを入力する必要があります。

# In the following statement, indem is either  
#   in the TOC or in the current workspace
outRas = Aspect("indem")

# In the following statement the full path is specified
outRas2 = Aspect("C:/Data/indem2.tif")

1 つのステートメントからの出力を、その後のステートメントに入力することができます。

outRas = Select("inras.tif", "Value > 105")

# outRas is variable defined by the previous statement and is not quoted
outdist = EucDistance(outRas)

演算子の操作

マップ代数演算では、一連の演算子 (+、-、* など) がサポートされます。 これらの同じ演算子は Python 内にも存在しますが、マップ代数演算で Raster オブジェクトを別の方法で扱うために変更されています。 たとえば、次の例は 2 つの数値を合計して 1 つの変数にします。

# set outVar to 14 using the Python + operator
outVar = 5 + 9

ステートメントがラスターに対して機能する (つまり、Spatial Analyst の演算子を使用する) 必要があることを区別するには、データセットを Raster としてキャストする必要があります。 次の例では、Spatial Analyst+ 演算子を使用して、2 つのラスターを合計します。

outRas = Raster("inras1.tif") + Raster("inras2.tif")

演算子はラスターと数値の混在に対応します。 たとえば、次の例では 8 という一定の値が入力ラスター内のすべてのセルに加算されます。

outRas = Raster("inras1.tif") + 8

複雑な式の作成

ツールと演算子は、1 つのステートメント内で 1 つにつなぐことができます。 次の例では複数のツールと演算子がそれぞれの式で実行されます。

outRas = Slope("indem" * 2) / 57
outdist = EucDistance(ExtractByAttributes("inras", "Value > 105"))

括弧を使用して、処理の順序を制御することができます。 次の 2 つの例を考えてください。どちらも同じ演算子が使われていますが、括弧が使われているために結果が異なっています。

outRas1 = (Raster("inras1") + Raster("inras2")) / Raster("inras3")

および

outRas2 = Raster("inras1") + Raster("inras2") / Raster("inras3")

1 つ目のステートメントでは、inras1inras2 に加算され、その結果が inras3 で除算されています。 2 つ目のステートメントのように括弧がない場合は、inras2inras3 によって除算され、その結果が inras1 に加算されます。

複数のブール演算子 (~&^|) または関係演算子 (<<=>>===!=) を 1 つの式の中で連続して使用するときは、括弧を使う必要があります。 たとえば、(a>2) & (a<5) という式の中では括弧が必要です。 この式で括弧を使わなければ (a>2 & a<5) エラーになります。 次の式は、括弧が使われているため実行されます。

outRas = (Raster("a") > 2) & (Raster("a") < 5)
詳細:

単に括弧を必要としない式もありますが、その代わりに書き直した方がよいものもあります。 たとえば、a < b < c という形式の式は実行されず、括弧を追加すると式の意味が変わります。 したがって、この式を正常に実行するには、(a < b) & (b < c) という形に書き直す必要があります。

クラスの使用

クラスは、複数の引数があるパラメーターを対象に、マップ代数演算の各ツールで使用します。 入力パラメーターにクラスを使用すると、パラメーターの個々の引数にアクセスして引数の検索と変更、追加などを実行できます。 クラスの使用を示す例は次のとおりです。

outRas = FocalStatistics("inRaster", NbrCircle(5, "CELL"), "SUM")

上のステートメントでは、合計は円形に取り巻く近傍の 5 つのセルのセルごとに計算されます。 NbrCircle は、NbrCircle オブジェクトを作成するクラスです。

リマップ テーブル クラスの例を次に示します。 リマップ クラスには任意の数の値を入力することができます。

outReclass = Reclassify("inRaster", "VALUE", RemapRange([[0, 1], [3, 10], [4, 8]]))

上のステートメントでは、RemapRange クラスを使用して、入力値の再分類を定義しています。 inRaster の値 0 のセルは outReclass の 1 に割り当てられ、3 は 10 に、4 は 8 に割り当てられます。

フィーチャ、テーブル、ファイルを出力するマップ代数演算関数

ラスターを出力として生成する Spatial Analyst ツールだけが、代数演算形式を使用して実装されています。 ラスター以外の出力 (フィーチャ、テーブル、テキスト ファイルなど) を生成する Spatial Analyst ツールの場合、出力はツール内のパラメーターとして括弧内に指定されます。 等高線を出力ポリライン フィーチャ データセットとして作成する次の例の構文に注意してください。

indem = "C:/Data/indem"
contourInterval = 100
Contour(indem, "C:/output/outcontours", contourInterval)

マップ代数演算ステートメントを実行する際の推奨事項

以下に示したすべてのマップ代数演算の例では、出力が Raster オブジェクトになっています。 Raster オブジェクトはテンポラリ ラスター データセットをポイントします。このデータセットは明示的に保存しない限り、ArcGIS セッションの終了時に削除されます。 このテンポラリ データセットを実ファイルとして保存するには、Raster オブジェクトで save メソッドを呼び出します (以下の 2 例を参照)。

マップ代数演算ツールや演算子を実装する前に、適切な解析環境、特に現在のワークスペース範囲セル サイズセル サイズの投影変換方法マスク、およびスナップを設定しておくことをお勧めします。

ワークスペース環境を示す例は次のとおりです。

import arcpy 
from arcpy import env 
from arcpy.sa import *

env.workspace = "C:/sapyexamples/data" 

outHillshade = Hillshade("elevation", 180, 75, "SHADOWS", 1)

outHillshade.save("outhillshd01")

上のステートメントではワークスペースが設定されます。したがって、outhillshd01C:/sapyexamples/data に保存されます。

マップ代数演算ツールへのすべての複雑な入力で変数にクラスを設定し、ステートメントではその変数を使用することをお勧めします。 次のステートメントでは、RemapRange クラス オブジェクトが変数 myRemapRange に設定され、[再分類 (Reclassify)] ツールへの入力として使用されます。

import arcpy 
from arcpy import env
from arcpy.sa import *

env.workspace = "C:/sapyexamples/data" 
myRemapRange = RemapRange([[-3, 0, 0], [0, 1.75, 25], [1.75, 3.5, 50], 
                           [3.5, 5.25, 75], [5.25, 7, 100]]) 

outReclassRR = Reclassify("inreclass", "VALUE", myRemapRange)

outReclassRR.save("rclassremran")

参考トピック

ArcPy をさらに深く理解するには、以下のトピックをご参照ください。

Python でのジオプロセシングの詳細については、以下のトピックが役に立ちます。

関連トピック