ArcGIS Pro SDK で ArcGIS Pro をカスタマイズしてみよう! ~アドインの作成~

ArcGIS Pro SDK で ArcGIS Pro をカスタマイズしてみよう! ~アドインの作成~

 

はじめに

ArcGIS Pro SDK は ArcGIS Pro を拡張するアドイン開発ができる開発キットです。ArcGIS Pro のユーザー インターフェイスをカスタマイズしたり、独自の機能を開発したりすることができます。業務フローを効率的に実行できるように ArcGIS Pro をより使いやすく拡張することができます。

本記事ではマップ上に円形の選択領域を描画し、選択領域内で見つかったフィーチャ レイヤーごとのフィーチャ数を表示するマップ ツールのアドインを作成します。このアドインを例にアドイン作成方法についてご紹介します。

image.gif

本記事では下記の環境を使用しています。

・ArcGIS Pro 3.1

・ArcGIS Pro SDK 3.1

・Visual Studio 2022

ArcGIS Pro SDK のインストールについてはインストールガイドをご参照ください。

プロジェクトの作成

まずは Visual Studio でプロジェクトを作成します。

Visual Studio を起動して、[新しいプロジェクトの作成] を選択し、ArcGIS Pro SDK テンプレートグループから [ArcGIS Pro モジュールアドイン] を選択しプロジェクトを作成します。

create_project.png

プロジェクト名や保存場所などを入力するとプロジェクトが作成されます。
デフォルトでは、Config.daml ファイルが Visual Studio で開きます。Module1.cs ファイルには、アドイン モジュール コードが含まれています。
Config.daml ファイルでは、<insertModule> タグの id が Module1.cs ファイル内の ID と一致し、className がモジュールのクラス名と一致していることが確認できます。

daml.png
Config.daml

module.pngModule1.cs

Config.daml の <group> タグの caption を編集することで ArcGIS Pro 上でのラベルを設定することができます。
group.png

マップ ツールの作成

続いて作成したプロジェクトにマップ ツールを追加します。
ソリューション エクスプローラーでプロジェクトを右クリックし、[追加] > [新しい項目] を選択します。

add.png

[ArcGIS Pro Add-ins] グループのアイテム テンプレート リストから [ArcGIS Pro マップ ツール] を選択します。ファイルに任意の名前 (本記事では IdentifyTool.cs としています) を付け、[追加] をクリックするとマップ ツールが追加されます。

maptool.png

追加すると、デフォルトでマップ ツール (IdentifyTool.cs) が開きます。
Config.daml を開くと、中身が更新されていることが確認できます。
<tool> タグや <tooltip> タグでは追加したマップツールの ArcGIS Pro 上での表示を変更することができます。<tool>タグの caption ではArcGIS Pro上での表示名、<tooltip> タグの heading ではカーソルを合わせたときに表示されるツールチップを変更することができます。

button.png

今回は下記のコメントアウトした箇所のように、マップツール名やツールチップのテキストを修正します。

<!-- caption プロパティ を "カウントツール" に変更 --> 
   <tool id="MapToolIdentify_IdentifyTool"
         caption="カウント ツール "
         className="IdentifyTool"
         loadOnClick="true"
         smallImage="pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/GenericButtonRed16.png"
         largeImage="pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/GenericButtonRed32.png"
         condition="esri_mapping_mapPane">
<!-- heading の属性値を "カウントツール" に変更し、テキストもそれにあわせて修正 -->
      <tooltip heading="カウント ツール">円形スケッチを使用して現在のマップ上のレイヤー毎のフィーチャ数をカウントします。<disabledText /></tooltip>
   </tool>

[ビルド] > [ソリューションのビルド] でアドインプロジェクトをビルドします。
build.png

ビルドに成功したら、[開始] ボタンをクリックしてデバッグを開始します。

ArcGIS Pro のスタート ページが表示されたら、任意のプロジェクトを選択して開きます。

[アドイン] タブが追加されていますのでクリックして、作成したマップツールの UI がリボン上に表示されて、上記で行ったキャプションとツールチップの変更が反映さていれることが確認できます。確認ができたら ArcGIS Pro を閉じます。

この時点では処理を実装していないため、ボタンをクリックしても何も起こりません。
次のステップでボタンをクリックしたときの処理を実装していきます。

マップ ツールの処理の実装

まずは マップツール (IdentyfyTool.cs) を開き、2D のマップだけではなく、3D シーンでもツールを使用できるように IdentifyTool() の SketchOutputMode を以下のように Screen に変更します。

public IdentifyTool()
   {
         IsSketchTool = true;
         SketchType = SketchGeometryType.Circle;
         SketchOutputMode = SketchOutputMode.Screen;
   }

今回は上記のように SketchGeometryType をCircleに変更し円を描いてフィーチャを選択していますが、設定を変えることで長方形等ほかの図形を描いて選択することも可能です。

OnSketchCompleteAsync を以下のように変更し、メソッド宣言に async キーワードを追加します。

protected override async Task<bool> OnSketchCompleteAsync(Geometry geometry)
   {
         var mv = MapView.Active;
         var identifyResult = await QueuedTask.Run(() =>
         {
            var sb = new StringBuilder();

            // スケッチしたジオメトリと交差するフィーチャを取得
            var features = mv.GetFeatures(geometry);

            // レイヤーを取得
            var lyrs = mv.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>();
            foreach (var lyr in lyrs)
            {
               var fCnt = features.ToDictionary().ContainsKey(lyr) ? features[lyr].Count : 0;
               sb.AppendLine($@"{lyr.Name} レイヤーに {fCnt} フィーチャあります。");
            }
            return sb.ToString();
         });
         MessageBox.Show(identifyResult);
         return true;
   }

プロジェクトを再度ビルドします。ビルドに成功したら、[開始] ボタンをクリックしてデバッグを開始します。
ArcGIS Pro のスタート ページが表示されたら、フィーチャ レイヤーが含まれる任意のプロジェクトを選択して開きます。

各フィーチャ レイヤーのフィーチャを含むマップの範囲を拡大し、作成したマップツールが期待通りに動作することを確認します。クリック&ホールドして選択円の中心点を定義し、ドラッグして半径を定義します。マウスボタンをはなすと、定義した円内で見つかったフィーチャの数がレイヤー毎にメッセージボックスに表示されます。

image.gif

まとめ

本記事では選択領域内のフィーチャ レイヤーごとのフィーチャ数を表示するマップ ツールを例にArcGIS Pro のアドイン作成手順をご紹介しました。ArcGIS Pro SDK を使用するとオリジナルの機能をもったアドインを作成することができ、ArcGIS Pro を拡張することができますので、ArcGIS Proのカスタマイズを検討している方はぜひご活用ください。

関連リンク

ArcGIS Pro

ArcGIS Pro SDK

ArcGIS Pro SDK 開発リソース集

はじめてのアドイン作成ハンズオン

ArcGIS Pro SDK の学習サイト紹介(ArcGIS Pro SDK 2.x)