「選択フィーチャからレイヤを作成」で作成されたレイヤを判別する方法

      2009/07/19

ArcMapの機能に,特定のレイヤから選択されたフィーチャ群を新しいレイヤとして作成する機能があります。

arcmap1 arcmap2

レイヤを右クリック > [選択] > [選択フィーチャからレイヤを作成]

この操作で新しく作成されたレイヤは,特定のフィーチャ群だけが抜き出されただけで,データソースなどその他のプロパティはすべて出力元のレイヤと同じ情報を持っています。

arcmap3

ここで,どうやって「選択フィーチャからレイヤを作成」によって作成されたレイヤなのかを判断できるかを調べたのですが,GUIだとレイヤ名が

<元のレイヤ名> 選択

と書かれているかどうかで判断するしかありません。ただ,これだとレイヤ名を任意の名称に変更するとわからなくなってしまうのですが,ArcObjectsだとIFeatureLayerDefinition::DefinitionSelectionSetでそれを判別することができました。

Dim pFeatureLayerDefinition  As IFeatureLayerDefinition
Set pFeatureLayerDefinition = pFeatureLayer                 'FeatureLayer

Debug.Print Not pFeatureLayerDefinition.DefinitionSelectionSet Is Nothing
'True:既存のフィーチャレイヤ
'False:選択フィーチャから作成されたレイヤ

Developer Helpには以下のように書かれています(超意訳)。

IFeatureLayerDefinition::DefinitionSelectionSetプロパティは,IFeatureLayerDefinition::CreateSelectionLayerメソッドによって作成されたフィーチャレイヤのフィーチャ群をSelectionSetオブジェクトに保持します。CreateSelectionLayerメソッドが呼び出される前は,DefinitionSelectionSetプロパティはNothingが返されます。
※補足:CreateSelectionLayerは「選択フィーチャからレイヤを作成」と同等の操作を実行するためのメソッドです。

今までIFeatureLayerDefinitionインタフェースはDefinitionExpressionプロパティ(ArcMapの[フィルタ設定]に相当)しか知らなかったのですが,新たな発見がありました。

 - GIS, ArcObjects