'基本レイヤ(0):変数末尾にB(Base)を付与 '比較レイヤ(1):変数末尾にC(Comparison)を付与 Sub subCompleteContain() On Error GoTo Error 'ThisDocumentの取得 Dim pMxDocument As IMxDocument Set pMxDocument = ThisDocument '基本レイヤ Dim pFeatureLayerB As IFeatureLayer Set pFeatureLayerB = pMxDocument.FocusMap.Layer(0) '比較レイヤ Dim pFeatureLayerC As IFeatureLayer Set pFeatureLayerC = pMxDocument.FocusMap.Layer(1) 'フィーチャカーソルの取得 Dim pFeatureCursorB As IFeatureCursor Set pFeatureCursorB = pFeatureLayerB.FeatureClass.Search(Nothing, True) '検索用ジオメトリの取得 Dim pFeatureB As IFeature Set pFeatureB = pFeatureCursorB.NextFeature Dim pGeometryBagB As IGeometryCollection Set pGeometryBagB = New GeometryBag Do Until pFeatureB Is Nothing pGeometryBagB.AddGeometry pFeatureB.ShapeCopy Set pFeatureB = pFeatureCursorB.NextFeature Loop '検索用ジオメトリに対して空間インデックスの作成 Dim pSpatialIndexB As ISpatialIndex Set pSpatialIndexB = pGeometryBagB pSpatialIndexB.AllowIndexing = True pSpatialIndexB.Invalidate '空間検索フィルタ用空間参照の取得 Dim pGeoDatasetB As IGeoDataset Set pGeoDatasetB = pFeatureLayerB Dim pSpatialReferenceB As ISpatialReference Set pSpatialReferenceB = pGeoDatasetB.SpatialReference '空間検索フィルタの作成 Dim pSpatialFilter As ISpatialFilter Set pSpatialFilter = New SpatialFilter '検索条件の変更(基本ジオメトリがPolylineの場合とそれ以外の場合) Dim sSpatialRelDescription As String If pFeatureLayerB.FeatureClass.ShapeType = esriGeometryPolyline Then sSpatialRelDescription = "TF**FF***" Else sSpatialRelDescription = "T***FF***" End If With pSpatialFilter Set .Geometry = pGeometryBagB Set .Geometry.SpatialReference = pSpatialReferenceB .GeometryField = pFeatureLayerB.FeatureClass.ShapeFieldName .SearchOrder = esriSearchOrderSpatial .SpatialRel = esriSpatialRelRelation .SpatialRelDescription = sSpatialRelDescription End With 'フィーチャを選択 Dim pFeatureSelection As IFeatureSelection Set pFeatureSelection = pFeatureLayerC pFeatureSelection.SelectFeatures pSpatialFilter, esriSelectionResultNew, False pMxDocument.ActiveView.Refresh Exit Sub Error: MsgBox Err.Description End Sub
ArcMap 空間検索の「を完全に含む」
2016/9/1 (木)