FAQ
IBasicGeoprocessorを使用して2つのフィーチャレイヤをインターセクトする方法

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

【概要】

IBasicGeoprocessorは5つのメソッド(Dissolve, Merge, Clip, Intersect, Union)を持っています。Intersectはオーバーレイレイヤのポリゴンで入力レイヤのラインやポリゴンをオーバーレイすることによって新規フィーチャクラスを作成します。出力フィーチャクラスは入力レイヤの両方の属性を結合し、オーバ-レイポリゴン内部に含まれるフィーチャのみが出力されます。


【手順】

Intersectの構文は以下の通りです。


Set variable = object.Intersect(InputTable, useSelectedInput, overlayTable, _
                                       useSelectedOverlay, Tolerance, outputName) 



variable -IFeatureClassインタフェースを実装するオブジェクトへの参照
object - BasicGeoprocessorオブジェクトを評価するオブジェクト式
InputTable - 入力用Tableオブジェクト
useSelectedInput - 入力レイヤの選択状態を表すBoolean式。
InputTableの選択サブセットのみインターセクトするかどうかを指定します。
Falseに設定するとInputTableで選択されているサブセットが無視されます。
overlayTable - オーバーレイ用Tableオブジェクト
useSelectedOverlay - オーバーレイレイヤの選択状態を表すBoolean式。
overlayTableの選択サブセットのみ使用するかどうかを指定します。
Falseに設定するとoverlayTableで選択されているサブセットが無視されます。
Tolerance - インターセクト許容値を表すDouble型の値。
データ・フレームの範囲の1/10,000であるデフォルト許容値を使用するには0.0を渡してください。
outputName - 出力用FeatureClassNameオブジェクト

VBAのサンプル:


Public Sub Intersect()

  ' 入力レイおよびフィーチャクラスを取得します。
  Dim pMxDoc As IMxDocument
  Set pMxDoc = ThisDocument
  Dim pLayer As ILayer
  Set pLayer = pMxDoc.FocusMap.Layer(0)
  Dim pInputFeatLayer As IFeatureLayer
  Set pInputFeatLayer = player

  ' LayerからITableインタフェースを使用します。
  Dim pInputTable As ITable
  Set pInputTable = player

  ' 入力フィーチャクラスを取得します。
  ' シェープタイプのような入力フィーチャクラスのプロパティは出力の際に必要となります。
  Dim pInputFeatClass As IFeatureClass
  Set pInputFeatClass = pInputFeatLayer.FeatureClass

  ' オーバーレイレイヤを取得します。
  ' LayerからITableインタフェースを使用します。
  Set pLayer = pMxDoc.FocusMap.Layer(1)
  Dim pOverlayTable As ITable
  Set pOverlayTable = pLayer

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

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

  ' 出力用FeatureClassNameと、入力フィーチャクラスのプロパティから得られる

' シェープタイプを定義します。 Dim pFeatClassName As IFeatureClassName Set pFeatClassName = New FeatureClassName With pFeatClassName .FeatureType = esriFTSimple .ShapeFieldName = "Shape" .ShapeType = pInputFeatClass.ShapeType End With ' 出力先フォルダ及びシェープファイル名を設定します。 Dim pNewWSName As IWorkspaceName Set pNewWSName = New WorkspaceName pNewWSName.WorkspaceFactoryProgID = "esriCore.ShapeFileWorkspaceFactory.1" pNewWSName.PathName = "C:\temp" Dim pDatasetName As IDatasetName Set pDatasetName = pFeatClassName pDatasetName.Name = "Intersect_result" Set pDatasetName.WorkspaceName = pNewWSName ' 許容値を設定します。0.0を設定するとデフォルト許容値が使用されます。 ' デフォルト許容値はデータフレームの空間範囲の1/10,000です。 Dim tol As Double tol = 0# ' インターセクトを実行します。 Dim pBGP As IBasicGeoprocessor Set pBGP = New BasicGeoprocessor Dim pOutputFeatClass As IFeatureClass Set pOutputFeatClass = pBGP.intersect(pInputTable, False, pOverlayTable, False, _
  tol, pFeatClassName) ' 出力シェープファイルをArcMapへ追加します。 Dim pOutputFeatLayer As IFeatureLayer Set pOutputFeatLayer = New FeatureLayer Set pOutputFeatLayer.FeatureClass = pOutputFeatClass pOutputFeatLayer.Name = pOutputFeatClass.AliasName pMxDoc.FocusMap.AddLayer pOutputFeatLayer End Sub

メタデータ

機能

種類

製品