Home arrow GIS Data & Resources arrow Scripts and Code arrow Visual Basic / VBA arrow VBA: Reverse Geocode Selected Points
VBA: Reverse Geocode Selected Points PDF Print E-mail

Written by Bert Granberg,

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

        Set pFeature = pFCursor.NextFeature
        
    Loop

End Sub


Users' Comments  
 

No comment posted

Add your comment

06, Apr. 2009
Last Updated ( 06, Apr. 2009 )
 
< Prev   Next >

AGRC Contacts | UGIC Contacts

feed image feed image

Utah GIS Portal © 2009 AGRC

Optimized for