FAQ
アドインを使用したエディター エクステンションの構築

ナレッジ番号:2615 | 登録日:2023/05/29 | 更新日:2024/11/21

サマリ

このウォークスルーは新規のフィーチャ、または編集したフィーチャの有効性を確認するエディター エクステンションの構築方法を説明します。このエクステンションは、編集セッションの間に OnChangeFeature や OnCreateFeature の編集イベントを受信して実現します。このトピックではアドインをどのようにインストールするか、ArcMapでカスタム エディター エクステンションをどのようにテストするかについても説明しています。

このウォークスルーで説明されているカスタム エディター エクステンションは簡単なカスタマイズです。その他の可能なカスタマイズついての詳しい説明はエディター エクステンションのトピックをご参照ください。

このウォークスルーに関連するサンプルを取得するにはここをクリックしてください。

内容


エディター エクステンション

エディター エクステンション を使用すると ArcMap における編集環境をさらにカスタマイズできます。アドインを使用してカスタム エディター エクステンションを作成することができます。エディター エクステンションについての理解がまだ十分でない場合は、エディター エクステンションのトピックをご参照ください。

Visual Studio プロジェクトの作成

Visual Studio プロジェクトを作成するには、以下のステップを実行します。

  1. Visual Studio を起動します。
  2. ファイル メニューをクリックし、[新規作成] → [プロジェクト] をクリックします。新規のプロジェクトダイアログ ボックス が開きます。
  3. [インストール済み] から、[Visual Basic] または [Visual C#] プロジェクト ノードを開き、そして [ArcGIS] ノードを開いて [Desktop Add-Ins] をクリックします。
  4. ArcMap Add-in テンプレートをテンプレート ペインから選択します。アドインによる カスタマイズは ArcGIS Desktop アプリケ-ションに固有のものであり、ArcCatalog、ArcScene そして ArcGlobe に対しても作成できます。
  5. "AddInEditorExtension" と名前を付けて、プロジェクトを保存したい場所を指定します。

    Image

  6. [OK] をクリックして、ArcGIS Add-Ins Wizard を開きます。

Desktop Add-Ins ノードに関連するテンプレートがテンプレート ペインに表示されていない場合、新規プロジェクト ダイアログ ボックスのドロップダウン メニューにおいてターゲットとなる .NET フレームワークが 4.5 に設定されていることを確認します。

ArcGIS Add-Ins Wizard の使用

ArcGIS Add-In Wizard はユーザーの入力内容に基づいて、アドインに必要な適切な拡張マークアップ言語(XML)エレメントとマネージ クラスを作成します。アドインに含めるカスタマイズ内容を定義するには、以下のステップを実行します。

  1. Welcome ページで、名前、会社/発行者、説明そして画像などのアドインに関する基本的な情報を入力します。Welcome ページで、アドインについて与えたメタデータ情報は、アドイン マネージャ ダイアログ ボックスに表示されます。適当なヘルプ アイコンの上にマウスを停止させると、ダイアログ ボックスの各入力事項についてのヘルプ チップが表示されます。

    以下のスクリーン ショットのように、情報を入力してください。

    Image


  2. [Next] をクリックします。利用可能なアドイン コンポーネント ページが開きます。左側の [Add-in Types] セクションではアドインに追加可能なカスタマイズの型がリスト表示されています。
  3. [Add-In Types] の下で、[Editor Extension] チェック ボックスを選択し、クラス名として "ValidateFeaturesExtension" と入力します。ValidateFeaturesExtension クラスは、エディター エクステンションの実行時の振舞いを実装したマネージ クラスで、ウィザードによって適切なテンプレート コードと共に作成されます。

    Image

  4. [Finish] をクリックします。アドイン プロジェクトが作成されます。以下のスクリーンショットは、ウィザードによって作成されたファイルをソリューション エクスプローラーで表示しています。

Image

XML ファイルは "Config.esriaddinx" と名前が付けられています。プロジェクトをビルドして、アドインをインストールした後には config.xml と名前が変わります。

XML についての理解

このセクションの数字はステップではなく、参照しているスクリーンショットの中の数字に対応します。

  1. ArcGIS Add-In Wizard の Welcome ページで与えた基本的なアドイン情報 (名前、会社/発行者、説明、イメージ) は XML に含まれます。
  2. Target タグはアドインがインストールされる先の ArcGIS 製品とバージョンを指定することができます。現在、アドインは ArcGIS Desktop のみでサポートされています。
  3. ArcMap 要素は、カスタム エディター エクステンションが ArcMap アプリケーションのみにインストールされなければならないことを示しています。ArcCatalog、ArcScene そして ArcGlobe に対しても(ボタンやツールのような)アドイン コンポーネントを作成することができますが、カスタム エディター エクステンションは ArcMap アプリケーションにのみ適用可能です。
  4. Extension タグの class 属性は、エディター エクステンションの実行時の振舞いを与える C# または VB .NET マネージ クラス を示します。id 属性 はエクステンション固有の ProgID を示します。

Image

アドイン内では複数のエディター エクステンションを作成できます。

実行時の振舞いの実装

ウィザードがテンプレート コードを作成すると、以下の内容が確認できます。

  • ValidateFeatureExtension クラスは ESRI.ArcGIS.Desktop.AddIns.Extension クラスを継承している。
  • テンプレート コードを確認すると、編集イベントとどのようにつなげるのかが理解できる。ArcMap のような静的クラスは config.Designer.cs で事前に定義されている。静的な ArcMap クラスにはいくつかの静的メンバがあ。Application、document、editor、events などで、これらは実行時の振舞いを実装するために使用可能。 以下のスクリーンショットは ArcMap クラスとその静的メンバを示します。

    Image

以下のコード例は、実行時の振舞いの実装を示しています。ArcMap で編集セッションを開始すると、カスタム エディター エクステンションが読み込まれ、ArcMap は OnStartup イベントを発行します。OnStart() メソッドの中で OnStartEditing とOnStopEditing の編集イベントを関連付けします。OnStartEditing イベントは編集セッションが開始された時に発行され、OnStopEditing イベントは編集セッションが終了した時に発行されます。OnStartEditing イベントの実装によって、フィーチャが作成されるかまたは変更された時に発行される OnChangeFeature と OnCreateFeature の編集イベントを関連付けします。OnChangeFeature とOnCreateFeature のイベント ハンドラの実装、作成または変更されたフィーチャの有効性を検証します。

[C#] 
//エディター エクテンションが読み込まれた時に呼ばれる
protected override void OnStartup()
{
    Events.OnStartEditing += new IEditEvents_OnStartEditingEventHandler
        (Events_OnStartEditing);
    Events.OnStopEditing += new IEditEvents_OnStopEditingEventHandler
        (Events_OnStopEditing);
}

//編集セッションが開始した時に呼ばれる
void Events_OnStartEditing()
{
   //シェープファイルやカバレッジなどのフィーチャは有効性の検証が行われないので、
   //それらのデータに対してはイベントの記述はしない 
    if (ArcMap.Editor.EditWorkspace.Type !=
        esriWorkspaceType.esriFileSystemWorkspace)
    {
        //OnCreateFeature 編集イベントと関連付ける
        Events.OnCreateFeature += new IEditEvents_OnCreateFeatureEventHandler
            (Events_OnCreateChangeFeature);
        //onChangeFeature 編集イベントと関連付ける
        Events.OnChangeFeature += new IEditEvents_OnChangeFeatureEventHandler
            (Events_OnCreateChangeFeature);
    }
}

//編集セッションが終了する時に呼ばれる (エディター->編集の終了)
void Events_OnStopEditing(bool Save)
{
   //シェープファイルやカバレッジなどのフィーチャは有効性の検証が行われないので、
   //それらのデータに対してはイベントの記述はしない 
    if (ArcMap.Editor.EditWorkspace.Type !=
        esriWorkspaceType.esriFileSystemWorkspace)
    {
        //OnCreateFeature 編集イベントとの関連を削除する
        Events.OnCreateFeature -= new IEditEvents_OnCreateFeatureEventHandler
            (Events_OnCreateChangeFeature);
        //onChangeFeature 編集イベントとの関連を削除する
        Events.OnChangeFeature -= new IEditEvents_OnChangeFeatureEventHandler
            (Events_OnCreateChangeFeature);
    }
}

//フィーチャが作成される、または変更される時に呼ばれる
void Events_OnCreateChangeFeature(ESRI.ArcGIS.Geodatabase.IObject obj)
{
    IFeature inFeature = (IFeature)obj;
    if (inFeature.Class is IValidation)
    {
        IValidate validate = (IValidate)inFeature;
        string errorMessage;
        //接続ルール、リレーションシップ ルール、トポロジ ルールなどを検証する
        bool bIsvalid = validate.Validate(out errorMessage);
        //検証結果をレポートする
        if (!bIsvalid)
        {
            System.Windows.Forms.MessageBox.Show("Invalid Feature\n\n" +
                errorMessage);
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("Valid Feature");
        }
    }
}
[VB.NET] 
'エディター エクテンションが読み込まれた時に呼ばれる
Protected Overrides Sub OnStartup()
AddHandler Events.OnStartEditing, AddressOf Events_OnStartEditing
AddHandler Events.OnStopEditing, AddressOf Events_OnStopEditing
End Sub

'編集セッションが開始した時に呼ばれる

Private Sub Events_OnStartEditing()
   'シェープファイルやカバレッジなどのフィーチャは有効性の検証が行われないので、
   'それらのデータに対してはイベントの記述はしない 
    If ArcMap.Editor.EditWorkspace.Type <> esriWorkspaceType.esriFileSystemWorkspace Then
        'OnCreateFeature 編集イベントと関連付ける
        AddHandler Events.OnCreateFeature, AddressOf Events_OnCreateChangeFeature
        'onChangeFeature 編集イベントと関連付ける
        AddHandler Events.OnChangeFeature, AddressOf Events_OnCreateChangeFeature
    End If
End Sub

'編集セッションが終了する時に呼ばれる

Private Sub Events_OnStopEditing(ByVal Save As Boolean)
   'シェープファイルやカバレッジなどのフィーチャは有効性の検証が行われないので、
   'それらのデータに対してはイベントの記述はしない 
    If ArcMap.Editor.EditWorkspace.Type <> esriWorkspaceType.esriFileSystemWorkspace Then
        'OnCreateFeature 編集イベントとの関連を削除する
        RemoveHandler Events.OnCreateFeature, AddressOf Events_OnCreateChangeFeature
        'onChangeFeature  編集イベントとの関連を削除する
        RemoveHandler Events.OnChangeFeature, AddressOf Events_OnCreateChangeFeature
    End If
End Sub

'フィーチャが作成される、または変更される時に呼ばれる

Private Sub Events_OnCreateChangeFeature(ByVal obj As ESRI.ArcGIS.Geodatabase.IObject)
    Dim inFeature As IFeature = CType(obj, IFeature)
    If TypeOf inFeature.Class Is IValidation Then
        Dim validate As IValidate = CType(inFeature, IValidate)
        Dim errorMessage As String
        Dim bIsvalid As Boolean = validate.Validate(errorMessage)
        If (Not bIsvalid) Then
            System.Windows.Forms.MessageBox.Show("Invalid Feature" & Constants.vbLf + Constants.vbLf & errorMessage)
        Else
            System.Windows.Forms.MessageBox.Show("Valid Feature")
        End If
    End If
End Sub

アドインのインストール

アドインをインストールするには以下のステップを行います。

  1. プロジェクトを保存します。
  2. Visual Studio で [ビルド] メニューをクリックし、[ソリューションのビルド] をクリックします。
  3. Visual Studio .NET 統合開発環境の出力ウィンドウを表示します。プロジェクトが正しくビルドされると、ビルドが成功したことが出力ウィンドウに表示されます。そしてアドインは現在のユーザの場所にインストールされます。

エディター エクステンションのテスト

カスタム エディター エクステンションをテストするには、以下のステップを実行します。

  1. ArcMap を起動してマップ ドキュメントを開きます。接続ルール、リレーションシップ ルール、トポロジ ルールを有しているデータを追加します。
  2. [カスタマイズ] メニューから [アドイン マネージャ] をクリックします。アドイン マネージャ ダイアログ ボックスが開きます。アドイン マネージャ ダイアログ ボックスは現在アプリケーションにインストールされているアドインを一覧表示します。名前、イメージ、説明などのアドイン情報がアドイン マネージャ ダイアログ ボックスにリスト表示されます。
  3. [閉じる] をクリックします。
  4. [カスタマイズ] メニューから [ツールバー] をクリックし、そして [エディター] をクリックします。
  5. 編集ツールバーをドッキングしてから、[エディター] メニューをクリックし、[編集の開始] をクリックします。
  6. フィーチャ データを選択し、移動します。これにより、OnChangeFeature イベントが起きて、フィーチャは新しい場所に対する有効性が検証されます。以下のスクリーン ショットで示されているように、メッセージ ボックスが検証結果を表示します。

    Image

アドインのアンインストール

作成したアドインをアンインストールするには、以下のステップを実行します。

  1. ArcMapで [カスタマイズ] メニューから [アドイン マネージャ] をクリックします。アドイン マネージャ ダイアログ ボックスが開きます。
  2. AddInEditorExtension を選択して、[アドインの削除] をクリックします。対象となるアドイン ファイルは、インストールされていたユーザの場所から削除されます。

参照:

エディター エクステンション


開発ライセンス 配布ライセンス
ArcGIS Desktop Basic ArcGIS Desktop Basic
ArcGIS Desktop Standard ArcGIS Desktop Standard
ArcGIS Desktop Adanced ArcGIS Desktop Adanced

この文書は、ArcObjects Help for .NET Developers 内のトピック Walkthrough: Building editor extensions using add-ins を元に翻訳したものです。

 

メタデータ

種類

製品

バージョン