FAQ
ArcObjects でのカーソルを利用した編集

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

概要

カーソルを使用することで、大量のフィーチャの属性値を高速に編集することができます。このトピックでは、カーソルを使用したフィーチャの更新・削除・追加の方法を示します。

サンプル コード

フィーチャの更新

フィーチャを更新するには、IFeatureClass::Update メソッドを使用します。Update メソッドで FeatureCursor オブジェクトを取得し、取得したカーソルから Feature オブジェクトを取得し、必要な属性値を更新して最後に IFeatureCursor::UpdateFeature メソッドでコミットします。Update メソッドの第2引数は必ず False に設定します。この引数が True になるのは、編集を伴わないカーソル利用時に限ります。

IFeatureCursor pFeatureCursor = pFeatureClass.Update(null, false);
IFeature pFeature = pFeatureCursor.NextFeature();
while (!(pFeature == null))
{
    pFeature.set_Value(3,"Updated Value");             //更新する属性値 
    pFeatureCursor.UpdateFeature(pFeature);         //レコードの更新
    pFeature = pFeatureCursor.NextFeature();        //次のフィーチャを取得
}
Dim pFeatureCursor As IFeatureCursor = pFeatureClass.Update(Nothing, False)
Dim pFeature As IFeature = pFeatureCursor.NextFeature()
Do Until pFeature Is Nothing
    pFeature.Value(3) = “Updated Value”             '更新する属性値      
    pFeatureCursor.UpdateFeature(pFeature)          'レコードの更新
    pFeature = pFeatureCursor.NextFeature()         '次のフィーチャを取得
Loop

フィーチャの削除

フィーチャを削除する際は、アップデート カーソル(Update メソッドで取得したカーソル)で取得したフィーチャ群に対し、IFeatureCursor::DeleteFeatrue メソッドを実行します。

IFeatureCursor pFeatureCursor = pFeatureClass.Update(null, false);
IFeature pFeature = pFeatureCursor.NextFeature();
while (!(pFeature == null)) 
{
    pFeatureCursor.DeleteFeature();
    pFeature = pFeatureCursor.NextFeature();         //次のフィーチャを取得
}
Dim pFeatureCursor As IFeatureCursor = pFeatureClass.Update(Nothing, False)
Dim pFeature As IFeature = pFeatureCursor.NextFeature()
Do Until pFeature Is Nothing
    pFeatureCursor.DeleteFeature()
    pFeature = pFeatureCursor.NextFeature()          '次のフィーチャを取得
Loop

フィーチャの追加

フィーチャを更新するには、IFeatureClass::Insert メソッドを使用します。事前に IFeatureClass::CreateFeatureBuffer メソッドで FeatureBuffer オブジェクトを取得します。作成された FeatureBuffer オブジェクトに属性値を設定し、IFeatureCursor::InsertFeature メソッドで FeatureBuffer を挿入して Feature オブジェクトとします。これを追加したいフィーチャ分繰り返し実行します。Insert メソッドの引数は、バッファーを利用するかどうかを示す論理値で、通常 True に設定します。

IFeatureBuffer pFeatureBuffer = pFeatureClass.CreateFeatureBuffer();
IFeatureCursor pFeatureCursor = pFeatureClass.Insert(true);
long i = 0;
for (i = 1; i <= 10; i++) 
{
    pFeatureBuffer.set_Value(3,"Updated Value");       //入力する属性値
    pFeatureCursor.InsertFeature(pFeatureBuffer);
}
Dim pFeatureBuffer As IFeatureBuffer = pFeatureClass.CreateFeatureBuffer()
Dim pFeatureCursor As IFeatureCursor = pFeatureClass.Insert(True)
Dim i As Long
For i = 1 To 10
    pFeatureBuffer.Value(3) = “Inserted Value”        '入力する属性値
    pFeatureCursor.InsertFeature(pFeatureBuffer)
Next i

メタデータ

機能

種類

製品