FAQ
ArcObjects での既存のテーブル、フィーチャクラスへのアクセス

ナレッジ番号:2747 | 登録日:2023/05/29 | 更新日:2024/07/02

概要

このサンプル コードは、テーブルとフィーチャクラスにアクセスする方法を示します。ArcMap や MapControl を使用している場合、マップに追加されているスタンドアロン テーブルやフィーチャ レイヤーからその参照元であるテーブル、フィーチャクラスを取得することができます。ディスクに保存されているテーブルやフィーチャクラスに直接アクセスするには、ワークスペースを経由してアクセスします。

サンプル コード

データ フレームからスタンドアロン テーブルを取得

ArcMap のデータ フレームに追加されているスタンドアロン テーブルを取得するサンプルです。データ フレームに追加されたテーブルは、スタンドアロン テーブルと呼ばれます。テーブルは図形情報を持たないため、地図は表示されませんが、テーブル結合やリレートなどでフィーチャ レイヤーと結びつけて利用することができます。

//マップにアクセス
IMap pMap = ArcMap.Document.FocusMap;
//IStandaloneTableCollection にキャスト
IStandaloneTableCollection pStandaloneTableCollection = (IStandaloneTableCollection)pMap;

for (int i = 0; i < pStandaloneTableCollection.StandaloneTableCount; ++i)
{
    //スタンドアロン テーブルの取得
    IStandaloneTable pStandaloneTable = pStandaloneTableCollection.get_StandaloneTable(i);
    ITable pTable = pStandaloneTable.Table;
    //IDatasetにキャスト
    IDataset pDataset = (IDataset)pTable;
  //テーブル名をメッセージボックスに表示    
    MessageBox.Show(pDataset.Name);   
}
'マップにアクセス
Dim pMap As IMap = My.ArcMap.Document.FocusMap
'IStandaloneTableCollection にキャスト
Dim pStandaloneTableCollection As IStandaloneTableCollection = DirectCast(pMap, IStandaloneTableCollection) For i As Integer = 0 To pStandaloneTableCollection.StandaloneTableCount - 1 'スタンドアロン テーブルの取得 Dim pStandaloneTable As IStandaloneTable = pStandaloneTableCollection.StandaloneTable(i) Dim pTable As ITable = pStandaloneTable.Table 'IDatasetにキャスト Dim pDataset As IDataset = DirectCast(pTable, IDataset) 'テーブル名をメッセージボックスに表示 MsgBox(pDataset.Name) Next

フィーチャ レイヤーからフィーチャクラスを取得

フィーチャ レイヤーが参照しているフィーチャクラスにアクセスするサンプルです。

//マップの最上位レイヤーを取得
IFeatureLayer pFeatureLayer = (IFeatureLayer)axMapControl1.get_Layer(0);
//フィーチャクラスの取得
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
//IDataset にキャスト
IDataset pDataset = (IDataset)pFeatureClass;
//フィーチャクラス名とフィーチャクラス エイリアス名をメッセージボックスに表示
MessageBox.Show(pDatasetF.Name + "\n" + pFeatureClass.AliasName);        
'マップの最上位レイヤーを取得
Dim pFeatureLayer As IFeatureLayer = DirectCast(axMapControl1.get_Layer(0), IFeatureLayer)
'フィーチャクラスの取得
Dim pFeatureClass As IFeatureClass = pFeatureLayer.FeatureClass
'IDataset にキャスト
Dim pDataset As IDataset = DirectCast(pFeatureClass, IDataset)
'フィーチャクラス名とフィーチャクラス エイリアス名をメッセージボックスに表示
MsgBox(pDataset.Name + vbCrLf + pFeatureClass.AliasName)  

ワークスペースからテーブルを取得

取得したワークスペースからテーブルにアクセスするサンプルです。

//pWorkspace = IWorkspace オブジェクト
//IFeatureWorkspace にキャスト
IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace; 
//指定したテーブルを開く
ITable pTable = pFeatureWorkspace.OpenTable("テーブル名");
'pWorkspace = IWorkspace オブジェクト
'IFeatureWorkspace にキャスト
Dim pFeatureWorkspace As IFeatureWorkspace = CType(pWorkspace, IFeatureWorkspace)
'指定したテーブルを開く
Dim pTable As ITable = pFeatureWorkspace.OpenTable("テーブル名")

ワークスペースからフィーチャクラスを取得

取得したワークスペースからフィーチャクラスにアクセスするサンプルです。

//pWorkspace = IWorkspace オブジェクト
//IFeatureWorkspace にキャスト
IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;
//指定したフィーチャクラスを開く 
IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass("フィーチャクラス名");
'pWorkspace = IWorkspace オブジェクト
'IFeatureWorkspace にキャスト
Dim pFeatureWorkspace As IFeatureWorkspace = CType(pWorkspace, IFeatureWorkspace) 
'指定したフィーチャクラスを開く
Dim pFeatureClass As IFeatureClass = pFeatureWorkspace.OpenFeatureClass("フィーチャクラス名")

※ワークスペースの取得方法は、下記 FAQ をご参照ください。
ワークスペースへのアクセス

メタデータ

種類

製品