如何进行空间查询
本例实现的是在一个图层上画一个polygon,根据该polygon查询出图层上与之相交的polygon并高亮显示出来。
要点
通过RubberPolygon类来实现接口IRubberBand接口对象,用IRubberBand.TrackNew方法在图层上画出polygon,然后定义IGeometry获得该polygon,创建ISpatialFilter接口对象实现过滤功能,通过ILayer接口实例获得IFeatureSelection接口,调用IFeatureSelection.SelectFeatures方法将结果高亮显示。
程序说明
过程UIToolControl1_MouseDown是实现模块。
代码
Option Explicit
Private Function UIToolControl1_Deactivate() As Boolean
UIToolControl1_Deactivate = True
End Function
Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, _
ByVal x As Long, ByVal y As Long)
Dim pMxDoc As IMxDocument
Dim pActiveView As IActiveView
Dim pScreenDisplay As IScreenDisplay
Dim pRubberPolygon As IRubberBand
Dim pFillSymbol As ISimpleFillSymbol
Dim pRgbColor As IRgbColor
Dim pPolygon As IPolygon
Dim pGeometry As IGeometry
Dim pFeatselect As IFeatureSelection
Dim pSpatialFilter As ISpatialFilter
On Error GoTo ErrorHandler:
Set pMxDoc = ThisDocument
Set pActiveView = pMxDoc.FocusMap
'Draw Polygon
Set pScreenDisplay = pActiveView.ScreenDisplay
Set pRubberPolygon = New RubberPolygon
Set pFillSymbol = New SimpleFillSymbol
Set pRgbColor = New RgbColor
pRgbColor.NullColor = True
pFillSymbol.Color = pRgbColor
Set pPolygon = pRubberPolygon.TrackNew(pScreenDisplay, pFillSymbol)
With pScreenDisplay
.StartDrawing pScreenDisplay.hDC, esriNoScreenCache
.SetSymbol pFillSymbol
.DrawPolygon pPolygon
.FinishDrawing
End With
'set up pFilter
Set pGeometry = pPolygon
Set pSpatialFilter = New SpatialFilter
With pSpatialFilter
Set .Geometry = pGeometry
.SpatialRel = esriSpatialRelIntersects
End With
'select
Set pFeatselect = pMxDoc.FocusMap.Layer(0)
pFeatselect.SelectFeatures pSpatialFilter, esriSelectionResultNew, False
pFeatselect.SelectionSet.**
pMxDoc.ActiveView.**
Exit Sub
ErrorHandler:
MsgBox Err.Description
End Sub