Python でアドインを作ってみよう!:エクステンション編

前回までの記事で、アドイン プロジェクトの作成やボタン、ツールの作成といった拡張機能を作成する方法をご紹介しました。今回は、ArcMap 自体に何かしらの動作を行った場合に実行される機能を実装します。ArcMap 自体に機能を追加するには、Python アドインでエクステンションを作成します。

今回は、どのマップでも使用するデータが存在するとし、新規にマップを立ち上げた際に、そのデータを自動で追加するエクステンションを作成していきます。

サンプル データとして以下のデータを使用します。

ESRI ジャパン – 全国市区町村界データ

上記のデータを使用して、アドインの作成を試す場合は、あらかじめダウンロードをお願いいたします。


アドイン プロジェクトの作成
前回のおさらいにもなりますが、新規にアドインを作成する場合、そのアドインに関連するファイル群を格納するプロジェクト フォルダが必要です。
アドイン プロジェクトの作成方法については、以前のブログ記事をご参照ください。


プロジェクトの基本設定
1. 作成したプロジェクトに対し、名称や作成者などのプロパティを設定していきます。項目の詳細は以下のようになります。
※入力する値は適宜変更してください。

・Select Product:ArcMap(対象アプリケーション)
・Name:SampleAddin4(ツール名/カテゴリ名)
・Version:0.1(バージョン)
・Company:Esri Japan(会社/組織)
・Description:サンプル エクステンション(説明)
・Author:Esri Japan(作成者)
・Image:※デフォルト画像のままで構いません(アドインに関連づけられた画像)

01_2

2. [Save] をクリックし、プロジェクトを保存します。

エクステンションの作成
1. [Python Add-In Wizard] の [Add-In Contents] タブをクリックします。
2. [EXTENSIONS] を右クリックし、[New Extension] を選択します。
3. 以下の項目を設定します。

・Name:新規マップにデータを追加
・Class Name:AddDataNewMap(ツールのクラス名)
・ID:SampleAddin4_addin.extension(アドインを識別するための一意の名前)
・Description:新規にマップを開いた際に指定データを追加
・Methods to Implement:[New Document] にチェックを入れます。
・Load Automatiacally:チェックを入れます。

4. [Save] をクリックします。
5. [Open Folder] をクリックします。

[Save] ボタンをクリックした時点で、プロジェクト フォルダ内で設定したエクステンションを作成するためのファイル群が作成されます。次のステップでは、エクステンションの動作を記述します。

コードの記述
1. 開かれたプロジェクト フォルダから「Install」フォルダを開きます。
2. フォルダ内から「<プロジェクト フォルダ名>_addin.py」スクリプト ファイルを任意の Python エディタで開きます。

Python アドイン ウィザードで選択した項目によって、記述するブロックが自動的に追加されるようになっています。今回は、[New Document] を選択したので、Python スクリプト ファイルにも「newDocument」(新規にマップを開いた際に動作する)ブロックが用意されています。これらは「イベント」と呼ばれ、ユーザーが ArcMap 上で行った操作に合わせて、イベント内で記述したコードが実行されます。

02_2

3. import arcpy の上に以下のコードを追加します。

#coding:cp932

03

4. import pythonaddins の下に以下のコードを追加します。

import os.path

04

5. 「newDocument」ブロックに以下のコードを記述します。
※ Python ではインデント(空白)も言語を構成する一部です。下図を参考に、インデント数に気を付けながら記述してください。

def newDocument(self):
# データのパスは適宜変更してください。
inFC = r”D:Datajapan_ver71japan_ver71.shp”

     mxd = arcpy.mapping.MapDocument(“Current”)
     df = mxd.activeDataFrame
     if inFC.endswith(“.shp”):
outLyrName = os.path.basename(inFC)[:-4]
else:
outLyrName = os.path.basename(inFC)
addLyr = arcpy.MakeFeatureLayer_management(inFC,outLyrName)
arcpy.mapping.AddLayer(df,addLyr)
arcpy.RefreshActiveView()

05_2

6. 「<プロジェクト フォルダ名>_addin.py」を上書き保存し、Python エディタを閉じます。

アドイン ファイルの作成
Python アドインは、プロジェクト フォルダ内にある「makeaddin.py」をダブルクリックするだけで、先ほど記述したコードなどを基に、自動でアドイン ファイルが作成されます。

1. プロジェクトフォルダに移動し「makeaddin.py」ファイルをダブルクリックします。
2. しばらくすると、プロジェクトフォルダ内に「<プロジェクト名>.esriaddin」ファイルが作成されます。

アドインの検証
作成したアドインが正常に動作するかを検証しましょう。

1. プロジェクトフォルダ内の「<プロジェクト名>.esriaddin」ファイルをダブルクリックします。
2. [Esri ArcGIS Add-In Installation Utility] の [Install Add-In] をクリックします。
3. 「Installation succeeded」メッセージが表示されたら、[OK] をクリックします。
4. ArcMap を起動します。

作成したエクステンションにより、データが追加されていることを確認できます。作成したエクステンションの無効化を行う場合は、以下の操作を行います。

5. ArcMap の [カスタマイズ] メニュー → [エクステンション] を選択します。
6. エクステンションの一覧から [新規マップにデータを追加] にチェックを外し、[閉じる] を選択します。

06_3

7. エクステンションが無効になったのを確認するため、一度 ArcMap を終了し、再度 ArcMap を起動します。

エクステンションの機能は、チェックを入れたり、外したりすることで簡単に制御が行えます。また、今回は、新規にマップを開いた際に動作するエクステンションを作成しましたが、ほかにも編集の開始を行ったタイミングで動作する機能や、フィーチャを追加したタイミングで動作する機能を追加することも可能です。

次回のブログでは、コンボ ボックスを作成する方法をご紹介します。

関連リンク
ArcGIS for Desktop ヘルプ
Python Add-In Wizard
Python アドインとは

ArcGIS ブログ
Python でアドインを作ってみよう!:概要編
Python でアドインを作ってみよう!:ボタン編
Python でアドインを作ってみよう!:ツール編
Python を使って ArcGIS での作業効率を上げよう!