ArcGIS Desktop

  • ドキュメント
  • サポート

  • My Profile
  • ヘルプ
  • Sign Out
ArcGIS Desktop

ArcGIS Online

組織のマッピング プラットフォーム

ArcGIS Desktop

完全なプロ仕様の GIS

ArcGIS Enterprise

エンタープライズ GIS

ArcGIS for Developers

位置情報利用アプリの開発ツール

ArcGIS Solutions

各種業界向けの無料のテンプレート マップおよびテンプレート アプリケーション

ArcGIS Marketplace

組織で使えるアプリとデータを取得

  • ドキュメント
  • サポート
Esri
  • サイン イン
user
  • マイ プロフィール
  • サイン アウト

ArcMap

  • ホーム
  • はじめに
  • マップ
  • 解析
  • データ管理
  • ツール
  • エクステンション

カスタム (モデルまたはスクリプト) ツールのバックグラウンド実行

  • 問題 1 - マップ ドキュメント レイヤーの使用
  • 問題 2 - スクリプト ツールでの現在のマップ ドキュメントの使用
  • ツールを実行するためのツール

ツールをバックグラウンドで実行することによって、そのツールを実行しながら、引き続きアプリケーション (例: ArcMap) を対話的に操作したり、他のタスクを実行したりすることが可能になります。

デフォルトでは、モデルまたはスクリプト ツールはフォアグラウンドで実行されます。ツールをバックグラウンドで実行したい場合は、後述の問題を解決する必要があります。モデルとスクリプトの問題が解決されたら、次の手順でツールをバックグラウンドで実行することができます。

  1. カタログ ウィンドウまたは ArcToolbox ウィンドウで、ツールを右クリックし、[プロパティ] をクリックします。[一般] タブで、[常にフォアグラウンドで実行] をオフにして、[OK] をクリックします。
  2. ArcMap メニューで、[ジオプロセシング] > [ジオプロセシング オプション] の順にクリックします。[バックグラウンド プロセス] パネルで [有効] をオンにします。

解決しなければならない問題としては、以下のものが挙げられます。

  1. マップ ドキュメント レイヤーの使用 - これは、モデルおよびスクリプト ツールの両方に起因する問題です。
  2. スクリプト ツールでの現在のマップ ドキュメントの使用 - これは、スクリプト ツールのみに起因する問題です。

問題 1 - マップ ドキュメント レイヤーの使用

モデルの例

モデル ツールをバックグラウンドで実行した場合、モデル パラメーターとして関与するレイヤーだけがバックグラウンド プロセスに利用可能になります。たとえば、次のモデルを使用して対象エリア、ベース コンター、およびコンター間隔を入力し、コンター フィーチャクラスを生成することができます。このモデルには、4 つのパラメーター (入力 3 つと、出力 1 つ) があります。[標高ラスター] 変数は ArcMap [コンテンツ] ウィンドウ内のレイヤーになりますが、モデル パラメーターとしては設定されません。このモデルをツール ダイアログ ボックスを使用して実行する際には、[埋立候補地 (Potential Landfill Site)] レイヤーを [対象地域] パラメーターとして入力します。ただし、[標高ラスター] レイヤーはパラメーターでないため、入力不要です。

モデル内でのレイヤーの使用

上のモデルは期待どおりフォアグラウンドで実行されます。ただし、このモデルがバックグラウンドで実行するように設定されている場合、モデルは実行に失敗し、「実行できる処理がありません。」という警告が表示されます (次の図を参照)。モデルが実行に失敗した原因は、バックグラウンドで実行中のプロセスがツール パラメーター以外のレイヤーを使用できないためです。この例で、[標高ラスター] モデル変数はパラメーターではないことからバックグラウンド プロセスに検出されないため、実行に失敗して警告が表示されます。

バックグラウンドでレイヤーを使用したモデルに関する警告メッセージ

解決策

モデルをバックグラウンドで実行されるように変更するには、いくつかの方法があります。

  • レイヤー変数をモデル パラメーターにする方法。そうすることによって、レイヤーがバックグラウンド プロセスに渡され、ツールがバックグラウンドで実行されるようになります。これは最も簡単な解決策です。
  • レイヤーを使用するかわりに、ディスク上のデータセットを使用する方法。この例では、Extract by Mask ツールをダブルクリックし、([標高ラスター] 変数で表される)[入力ラスター] パラメーターを変更して、[コンテンツ] ウィンドウからのレイヤーでなくラスター データセットを使用します。この解決策の唯一の問題は、レイヤーは選択が可能であるのに対して、ディスク上のデータセットはそうではないことです。レイヤーの選択が必要なためにレイヤー変数を使用した場合は、ディスク上のデータセットを使用できません。このような場合の代替方法には (変数をモデル パラメーターにする方法以外に)、次の 2 通りの方法があります。
    • モデル内で、[フィーチャ レイヤーの作成 (Make Feature Layer)] ツールを追加し、データセット変数からレイヤー変数を作成して、レイヤー変数を次のモデル プロセスへの入力として使用する方法。([フィーチャ レイヤーの作成 (Make Feature Layer)] ツールを使用して、選択式を入力することができます。)
    • レイヤー ファイル (*.lyr) を作成し、その *.lyr ファイルをモデル内で使用する方法。つまり、上のモデル内で [標高ラスター] 変数の参照先となるのは、*.lyr ファイルです。*.lyr ファイルを作成するには、[レイヤー ファイルの保存 (Save To Layer File)] ツールを使用します。
注意:

入力レイヤーのモデル パラメーターを設定したうえで、モデルで作成または更新された他のすべてのレイヤーをモデル パラメーターとして設定することも必要です。

スクリプト ツールの例

スクリプト ツールでは、レイヤーを入力として使用したときにモデル ツールと同じ問題が生じます。各レイヤーは、パラメーターとしても渡される必要があります。また、適切なジオプロセシング データ タイプを使用していなければなりません。スクリプト ツールには柔軟性があり、別の対処法が用意されています。たとえば、スクリプト ツールは、[コンテンツ] ウィンドウ内のレイヤー名に一致する文字列データ タイプを使用すると、レイヤーとは異なる振舞いをすることができます。この方法はフォアグラウンドでは機能しても、バックグラウンドでは機能しません。理由は、マップ レイヤー参照からバックグラウンド プロセスへの接続が存在しないためです。次の図は、文字列として渡されるパラメーター レイヤーと、レイヤーを入力として使用するように変更されたスクリプト プロパティを示しています。スクリプト ツール パラメーターのデータ タイプの変更

解決策

スクリプト ツール パラメーターが適切なデータ タイプ (たとえば、フィーチャ レイヤー、ラスター レイヤー、テーブル ビュー) を使用しているか確認します。

スクリプト ツールに使用されているレイヤーがパラメーターでない場合は、次の操作が必要です。

  • レイヤー変数をモデル パラメーターに設定します。
  • レイヤーを使用するかわりに、ディスク上のデータセット、またはディスク上の *.lyr ファイルを使用します。

問題 2 - スクリプト ツールでの現在のマップ ドキュメントの使用

現在のマップ ドキュメントに対する操作を実行するスクリプト ツールは、フォアグラウンドで実行する必要があります。MapDocument クラスは、スクリプト ツールを使用して現在のマップ ドキュメントを利用するための強力な手段です。たとえば、スクリプトを介して、選択したフィーチャに自動的にズームすることが可能です。次のスクリプトを実行すると、「Object: CreateObject はマップ ドキュメントを開けません」というエラーが発生します。

サンプル スクリプトはフィーチャを選択し、ArcPy Mapping を使用してそのフィーチャにズームします。

import arcpy

idvalue = arcpy.GetParameterAsText(0)

mxd = arcpy.mapping.MapDocument("CURRENT")

arcpy.SelectLayerByAttribute_management(
    "Parcels", "NEW_SELECTION", '"ID" = ' + idvalue)
df = arcpy.mapping.ListDataFrames(mxd)[0]
df.zoomToSelectedFeatures()
MapDocument クラス内の CURRENT の操作の詳細

解決策:

現在のマップ ドキュメントを使用するスクリプト ツールは、常にフォアグラウンドで実行する必要があります。カタログ ウィンドウでスクリプト ツールを右クリックし、[プロパティ] をクリックします。[一般] タブで、[常にフォアグラウンドで実行] をオンにします。

ツールを実行するためのツール

先に述べたような、現在のマップ ドキュメントを使用するスクリプト ツールがあるとします。このツールは常にフォアグラウンドで実行する必要があります。このスクリプト ツールをモデル ツール内で使用している場合に、モデル ツールをバックグラウンドで実行すると、どのようなことが起こるでしょうか?その答えは、モデルによってフォアグラウンドで実行する必要のあるモデル内のツールが検出されるということです。フォアグラウンドで実行する必要のあるツールは、モデルによって自動的にフォアグラウンドで実行されます。

注意:

モデルをバックグラウンドで実行しようとしたときに、[常にフォアグラウンドで実行] がオンになっていると、無効化されて実行できません。その場合、使用しているモデル ツールまたはスクリプト ツールのプロパティを調べ、それらのツールの [常にフォアグラウンドで実行] がオフになっていることを確認してください。

ArcGIS Desktop

  • ホーム
  • ドキュメント
  • サポート

ArcGIS プラットフォーム

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Esri について

  • 会社概要
  • 採用情報
  • スタッフ ブログ
  • ユーザ カンファレンス
  • デベロッパ サミット
Esri
ご意見・ご感想をお寄せください。
Copyright © 2018 Esri. | プライバシー | リーガル