ArcGIS での Raster オブジェクトの相互作用
Raster オブジェクトはラスタ データセットを参照しArcMap で使用されている場合は、コンテンツ ウィンドウでラスタ レイヤと関連付けられていることもあります。ほとんどの場合、ラスタ データセット、Raster オブジェクト、およびラスタ レイヤ間の関係は維持されます。ただし、Spatial Analyst マップ代数演算を生産的に使用するには、これらの関係を理解しておく必要があります。
Raster オブジェクトは次の 2 つの方法で作成されます。
- Spatial Analyst マップ代数演算式の出力は、Raster オブジェクトです。Raster オブジェクトの最も重要な特徴の 1 つは、マップ代数演算式から一次出力として作成されたとき、テンポラリ ラスタを参照することです。
>>> outRas = Slope("elevation") >>> print outRas.isTemporary True
- ラスタ データセットを Raster オブジェクトとしてキャストできます。永続的なラスタ データセットをRaster オブジェクトとしてキャストした場合、データセットの永続性が維持されます。
>>> outRas = Raster("C:/Data/elevation") >>> print outRas.isTemporary False
状況によっては、Raster オブジェクトがラスタ レイヤに関連付けられる場合があります。Python ウィンドウで [ジオプロセシング処理結果をマップに追加] ジオプロセシング オプションをオンにすると、マップ代数演算式の結果がコンテンツ ウィンドウに追加され、Raster オブジェクトと同じ名前が付けられます。データセットをラスタとして割り当てた場合は、コンテンツ ウィンドウにレイヤが追加されません。
テンポラリ ラスタの保存
Raster オブジェクトに関連付けられているデータがテンポラリの場合、ArcGIS セッションの終了時(そのオブジェクトが範囲外になったとき、またはスクリプトが完了したとき)に削除されます。ただし、データが保存されている場合は例外です。ラスタを保存する際、レイヤとオブジェクトには、更新後のラスタ プロパティ(name、path、catalogPath、データセットの isTemporary ステータスなど)が反映されます。テンポラリ データセットを保存するにはいくつかの方法があります。
- 関連付けられている Raster オブジェクトを使用してテンポラリ ラスタ データセットを保存するには、Raster オブジェクトの save メソッドを使用します。
- マップ レイヤに関連付けられているテンポラリ データセットを保存するには、そのレイヤを右クリックして [データ] → [データとして保存] の順に選択し、出力場所と名前を指定します。
- マップ レイヤに関連付けられているテンポラリ ラスタ データセットを永続化するには、そのマップ ドキュメントを保存します。マップ ドキュメントを保存すると、ディスク上の現在の場所にラスタ データセットが保存され、名前が自動的に生成されます。
Raster オブジェクトの再使用
オブジェクト名は一意でなければなりません。オブジェクト名を再使用すると、元のオブジェクトが上書きされます。次の例では、最初に、Slope の結果が outRas に出力されます。その後、Aspect 式の出力先として outRas が再使用されているので、この時点で出力内容が上書きされます。
outRas = Slope("inRas1")
outRas = Aspect("inRas2")
レイヤは、Raster オブジェクトと同じ名前でコンテンツ ウィンドウに追加されます。Raster オブジェクト名を再使用すると、同じ名前を持つ複数のレイヤがコンテンツ ウィンドウに追加されます。前述の例では、outRas がコンテンツ ウィンドウに 2 回追加されます。最初は、Slope 式を実行したときです。この最初の outRas レイヤは Slope の結果を参照し、Aspect 式が実行されるまで Python ウィンドウで使用できます。Aspect を実行すると、2 番目の outRas レイヤがコンテンツ ウィンドウに追加されます。この時点でオブジェクトが上書きされ、Aspect によって生成されたデータセットとレイヤを参照するようになります。
データセットを参照する Raster オブジェクトが上書きされた場合、レイヤまたはデータセット名を使用して、そのラスタ データセットを Raster オブジェクトとして再キャストできます。
Raster オブジェクトの削除
Raster オブジェクトを削除した場合、関連付けられているデータセットにどのような影響を与えるかはデータの状態によって異なります。データがすでに保存されている場合、Raster オブジェクトを削除しても、関連付けられているデータセットやレイヤは何も影響を受けません。データセットがテンポラリの場合、Raster オブジェクトを削除したときの影響は、そのラスタ データセットを参照するレイヤが存在するかどうかによって異なります。テンポラリ データセットに関連付けられているレイヤが存在しない場合、オブジェクトを削除すると、そのデータセットも削除されます。テンポラリ データセットに関連付けられているレイヤが存在する場合、オブジェクトを削除しても、テンポラリ データは維持されます。
次の例では、outRas という名前の Raster オブジェクトが削除されます。
outRas = Slope("C:/Data/elevation")
del outRas
新しい Raster オブジェクトへの Raster オブジェクトの割り当て
Raster オブジェクトを新しい Raster へ割り当てた場合、関連するデータセットやレイヤはコピーされません。Raster オブジェクトを新しい Raster オブジェクトへ割り当てると、元のオブジェクトを参照するもう 1 つのオブジェクトが作成されます。次の例では、outRas1 と outRas2 の両方が同じラスタ データセットを参照します。
outRas1 = Slope("elevation")
# Assigns Raster object to a new Raster object and save the raster dataset
outRas2 = outRas1
outRas2.save("C:/output/outslope")
この例では、outRas1 と outRas2 の両方が同じデータセットを参照します。したがって、outRas2 を保存すると、保存したデータセット outslope の永続状態、新しい場所、および新しい名前が両方のオブジェクトに反映されます。コンテンツ ウィンドウのレイヤとして outRas1 が追加されており、レイヤ プロパティを使用するか、またはマップ ドキュメントを保存することによってこのデータを永続化した場合、outRas1 オブジェクトと outRas2 オブジェクトは両方とも保存済みのデータセットを参照します。