YouTube | Facebook | X(Twitter) | RSS

空間結合

2023/6/12 (月)

Option Explicit

Sub SpatialJoinWithArcMapUI()

    Dim pMxDocument As IMxDocument
    Set pMxDocument = ThisDocument
      
    'アクティブなデータフレームの取得
    Dim pMap As IMap
    Set pMap = pMxDocument.FocusMap
    
    'ソース フィーチャ レイヤーの取得
    Dim pSourseFeatureLayer As IFeatureLayer
    Set pSourseFeatureLayer = pMap.Layer(1)
      
    'ソース フィーチャクラスを取得
    Dim pSourseFeatureClass As IFeatureClass
    Set pSourseFeatureClass = pSourseFeatureLayer.FeatureClass
    
    'ジョイン フィーチャ レイヤーの取得
    Dim pJoinFeatureLayer As IFeatureLayer
    Set pJoinFeatureLayer = pMap.Layer(0)
    
    'ジョイン フィーチャ クラスの取得
    Dim pJoinFeatureClass As IFeatureClass
    Set pJoinFeatureClass = pJoinFeatureLayer.FeatureClass
    
    
    'ワークスペース ネームの作成
    Dim pWorkspaceName As IWorkspaceName
    Set pWorkspaceName = New WorkspaceName
    pWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.FileGDBWorkspaceFactory.1"  '出力ワークスペース タイプ
    pWorkspaceName.PathName = "C:\Temp\New File Geodatabase.gdb" '出力ワークスペース パス
    
    'フィーチャクラス ネームの作成
    Dim pDatasetName As IDatasetName
    Set pDatasetName = New FeatureClassName
    pDatasetName.Name = "SpatialJoin_Output"                  'フィーチャクラス名
    Set pDatasetName.WorkspaceName = pWorkspaceName
    
    Dim pSpatialJoin As ISpatialJoin
    Set pSpatialJoin = New SpatialJoin
    Set pSpatialJoin.SourceTable = pSourseFeatureClass  'ターゲット フィーチャクラ
    Set pSpatialJoin.JoinTable = pJoinFeatureClass      '結合フィーチャクラス
    pSpatialJoin.LeftOuterJoin = True
    pSpatialJoin.ShowProcess(False) = 0
    
    '属性を集計する方法は?
    Dim pAggregateOptions  As IAggregateOptions
    Set pAggregateOptions = pSpatialJoin
    With pAggregateOptions
        .IsAverage = False     '平均
        .IsCount = True        'カウント
        .IsMax = False       '最大値
        .IsMin = False       '最小値
        .IsStdDev = False    '標準偏差
        .IsSum = False       '合計値
        .IsVar = False       '分散
    End With
    
    '各ポリゴンの属性テーブルに、そのポリゴン内に含まれるポイント フィーチャの数値属性の集計値を追加します。また、新規フィールド「Count」に各ポリゴンに含まれるポイント フィーチャの数を格納します。
    Dim pOutFeatureClass As IFeatureClass
    'Set pOutFeatureClass = pSpatialJoin.JoinWithin(pDatasetName)
    
    Dim maxMapDist As Double
    maxMapDist = -1
    
    '各ポリゴンに、そのポリゴン境界と最近隣関係にあるすべてのポイントの属性を与え、distance フィールドにポリゴン境界とポイントの距離をターゲット レイヤーの単位で格納します。
    'Set pOutFeatureClass = pSpatialJoin.JoinAggregate(pDatasetName, maxMapDist)
    'Set pOutFeatureClass = pSpatialJoin.JoinNearest(pDatasetName, maxMapDist)
    
End Sub
  • この記事を書いた人

羽田 康祐

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

-プログラミング, ArcGIS
-