• 検索結果がありません。

カスタム マップ ツールの作成

 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」フィーチャ クラスを追加します。