Visual studio 2015 を起動します。
[ファイル] メニュー → [新規作成] → [プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログから、[インストール済み] → [テンプレート] → [Visual C#] → [ArcGIS] → [ArcGIS Pro Add-ins] を選択し、[ArcGIS Pro モジュール アドイン] テンプレートを選択します。
下記の項目を設定し [OK] ボタンをクリックし、プロジェクトを新規に作成します。
.NET Framework のバージョン : .NET Framework 4.6.1
名前 : SketchTool
場所 : C:\ProSdkStartupGuide\ProAddins\
ソリューションのディレクトリを作成 : チェックを外す
「Config.daml」ファイルが開いているのを確認し、tabs 要素内にある tab 要素のコメン トを解除します。
caption : 演習 4 タブ
<tabs>
<tab id=”SketchTool_Tab1” caption=”演習 4 タブ”>
<group refID=”Sketchtool_Group1” />
</tab>
<tabs>
複数行をコメント アウトする場合、[テキスト エディター] ツールバーの [選択範囲のコメントを 解除] ボタンをクリック、または Ctrl キーを押しながら 'K' と 'C' を押すと簡単で便利です。
88
group 要素の caption を「演習 4 グループ」に変更します。また、前のステップで group 要素を配置する指定のタブを作成したので、group 要素内の appearsOnAddInTab の値 は false に設定します。
caption : 演習 4 グループ
appearsOnAddInTab : false
<groups>
<group id=”SketchTool_Group1” caption=”演習 4 グループ”
appearsOnAddInTab = false>
</group>
</groups>
[ソリューション エクスプローラー] から「SketchTool」プロジェクトで右クリックをし、
[追加] → [新しい項目] を選択します。
[新しい項目の追加] ダイアログから、[インストール済み] → [Visual C#] → [ArcGIS]
→ [ArcGIS Pro Add-ins] を選択し、[ArcGIS Pro 作図ツール] テンプレートを選択しま す。
名前を「CustomIdentify.cs」に変更し、[追加] をクリックします。
CustomIdentify クラスのコードには、あらかじめ MapTool クラスから継承したいくつかの プロパティの設定と、作図終了時に呼び出される OnSketchCompleteAsync メソッドが記述 されています。
ファイルの先頭(using 句の最後)に、Queued.Task を使用するために必要な名前空間を 追加します。
using ArcGIS.Core.Geometry;
using ArcGIS.Desktop.Framework.Threading.Tasks;
CustomIdentify クラスに、ボタンがクリックされ、ツールがアクティブ化したときの動作を
定義します。
CustomIdentify クラスのコンストラクタ内を、デフォルトから下記のように変更します。
追加するコード 説明
IsSketchTool 左クリックで作図の作成をするかの設定
UseSnapping
(今回は不要なため、削除)
作図においてスナップを使用するかどうか
SketchType 作図するジオメトリ タイプの設定
(Point、Line、Polygon、Rectangleなど)
SketchOutputMode 作図したジオメトリをマップ座標/ディスプレイ座標
どちらで取得するかどうか Map:2D のみで使用可
Screen:2D / 3D どちらでも使用可
89 public CustomIdentify()
{
IsSketchTool = true;
SketchType = SketchGeometryType.Rectangle;
SketchOutputMode = SketchOutputMode.Screen;
}
次に、作図終了時に呼び出される OnSketchCompleteAsync () メソッドを書き換えます。
まずは、OnSketchCompleteAsync () メソッド内に元々記述されているコードをすべて削
除します。
OnSketchCompleteAsync() メソッドは、戻り値として非同期で動作するタスク(Task オブ ジェクト)を返します。ここでは、MapView の GetFeatures や SelectFeatures など MCT スレッドでの呼び出しを行うタスクを作るため、QueuedTask.Run() の戻り値をそのまま
return するよう、コーディングします。
OnSketchCompleteAsync() メ ソ ッ ド 内 に 、 以 下 の よ う な コ ー ド を 追 記 し ま す 。
QueuedTask.Run() で定義する非同期での動作は、作図したフィーチャの取得、取得した
フィーチャのフラッシュ、そしてフィーチャの選択です。
protected override Task<bool> OnSketchCompleteAsync(Geometry geometry) {
return QueuedTask.Run(() =>
{
//作図した範囲のジオメトリのフィーチャを取得
var results = MapView.Active.GetFeatures(geometry);
//取得したフィーチャをフラッシュ
MapView.Active.FlashFeature(results);
//取得したフィーチャを選択
MapView.Active.SelectFeatures(geometry);
return true;
});
}
続けて、上記のコードの下に、取得したフィーチャ数をカウントし、メッセージボックスに 数を表示させるコードを追加します。
MapView.Active.SelectFeatures(geometry);
//アクティブなマップ ビューに追加されている、
//各レイヤーのフィーチャ数をメッセージボックスに表示
foreach (var result in results) {
var featurecount = result.Value.Count.ToString();
MessageBoxResult mgr =
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
"フィーチャ数:" + featurecount, "選択範囲内のフィーチャ数"
);
}
return true;
});
90 }
最後に、メッセージボックスで [OK] をクリック後、選択フィーチャの範囲にズームする ようコードを追加します。MessageBox.Show() の引数も変更しているので注意してくだ さい。
MessageBoxResult mgr =
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(
"フィーチャ数:" + featurecount,
"選択範囲内のフィーチャ数", MessageBoxButton.OKCancel );
//メッセージボックスで OK をクリックした場合に、選択フィーチャの範囲にズーム
if (mgr == MessageBoxResult.OK) {
MapView.Active.ZoomToSelectedAsync(TimeSpan.FromSeconds(1));
}
else if (mgr == MessageBoxResult.Cancel) {
break;
} }
return true;
});
}
ツールの動作を定義するコードは完成です。
続いて、DAML にてツールの配置を追加しておきましょう。
「Config.daml」ファイルを開き、SketchTool_Group1 の group 要素内に新しい Tool 要 素 を 追 加 し ま す 。refID に は 、controls 要 素 に 追 加 さ れ て い る "SketchTool_
CustomIdentify" を指定します。
<group id="SketchTool_Group1" caption="演習 4 グループ"
appearsOnAddInTab="false">
<!-- host controls within groups -->
<tool refID="SketchTool_CustomIdentify" size="large" />
</group>
controls 要素内の SketchTool_CustomIdentify ツールに設定されているキャプション を「カスタム選択ツール」に変更します。
<controls>
<!-- add your controls here -->
<tool id="SketchTool_CustomIdentify"
categoryRefID="esri_editing_construction_point"
caption="カスタム選択ツール" className="CustomIdentify" ・・・
[ビルド] メニューから [ソリューションのビルド] を選択し、プロジェクトをビルドしま す。
ビルドに問題がなければ、[デバッグ] メニューから [デバッグ開始] を選択し、アドイン を実行します。
91 しばらくすると、ArcGIS Pro が起動します。
[Map.aptx] テンプレートを使用して、下記を設定し新規にプロジェクトを作成します。
名前 : InteractingWithMaps
場所 : C:\ProSdkStartupGuide\Projects
プロジェクトにデータベースを追加
[カタログ] ウィンドウから [データベース] を右クリックし、[データベースの追加] を選 択します。
[既存のジオデータベースの選択] ウィンドウで、
「C:\ProSdkStartupGuide\Projects\ExerciseData\ExerciseData.gdb」を選択し、追加 します。
92
[データベース] を展開し、「ExerciseData.gdb」が追加されているのを確認します。
「ExerciseData.gdb」を展開し、「japan_ver81」フィーチャ クラスを追加します。