FAQ
ArcObjects での特定 ID のレコード、フィーチャへのアクセス

ナレッジ番号:5304 | 登録日:2023/07/26 | 更新日:2023/12/28

概要

このサンプル コードは、テーブル・フィーチャクラスから OID を指定してレコード・フィーチャにアクセスする方法を示します。OID はオブジェクトID と呼ばれ、オブジェクトを特定する一意の識別子です。ジオデータベースのフィーチャクラスの場合、デフォルトでは "OBJECTID"、もしくは "OID" という名前のフィールドがオブジェクト ID のフィールドです。シェープファイルの場合は、 "FID" という名前のフィールドで示されます。

フィーチャクラスの OBJECTID のフィールド名を取得するには、IFeatureClass::OIDFieldName プロパティを取得します。テーブルの場合は ITable::OIDFieldName プロパティを取得します。

レコードやフィーチャにアクセスし、その属性値を取得するには、対象となる属性値フィールドをインデックス番号で指定します。対象フィールドのインデックス番号が不明な場合でも、IFields::FindField メソッドによって、検索したフィールド名のインデックス番号を取得することができます。該当するフィールド名が存在しない場合、FindField メソッドは -1 を返します。

コード

テーブルからレコードを取得

テーブルから OID を指定してレコードにアクセスするサンプルです。。

ITable pTable = <Table オブジェクト>
int oid = 1;                                             //OID の指定
IRow pRow = pTable.GetRow(oid); 
int index = 2;                                           //フィールドのインデックス番号

Console.WriteLine((pRow.get_Value(index).ToString());    //レコードの属性値を取得

IFields pFields = pRow.Fields;
index = pFields.FindField("フィールド名");                  //フィールド名によるインデックス番号の取得
Console.WriteLine((pRow.get_Value(index).ToString());
Dim pTable As ITable = <Table オブジェクト>
Dim pRow As IRow = pTable.GetRow(1)                       '引数にオブジェクトID を指定

Console.WriteLine(pRow.Value(0).ToString())               'フィールドのインデックス番号を指定性値を取得

Dim pFields As IFields = pRow.Fields
Dim index As Integer = pFields.FindField("フィールド名")     'フィールド名による取得
Console.WriteLine(pRow.Value(index).ToString())

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

フィーチャクラスから OID を指定してフィーチャにアクセスするサンプルです。フィーチャの属性値は IFeature::Value(get_Value) で取得し、フィーチャの図形情報は IFeature::Shape で取得します。フィーチャの図形の複製を取得したい場合は IFeature::ShapeCopy プロパティを使用します。

IFeatureClass pFeatureClass = <FeatureClass オブジェクト>
int oid = 1;                                                //OID の指定
IFeature pFeature = pFeatureClass.GetFeature(oid);          //引数に OID を指定
IGeometry pGeometry = pFeature.Shape;                       //図形情報の参照を取得
IGeometry pCloneGeometry = pFeature.ShapeCopy;              //図形情報の複製を取得

int index = 2;                                              //フィールドのインデックス番号
Console.WriteLine(pFeature.get_Value(index).ToString());    //フィーチャの属性値を取得
Console.WriteLine(pGeometry.GeometryType.ToString());       //ジオメトリ タイプの取得
Dim pFeatureClass As IFeatureClass = <FeatureClass オブジェクト>
Dim oid As Integer = 1                                      'OID の指定
Dim pFeature As IFeature = pFeatureClass.GetFeature(oid)    '引数に OID を指定
Dim pGeometry As IGeometry = pFeature.Shape                 '図形情報の参照を取得
Dim pCloneGeometry As IGeometry = pFeature.ShapeCopy        '図形情報の複製を取得

Dim index As Integer = 2                                    'フィールドのインデックス番号    
Console.WriteLine(pFeature.Value(index).ToString())         'フィーチャの属性値を取得
Console.WriteLine(pGeometry.GeometryType.ToString())        'ジオメトリ タイプの取得

メタデータ

種類

製品