FAQ
Scripting Dictionaryを使用して数値やテキスト型フィールドから値と頻度を取得する方法

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

【概要】

ArcInfo Workstationには数値やテキスト型フィールドから
固有の値と頻度のリストを取得するためのFrequencyコマンドがあります。
同様の処理をArcObjectsで実装する方法を以下に示します。


【手順】

  1. ArcMapを起動します。

  2. Visual Basic Editorを開きます。

  3. プロジェクト・エクスプローラ・ウィンドウで、Projectの下にあるArcMap Objects > ThisDocumentをダブルクリックし、コード・ウィンドウを開きます。

  4. コード・モジュールに次のコードをペーストします。

    
    'Microsoft Scripting Runtimeライブラリへの参照設定が必要です
    
    Sub TestFrequency()
      ' キーと値がペアとなったディクショナリを作成します
      ' キーは属性値で、ディクショナリの値は各属性値の頻度です
      Dim pDict As New Scripting.Dictionary
      Dim pMxDoc As IMxDocument
      Dim pFLayer As IFeatureLayer
      Dim pFSel As IFeatureSelection
      Dim pFCur As IFeatureCursor
      Dim lFld As Long
      Dim v As Variant
      Dim pFeat As IFeature
    
      Set pMxDoc = ThisDocument
      ' 最上位レイヤを取得します
      Set pFLayer = pMxDoc.FocusMap.Layer(0)
      Set pFSel = pFLayer
    
      If pFSel.SelectionSet.Count = 0 Then
        Set pFCur = pFLayer.FeatureClass.Search(Nothing, True)
      Else
        pFSel.SelectionSet.Search Nothing, True, pFCur
      End If
    
      lFld = pFCur.FindField("Name")  'フィールド名を適宜変更します
      If lFld = -1 Then
        Debug.Print "NAMEフィールドが見つかりません"
        Exit Sub
      End If
    
      Set pFeat = pFCur.NextFeature
      Do While Not pFeat Is Nothing
        v = pFeat.Value(lFld)
        If pDict.Exists(v) Then
          pDict.Item(v) = pDict.Item(v) + 1
        Else
          pDict.Add v, 1
        End If
        Set pFeat = pFCur.NextFeature
      Loop
    
      ' list all counties and their frequency
      For Each v In pDict.Keys
        If pDict.Item(v) >= 1 Then
          Debug.Print v & ", " & pDict.Item(v)
        End If
      Next v
    End Sub
    
    
  5. Visual Basic Editorを閉じます。

  6. コードを実行します。

    A:ArcMapで、ツール > マクロ > マクロと選択し、マクロ・ダイアログを表示します。

    B:マクロを選択し、実行をクリックします。

メタデータ

機能

種類

製品