FAQ
ArcObjects で選択したフィーチャのみを表示する方法

ナレッジ番号:5569 | 登録日:2023/07/27 | 更新日:2024/11/21

概要

完全にフィーチャを非表示にするレイヤーのフィルタ設定とは異なり、IGeoFeatureLayer::ExclusionSet プロパティを用いて、選択したフィーチャ以外のフィーチャを隠す(選択可能)方法を示します。

Image

コード

//マップドキュメントにアクセスし、選択レイヤーを取得
IMxDocument mxDocument = ArcMap.Document;
IGeoFeatureLayer geoFeatureLayer = (IGeoFeatureLayer)mxDocument.SelectedLayer;

//IFeatureSelection にキャストし、選択フィーチャを取得
IFeatureSelection featureSelection = (IFeatureSelection)geoFeatureLayer;
ISelectionSet selectionSet = featureSelection.SelectionSet;

//すべてのフィーチャの OID のリストを取得
ISelectionSet entireSelectionSet = geoFeatureLayer.FeatureClass.Select(null, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, null);
IEnumIDs entireEnumIds = entireSelectionSet.IDs;
entireEnumIds.Reset();
int entireOID = entireEnumIds.Next();

//選択フィーチャの OID のリストを取得
IEnumIDs selectionEnumIds = selectionSet.IDs;
selectionEnumIds.Reset();
int selectionOID = selectionEnumIds.Next();

//すべてのフィーチャの OID を FeatureIDSet オブジェクトに追加
IFeatureIDSet featureIDSet = new FeatureIDSetClass();
while (entireOID != -1)
{
    featureIDSet.Add(entireOID);
    entireOID = entireEnumIds.Next();
}

//FeatureIDSet オブジェクトに選択したフィーチャの OID が含まれている場合
//選択したフィーチャの OID を FeatureIDSet オブジェクトから除去
while (selectionOID != -1)
{
    if (featureIDSet.get_Contains(selectionOID))
    {
                featureIDSet.Remove(selectionOID);
    }
    selectionOID = selectionEnumIds.Next();
}

//選択していないフィーチャの OID を非表示
geoFeatureLayer.ExclusionSet = featureIDSet;

//マップの再描画
mxDocument.ActiveView.Refresh();
'マップドキュメントにアクセスし、選択レイヤーを取得
Dim mxDocument As IMxDocument = My.ArcMap.Document
Dim geoFeatureLayer As IGeoFeatureLayer = mxDocument.SelectedLayer

'IFeatureSelection にキャストし、選択フィーチャを取得
Dim featureSelection As IFeatureSelection = geoFeatureLayer
Dim selectionSet As ISelectionSet = featureSelection.SelectionSet

'すべてのフィーチャの OID のリストを取得
Dim selctionEnumIds As IEnumIDs = selectionSet.IDs
selctionEnumIds.Reset()
Dim selctionOID As Long = selectionEnumIds.Next()

'選択フィーチャの OID のリストを取得
Dim entireSelectionSet As ISelectionSet = geoFeatureLayer.FeatureClass.Select(Nothing, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, Nothing)
Dim entireEnumIds As IEnumIDs = entireSelectionSet.IDs
entireEnumIds.Reset()
Dim entireOID As Long = entireEnumIds.Next()

'すべてのフィーチャの OID を FeatureIDSet オブジェクトに追加
Dim featureIDSet As IFeatureIDSet = New FeatureIDSet
Do Until entireOID = -1
    featureIDSet.Add(entireOID)
    entireOID = entireEnumId.Next()
Loop

'FeatureIDSet オブジェクトに選択したフィーチャの OID が含まれている場合
'選択したフィーチャの OID を FeatureIDSet オブジェクトから除去
Do Until selctionOID = -1
    If featureIDSet.Contains(selctionOID) Then
        featureIDSet.Remove(selctionOID)
    End If
    sekection0OID = selectionEnumIds.Next()
Loop

'選択していないフィーチャの OID を非表示
geoFeatureLayer.ExclusionSet = featureIDSet

'マップの再描画
mxDocument.ActiveView.Refresh()

メタデータ

機能

種類

製品