YouTube | Facebook | X(Twitter) | RSS

シェープファイルの空間インデックス作成

2016/9/1 (木)

Attribute VB_Name = "Module1"
Option Explicit
 
Sub CheckforSpatialIndex()
  Dim pDoc As IMxDocument
  Set pDoc = ThisDocument
  ' マップ内の最上位レイヤを取得します。
  Dim pLayer As IFeatureLayer
  Set pLayer = pDoc.FocusMap.Layer(0)
  Dim pFc As IFeatureClass
  Set pFc = pLayer.FeatureClass
 
  ' シェープファイルがすでに空間インデックスを持っているかどうかを調べます。
  Dim pIndexes As IIndexes
  Dim pEnumIndex As IEnumIndex
  Set pIndexes = pFc.Indexes
  Set pIndexes = pFc.Indexes
   
  Call AddMyIndex(pFc, "CODE") ' pFc.ShapeFieldName)
   
'  If pIndexes.FindIndexesByFieldName("CODE").Next Is Nothing Then
'    Debug.Print pFc.AliasName
''    Call AddMyIndex(pFc, pFc.ShapeFieldName)
'  End If
End Sub
 
Public Sub AddMyIndex(pFc As IFeatureClass, strFieldName As String)
  ' フィールドを設定します。
  Dim pFields As IFields
  Dim pFieldsEdit As IFieldsEdit
  Dim pField As IField
  Dim lfld As Long
  Set pFields = New Fields
  Set pFieldsEdit = pFields
  pFieldsEdit.FieldCount = 1
  lfld = pFc.FindField(strFieldName)
  Set pField = pFc.Fields.Field(lfld)
  Set pFieldsEdit.Field(0) = pField
  Dim pIndex As IIndex
  Dim pIndexEdit As IIndexEdit
  Set pIndex = New Index
  'QI for IIndexEdit
  Set pIndexEdit = pIndex
  With pIndexEdit
    Set .Fields = pFields
    .Name = "Idx_1"
  End With
  ' フィーチャクラスに空間インデックスを追加します。
  pFc.AddIndex pIndex
End Sub
  • この記事を書いた人

羽田 康祐

伊達と酔狂のGISエンジニア。GIS上級技術者、Esri認定インストラクター、CompTIA CTT+ Classroom Trainer、潜水士、PADIダイブマスター、四アマ。WordPress は 2.1 からのユーザーで歴だけは長い。 代表著書『"地図リテラシー入門―地図の正しい読み方・描き方がわかる』 GIS を使った自己紹介はこちら。ESRIジャパン(株)所属、元青山学院大学非常勤講師を兼務。日本地図学会第31期常任委員。発言は個人の見解です。

-プログラミング, ArcGIS
-,