Python アドイン アプリケーション エクステンションの作成
アプリケーション エクステンションは、ArcGIS Desktop を補足する機能をさまざまな方法で提供できます。
- アプリケーション エクステンションは、多くの場合、類似タスクを実行する関連機能のセットをグループ化するために使用されます。たとえば、ArcMap のエクステンションには ArcGIS 3D Analystや Business Analyst エクステンションなどがあります。
- アプリケーション エクステンションは、通常、ホスト アプリケーションによって公開されるさまざまなイベントをリスニングし、これらに応答します。たとえば、レイヤーが追加または削除されるとイベントがトリガーされ、エクステンションはこれに応答してマップ ドキュメントを自動的に保存します。
- アプリケーション エクステンションを使用して、アドインを含むコンポーネント (ボタンやツール) 間でアクティビティティを調整します。たとえば、マップに特定のレイヤー セットが追加されていない場合は、ツールバー上のツール セットを有効化しないようにできます。
このトピックでは、アプリケーション エクステンションを作成する方法を手順に従って説明します。このワークフローを開始する前に、ArcMap のアドイン プロジェクトを作成して、プロジェクト設定を指定していることを確認してください。詳細については、「アドイン プロジェクトの作成」をご参照ください。このワークフローでは ArcMap のエクステンションを作成する方法を説明しますが、他の ArcGIS Desktop アプリケーションでも、メニューの作成方法に違いはありません。このトピックでは、ドキュメントを開くごとに、または新しいドキュメントを作成するごとに ArcMap にベース レイヤーを追加するエクステンションの作成手順を検証します。その後、Python アドイン ウィザードで作成された Python クラスを詳しく検証して、エクステンションに機能を提供するプロパティとメソッドを確認します。
アドイン アプリケーション エクステンションを作成する処理は、以下の 2 つの手順で構成されます。
-
アプリケーション エクステンションを作成します。
必要なプロジェクト設定を入力したら、[アドインのコンテンツ] タブをクリックします。まず、[エクステンション] を右クリックして [新規エクステンション] をクリックします。
エクステンションには多くのプロパティを入力できます。以下のリストに、すべてのプロパティとその説明を示します。これらのプロパティは、プロジェクトの config.xml ファイルに格納されます。
プロパティ 説明 名前(必須)
アプリケーション エクステンションの名前を表します。次の画面に示すように、デスクトップ アプリケーションの [エクステンション] ダイアログ ボックスで使用される名前です。
クラス名(必須)
エクステンションを表す Python クラス。Python クラスは、エクステンションのビジネス ロジックを書き込む場所です。このクラスは、アプリケーション エクステンションがデスクトップ アプリケーションで使用されるときに呼び出されるため重要です。クラスを構築するときは、Python の命名規則を使用します。Python クラスでは、各単語の先頭を大文字にする表記法が使用されます。この例では、AddBaseLayer という名前のクラスを作成します。
ID(必須)
エクステンションを識別するための一意の名前です。1 つのプロジェクトに複数のエクステンションを作成することができるため、この ID を使用して各アプリケーション エクステンションを区別します。デフォルトの ID を、意味のある値に置き換えると理想的です。ID にスペースを含めることはできません。単語を区切る場合はアンダースコアを使用してください。Python のキーワードも使用しないでください。予約語については、Python のドキュメントをご参照ください。アドインの名前空間が ID の前に付加されます。名前空間は config.xml ファイルに格納されます。
説明(オプション)
アプリケーション エクステンションの目的を説明します。たとえば、3D Analyst エクステンションはサーフェス モデリングと 3D ビジュアライゼーションのツールを提供します。説明は [エクステンション] ダイアログ ボックスの下部に表示されます。
自動的に読み込む(オプション)
デスクトップ アプリケーションを開いたときに、アプリケーション エクステンションを読み込むことができます。デフォルトで、このチェックボックスはオンです。このチェックボックスがオンの場合、Python スクリプトの enabled プロパティが True に設定されます。
プロパティの入力が完了したら、ウィザードの下部にある [保存] ボタンをクリックします。これにより、必要なすべてのファイルとフォルダーが作業フォルダーに作成されます。
- Python スクリプトを編集します。
続いて Python スクリプトを編集し、マップ ドキュメントを開くか作成するごとにベース レイヤーを追加する機能を含むように Python クラスを更新します。この処理は、ArcMap の openDocument および newDocument イベントをリスニングし、これらに応答することで行います。カスタム エクステンションに機能を追加するには、以下の手順を実行します。
- 作業フォルダー内の Install フォルダーにある、ウィザードが作成した Python スクリプトを編集します。
ウィザードで入力した名前と同じ名前のクラスが存在します。クラス名は config.xml で参照されているため、このクラス名は変更しないでください。エクステンション クラス内の各関数の詳細については、「エクステンション クラス」をご参照ください。
- newDocument および openDocument イベント関数を、以下のように更新します。
このコードは、ベース レイヤーが存在しない場合に、アクティブ データ フレームにベース レイヤーを追加する機能を提供します。
def newDocument(self): """ Adds a base layer if it is not already added to the active data frame of the map. """ # Provide a layer file and the layer name as it would appear in the Table of contents. base_layer = r'C:\GISData\module5\World_Street_Map.lyr' base_layer_name = 'World Street Map' mxd = arcpy.mapping.MapDocument('current') active_view = mxd.activeView df = arcpy.mapping.ListDataFrames(mxd, active_view)[0] if arcpy.mapping.ListLayers(mxd, base_layer_name) == []: arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(base_layer)) arcpy.RefreshTOC() else: return def openDocument(self): """ Adds a base layer if it is not already added to the active data frame of the map. """ base_layer = r'C:\GISData\module5\World_Street_Map.lyr' base_layer_name = 'World Street Map' mxd = arcpy.mapping.MapDocument('current') active_view = mxd.activeView df = arcpy.mapping.ListDataFrames(mxd, active_view)[0] if arcpy.mapping.ListLayers(mxd, base_layer_name) == []: arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(base_layer)) arcpy.RefreshTOC() else: return
- 実装していないすべての関数をスクリプトから削除します。
実装されていないすべての関数をスクリプトから削除する必要があります。これらの関数がアプリケーションから呼び出されないことを保証します。
- スクリプトを保存します。
- 作業フォルダー内の Install フォルダーにある、ウィザードが作成した Python スクリプトを編集します。
- アプリケーション エクステンションをテストします。
アプリケーション エクステンションを作成してスクリプト コードを追加したら、共有する前にアドイン ファイルを作成してテストすることが重要です。これらの手順については、「アドインのテスト」をご参照ください。
- アプリケーション エクステンションを配備および共有します。
アドインの配備と共有の手順については、「アドインの共有とインストール」をご参照ください。