| |
Option Explicit
Sub Test()
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pPolyFLayer As IFeatureLayer
Set pPolyFLayer = pMxDoc.FocusMap.Layer(1)
Dim pPointFlayer As IFeatureLayer
Set pPointFlayer = pMxDoc.FocusMap.Layer(0)
Dim pEditor As IEditor, pUID As New UID
pUID.Value = "esricore.Editor"
Set pEditor = Application.FindExtensionByCLSID(pUID)
If pEditor.EditState = esriStateEditing Then
pEditor.StartOperation
CountFeatures pPolyFLayer.FeatureClass, pPointFlayer.FeatureClass, _
esriSpatialRelContains, "POP1990"
pEditor.StopOperation "PolygonDensity"
Else
Debug.Print "no edit session"
End If
End Sub
Sub CountFeatures(pFC1 As IFeatureClass, _
pFC2 As IFeatureClass, _
lSpatialRel As esriSpatialRelEnum, _
strCountFld As String)
Dim pFCur As IFeatureCursor
Set pFCur = pFC1.Search(Nothing, False)
Dim lFld As Long
lFld = pFC1.FindField(strCountFld)
If lFld = -1 Then
Debug.Print "field not found: " & strCountFld
Exit Sub
End If
Dim pFeat As IFeature
Set pFeat = pFCur.NextFeature
Do While Not pFeat Is Nothing
Dim pSF As ISpatialFilter
Set pSF = New SpatialFilter
Set pSF.Geometry = pFeat.ShapeCopy
pSF.SpatialRel = lSpatialRel
pSF.GeometryField = pFC2.ShapeFieldName
pFeat.Value(lFld) = pFC2.FeatureCount(pSF)
Debug.Print "OID: " & pFeat.OID & ", count: " & pFeat.Value(lFld)
pFeat.Store
Set pFeat = pFCur.NextFeature
Loop
End Sub
|