FAQ
フィーチャクラスに空間インデックスを追加する方法

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

概要

シェープファイルの空間インデックスが存在しない場合に作成する方法をご紹介いたします。

空間インデックスを作成することにより、フィーチャの描画や操作時に高いレベルのパフォーマンスを維持することができます。
ArcGIS Desktop で新規にデータセット(シェープファイルなど)を作成する場合は自動的に空間インデックスが作成されますが、他社のソフトウェアで作成したデータには空間インデックスが含まれていない場合があります。

サンプル コード

今回は、ArcMap に追加している 1 番上位のフィーチャ レイヤーを対象にします。

//最上位レイヤーからフィーチャクラスへアクセス
IMxDocument pMxDoc = ArcMap.Document;
IMap pMap = pMxDoc.FocusMap;
ILayer pLayer = pMap.get_Layer(0);
IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer;
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;

//対象のフィーチャクラスに空間インデックスが存在するかをチェックし、存在しない場合は付与
IIndexes pIndexes = pFeatureClass.Indexes;
if (pIndexes.FindIndexesByFieldName("Shape").Next() == null)
{   
    IFields pFields = new FieldsClass();
    IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; 
    pFieldsEdit.FieldCount_2 = 1;

    int intField = pFeatureClass.FindField(pFeatureClass.ShapeFieldName);
    IField pField = pFeatureClass.Fields.get_Field(intField);
    pFieldsEdit.set_Field(0,pField);
   
    //空間インデックスの作成
    IIndex pIndex = new IndexClass();
    IIndexEdit pIndexEdit = (IIndexEdit)pIndex;
    pIndexEdit.Fields_2 = pFields;
    pIndexEdit.Name_2 = "idx_1";
  
    //空間インデックスを追加
    pFeatureClass.AddIndex(pIndex);
}
'最上位レイヤーからフィーチャクラスへアクセス
Dim pMxDoc As IMxDocument = My.ArcMap.Document
Dim pMap As IMap = pMxDoc.FocusMap
Dim pLayer As ILayer = pMap.Layer(0)
Dim pFeatureLayer As IFeatureLayer = pLayer
Dim pFeatureClass As IFeatureClass = pFeatureLayer.FeatureClass

'対象のフィーチャクラスに空間インデックスが存在するかをチェックし、存在しない場合は付与
Dim pIndexes As IIndexes = pFeatureClass.Indexes
If pIndexes.FindIndexesByFieldName("Shape").Next() Is Nothing Then
    Dim pFields As IFields = New Fields
    Dim pFieldsEdit As IFieldsEdit = pFields
    pFieldsEdit.FieldCount_2 = 1

    Dim lngField As Long = pFeatureClass.FindField(strFieldName)
    Dim pField As IField = pFeatureClass.Fields.Field(lngField)
    pFieldsEdit.Field_2(0) = pField

    '空間インデックスの作成
    Dim pIndex As IIndex = New Index
    Dim pIndexEdit As IIndexEdit = pIndex
    With pIndexEdit
        .Fields_2 = pFields
        .Name_2 = "Idx_1"
    End With

    '空間インデックスを追加
    pFeatureClass.AddIndex(pIndex)
End If

ArcMap 上で追加する方法

[カタログ] ウィンドウで確認したいシェープファイルを右クリック → [インデックス] タブ → [空間インデックス] の枠内の [追加] ボタンをクリックすると、空間インデックスを作成することができます。

Image

メタデータ

機能

種類

製品