FAQ
IBasicGeoprocessorを使用して2つのフィーチャレイヤをマージする方法

ナレッジ番号:5240 | 登録日:2023/07/26 | 更新日:2023/12/28

【概要】

IBasicGeoprocessorインタフェースは5つのメソッド(Dissolve, Merge, Clip, Intersect, Union)を持っています。
これらのメソッドはVBAやVBから使用します。

Mergeメソッドは同じジオメトリタイプの2つ以上のデータを結合し、新規フィーチャクラスを作成します。


【手順】

Mergeメソッドの構文は以下の通りです。

Set variable = object.Merge (Tables, fieldsTable, outputName)

variable -IFeatureClassインタフェースを実装するオブジェクトへの参照
object - BasicGeoprocessorオブジェクトを評価するオブジェクト式
Tables - マージするテーブルのArrayオブジェクト
fieldsTable - 出力フィーチャクラス内のフィールドを決定するために使用するTableオブジェクト
outputName - 出力FeatureClassNameオブジェクト

VBAのサンプル:


Public Sub Merge()
  ' マップ内の最上位レイヤを取得します。
  Dim pMxDoc As IMxDocument
  Set pMxDoc = ThisDocument
  Dim pLayer As ILayer
  Set pLayer = pMxDoc.FocusMap.Layer(0)
  Dim pFeatLayer As IFeatureLayer
  Set pFeatLayer = pLayer
  Dim pFirstFeatClass As IFeatureClass
  Set pFirstFeatClass = pFeatLayer.FeatureClass

  ' 最上位レイヤのテーブルを取得します。
  ' そのためにLayerオブジェクトのITableインタフェースにQIします。
  ' このテーブルは出力の際に使用されるフィールドを定義します。
  Dim pFirstTable As ITable
  Set pFirstTable = pLayer

  ' 上から2番目のレイヤを取得し、そのテーブルを取得します。
  ' そのためにLayerオブジェクトのITableインタフェースにQIします。
  Set pLayer = pMxDoc.FocusMap.Layer(1)
  Dim pSecondTable As ITable
  Set pSecondTable = pLayer

  ' エラー・チェック
  If pFirstTable Is Nothing Then
    MsgBox "テーブルが見つかりません"
    Exit Sub
  End If

  If pSecondTable Is Nothing Then
    MsgBox "テーブルが見つかりません"
    Exit Sub
  End If

  ' 出力用FeatureClassNameとそのシェープタイプを定義します。
  Dim pFeatClassName As IFeatureClassName
  Set pFeatClassName = New FeatureClassName
  
  With pFeatClassName
    .FeatureType = esriFTSimple
    .ShapeFieldName = "Shape"
    .ShapeType = pFirstFeatClass.ShapeType
  End With

  ' 出力先フォルダおよびシェープファイル名を設定します。
  Dim pNewWSName As IWorkspaceName
  Set pNewWSName = New WorkspaceName

  With pNewWSName
    .WorkspaceFactoryProgID = "esriCore.ShapefileWorkspaceFactory.1"
    .PathName = "C:\temp"
  End With

  Dim pDatasetName As IDatasetName
  Set pDatasetName = pFeatClassName
  pDatasetName.Name = "Merge_result"

  Set pDatasetName.WorkspaceName = pNewWSName

' マージするレイヤを含んだ配列を作成します。 Dim inputArray As IArray Set inputArray = New esriCore.Array 'ArcGIS 9.xの場合:New esriSystem.Array inputArray.Add pFirstTable inputArray.Add pSecondTable ' マージを実行します。 Dim pBGP As IBasicGeoprocessor Set pBGP = New BasicGeoprocessor Dim pOutputFeatClass As IFeatureClass Set pOutputFeatClass = pBGP.Merge(inputArray, pFirstTable, pFeatClassName)
' マージしたシェープファイルをArcMapへ追加します。 Dim pOutputFeatLayer As IFeatureLayer Set pOutputFeatLayer = New FeatureLayer Set pOutputFeatLayer.FeatureClass = pOutputFeatClass pOutputFeatLayer.Name = pOutputFeatClass.AliasName pMxDoc.FocusMap.AddLayer pOutputFeatLayer End Sub

メタデータ

種類

製品