This is a quick and dirty code sample for reverse address matching of point locations. It was adapted from a post on the ESRI support forum to allow the reverse geocode result (an address) to be stored as an attribute for each selected feature.
The code requires that an address locator has been created and added to your ArcMap project
Private Sub reverseGeocodeSelectedPoints()
Dim addressLocatorPath As String Dim addressLocatorName As String Dim pointLayerIndex As Integer Dim pointAddressFieldName As String
'******Set these Parameters
addressLocatorPath = "c:\" 'address locator path addressLocatorName = "AddressLocator93" 'Address locator name pointLayerIndex = 0 'layer position in the ArcMap Table of Contents pointAddressFieldName = "RevAddress" 'field where the results should be stored
'******
Dim pMxDoc As IMxDocument Dim pMap As IMap Dim pFL As IFeatureLayer Dim pFS As IFeatureSelection Dim pFC As IFeatureClass Dim pFeature As IFeature Dim pFCursor As IFeatureCursor Dim pFeatureSelection As IFeatureSelection Dim pSelSet As ISelectionSet
Dim pLocatorManager As esriLocation.ILocatorManager2 Dim pLocatorWorkspace As esriGeoDatabase.ILocatorWorkspace Dim pReverseGeocoding As esriLocation.IReverseGeocoding Dim pPoint As esriGeometry.IPoint
Dim pAddressGeocoding As esriLocation.IAddressGeocoding Dim pMatchFields As esriGeoDatabase.IFields Dim pShapeField As esriGeoDatabase.IField Dim pReverseGeocodingProperties As esriLocation.IReverseGeocodingProperties Dim pAddressProperties As esriSystem.IPropertySet Dim pAddressInputs As esriLocation.IAddressInputs Dim pAddressFields As esriGeoDatabase.IFields Dim lngAddressFieldIndex As Long Dim pAddressField As esriGeoDatabase.IField
'+++ get the Locator Set pLocatorManager = New esriLocation.LocatorManager Set pLocatorWorkspace = pLocatorManager.GetLocatorWorkspaceFromPath(addressLocatorPath) Set pReverseGeocoding = pLocatorWorkspace.GetLocator(addressLocatorName) If pLocatorWorkspace.Locators(esriAllTypes, "Address").Count <= 0 Then MsgBox ("Please add Geocoding Service to your document."), vbExclamation End If
Set pAddressGeocoding = pReverseGeocoding Set pMatchFields = pAddressGeocoding.MatchFields Set pShapeField = pMatchFields.Field(pMatchFields.FindField("Shape"))
'+++ set the search tolerance for reverse geocoding Set pReverseGeocodingProperties = pReverseGeocoding pReverseGeocodingProperties.SearchDistance = 50 pReverseGeocodingProperties.SearchDistanceUnits = esriMeters
Set pMxDoc = ThisDocument Set pMap = pMxDoc.FocusMap Set pFL = pMap.Layer(pointLayerIndex) Set pFS = pFL Set pSelSet = pFS.SelectionSet
pSelSet.Search Nothing, True, pFCursor Set pFeature = pFCursor.NextFeature
Do Until pFeature Is Nothing
Set pPoint = pFeature.Shape
'+++ find the address nearest the the Point Set pAddressProperties = pReverseGeocoding.ReverseGeocode(pPoint, False)
'+++ print the address properties Set pAddressInputs = pReverseGeocoding Set pAddressFields = pAddressInputs.AddressFields For lngAddressFieldIndex = 0 To pAddressFields.FieldCount - 1 Set pAddressField = pAddressFields.Field(lngAddressFieldIndex) If instr(pAddressField.AliasName,"Address") > 0 Then pFeature.Value(pFeature.Fields.FindField(pointAddressFieldName)) = _ pAddressProperties.GetProperty(pAddressField.Name) pFeature.Store Exit For End If Next lngAddressFieldIndex