Skip to main content

ジオプロセシング出力をメモリーに書き込み

ジオプロセシング出力をメモリーに書き込む処理は、出力をジオデータベースまたはファイルベースの形式に書き込む処理の代替手段となります。 ほとんどの場合、この処理は、ディスク上の形式に書き込む処理よりも、はるかに迅速に行われます。 メモリーに書き込まれたデータは一時的なものであり、アプリケーションを閉じると削除されます。 メモリー ワークスペースは、ModelBuilder のモデルまたは Python スクリプトの中間データの書き込みに最適な場所です。

メモリーベースのワークスペース

ArcGIS には、ジオプロセシング出力の書き込みができる 2 種類のメモリーベースのワークスペースが用意されており、以下で説明します。

メモリー ワークスペース

memory ワークスペースは、出力フィーチャクラス、テーブル、およびラスター データセットに対応しています。

memory ワークスペースに書き込むには、次のいずれかを実行します:

  • ツール出力パラメーターの横にある メモリー ワークスペース ボタン をクリックして、メモリー ワークスペース パスを作成します。

  • memory\ で始まる出力データセット パスを指定します。

出力名にファイル拡張子を含めないでください。 たとえば、出力を memory\tempOutput と指定します。

memory データセットを ArcGIS Pro 内のマップに追加することができます。

in_memory ワークスペース

レガシー:

in_memory ワークスペースは、ArcMap 向けに構築された旧式のメモリーベースのワークスペースであり、出力フィーチャクラス、テーブル、およびラスター データセットに対応しています。

in_memory ワークスペースに書き込むには、in_memory\ で始まりファイル拡張子がない出力データセット パスを指定します (例: in_memory\tempOutput)。

ジオプロセシング ツールでは、in_memory 出力を直接マップに追加することはできません。 in_memory 出力を作成すると、ツールでプロジェクト ジオデータベースにコピーが作成されます。 次に、この出力はプロジェクト ジオデータベースからマップに追加されます。 メモリーベースのデータをマップ上に直接表示する場合は、代わりに memory ワークスペースを使用します。

次の条件の場合、ジオプロセシング ツールは、in_memory 出力をプロジェクト ジオデータベースにコピーしません。

  • in_memory 出力は、Python や ModelBuilder ワークフローなどでの中間出力です。

  • 開いているマップに出力データセットを追加 ジオプロセシング オプションがオフになっているか、マップへ追加 オプションが ModelBuilder で選択されていない場合、出力は開いているマップに追加されません。

    memory ワークスペースとは異なり、in_memory ワークスペースはサブタイプやドメインをサポートしていません。

メモリー ワークスペースの管理

memory ワークスペースのデータは、ジオプロセシング ツールでのみ管理でき、カタログ ウィンドウやカタログ ビューには表示されません。 マップのどのレイヤーにメモリー データ ソースがあるかを調べるには、コンテンツ ウィンドウで データ ソース別にリスト ボタン データ ソース別にリスト をクリックします。メモリー データ ソースは Memory ワークスペースの下に一覧表示されます。

memory ワークスペース内のデータセットのリストは、ArcPy リスト関数でも取得できます。 次に例を示します。

# Set the workspace and list the data saved to memory
arcpy.env.workspace = "memory"
print(f"Memory Feature Classes: {arcpy.ListFeatureClasses()}")
print(f"Memory Rasters: {arcpy.ListRasters()}")
print(f"Memory Tables: {arcpy.ListTables()}")

メモリーベースのワークスペースを使用する場合は、すべての中間データをできるだけ早く削除して、システム メモリ リソースを解放します。 削除 ツールを使用すると、メモリーベースのワークスペース内にあるデータを削除できます。 データセットを個別に削除することも、ワークスペース全体を削除してワークスペースの内容を消去することもできます。

Python でのメモリー ワークスペースの使用

Python でのメモリーベースのワークスペースの使用は、ジオプロセシング ツールにのみ有効です。 メモリーは、ファイルやその他のデータを書き込める汎用の仮想ディレクトリーではありません。

次のサンプル コードで示すように memory ワークスペースを使用します:

import arcpy
# Set the geoprocessing workspace
arcpy.env.workspace = r"C:\Data\Habitat.gdb"
# Buffer a Roads layer, writing output to memory
arcpy.analysis.Buffer("Roads", r"memory\Buffers", 1000)
# Erase the buffers from a Vegetation layer
arcpy.analysis.Erase("Vegetation", r"memory\Buffers", r"memory\Erased")
# Dissolve the memory output of Erase to make a final output in the gdb workspace
arcpy.management.Dissolve(r"memory\Erased", "FinalOutput")
# Delete any intermediate datasets from memory
arcpy.management.Delete(r"memory\Erased")
arcpy.management.Delete(r"memory\Buffers")

制限事項

メモリーベースのワークスペースには次の制限があります。

  • メモリーベースのワークスペースは、フィーチャ データセット、リレーションシップ クラス、属性ルール、条件値、フィールド グループ、空間インデックスと属性インデックス、リプレゼンテーション、トポロジー、ユーティリティー ネットワーク、トレース ネットワーク、ネットワーク データセットなどのジオデータベース エレメントをサポートしていません。

  • [コピー ツールでは、メモリーベースのワークスペース内のデータセットを入力または出力として使用できません。 メモリー ワークスペース内のデータセットをコピーするには、フィーチャのコピー または フィーチャのエクスポート ツールを使用します。

  • テーブルの切詰め ツールでは、メモリーベースのワークスペース内のデータを入力として使用できません。

  • メモリーベースのワークスペースは、システムの物理メモリ (RAM) に格納されるため、このワークスペースに大規模なデータセットを書き込むと、システム メモリが不足する可能性があります。 これにより、処理のパフォーマンスに悪影響が及ぶことがあります。

  • フォルダーをメモリーベースのワークスペース内に作成することはできません。

  • メモリーベースのワークスペースでは、フィールドの変更 などのツールを使用した属性フィールドやスキーマの変更のサポートが限られています。 フィールド エイリアスは変更できますが、フィールド名などのプロパティは変更できません。