Private Sub GeocodeAddress() locatorManager = TryCast(obj, ILocatorManager2) locatorWorkspace = locatorManager.GetLocatorWorkspaceFromPath(gLocatorWorkspace) Dim locator As ILocator = locatorWorkspace.GetLocator("Street_Addresses_US") ' Set up the address properties Dim addressInputs As IAddressInputs = TryCast(locator, IAddressInputs) Dim addressFields As IFields = addressInputs.AddressFields Dim addressProperties As IPropertySet = New PropertySetClass() addressProperties.SetProperty(addressFields.Field(0).Name, txtAddress.Text) addressProperties.SetProperty(addressFields.Field(1).Name, txtCity.Text) addressProperties.SetProperty(addressFields.Field(2).Name, txtState.Text) addressProperties.SetProperty(addressFields.Field(3).Name, txtZIP.Text) ' Match the Address Dim addressGeocoding As IAddressGeocoding = TryCast(locator, IAddressGeocoding) Dim resultSet As IPropertySet = addressGeocoding.MatchAddress(addressProperties) 'Write results to DataGridView Dim names, values As Object ' Not sure how these ever really get populated. They produce a warning where a null reference exception could be produced resultSet.GetAllProperties(names, values) Dim namesArray() As String = TryCast(names, String()) Dim valuesArray() As Object = TryCast(values, Object()) Dim length As Integer = namesArray.Length ' Not terribly sure what this line does. Dim addressPoint As IPoint = Nothing dgvAddrResults.Rows.Add() ' Create DataGridRow to hold result For i As Integer = 0 To length - 1 Select Case namesArray(i) ' Case Statement to write proper fields to DataGrid Columns Case "Status" If valuesArray(i).ToString() = "U" Then lblAddressPrompt.Text = "***Address was not found." lblAddressPrompt.Visible = True Exit Sub End If Case "Shape" addressPoint = TryCast(valuesArray(i), IPoint) If addressPoint IsNot Nothing AndAlso (Not addressPoint.IsEmpty) Then dgvAddrResults.Item("Coordinates", 0).Value = addressPoint.X.ToString & ", " & addressPoint.Y.ToString Else dgvAddrResults.Item("Coordinates", 0).Value = "No geographic point available" End If Case "Score" dgvAddrResults.Item("Score", 0).Value = valuesArray(i).ToString() Case "Match_addr" dgvAddrResults.Item("Address", 0).Value = valuesArray(i).ToString() Case "Addr_type" dgvAddrResults.Item("Type", 0).Value = valuesArray(i).ToString() End Select Next i End Sub
Solved! Go to Solution.
Debug.Print("resultSet.Count = " & resultSet.Count)Dim resultSet As IPropertySet = addressGeocoding.MatchAddress(addressProperties)
Dim length As Integer = namesArray.Length ' Not terribly sure what this line does. Probably does the same thing as resultSet.Count
Private Sub GeocodeAddress()
' Get the locator
Dim obj As System.Object = Activator.CreateInstance(Type.GetTypeFromProgID("esriLocation.LocatorManager"))
Dim locatorManager As ILocatorManager2 = TryCast(obj, ILocatorManager2)
Dim locatorWorkspace As ILocatorWorkspace = locatorManager.GetLocatorWorkspaceFromPath("C:\locators")
Dim locator As ILocator = locatorWorkspace.GetLocator("California_city_state_zip")
' Set up the address properties
Dim addressInputs As IAddressInputs = TryCast(locator, IAddressInputs)
Dim addressFields As IFields = addressInputs.AddressFields
Dim addressProperties As IPropertySet = New PropertySetClass()
addressProperties.SetProperty(addressFields.Field(0).Name, Me.AddressTextBox.Text)
addressProperties.SetProperty(addressFields.Field(1).Name, Me.CityTextBox.Text)
addressProperties.SetProperty(addressFields.Field(2).Name, Me.StateTextBox.Text)
addressProperties.SetProperty(addressFields.Field(3).Name, Me.ZipTextBox.Text)
' Match the Address
Dim addressGeocoding As IAddressGeocoding = TryCast(locator, IAddressGeocoding)
Dim resultSet As IPropertySet = addressGeocoding.MatchAddress(addressProperties)
' Print out the results
Dim names, values As Object
resultSet.GetAllProperties(names, values)
Dim namesArray() As String = TryCast(names, String())
Dim valuesArray() As Object = TryCast(values, Object())
Dim length As Integer = namesArray.Length
Dim point As IPoint = Nothing
For i As Integer = 0 To length - 1
If namesArray(i) <> "Shape" Then
Me.ResultsTextBox.Text += namesArray(i) & ": " & valuesArray(i).ToString() & Constants.vbLf
Else
If point IsNot Nothing AndAlso (Not point.IsEmpty) Then
point = TryCast(valuesArray(i), IPoint)
Me.ResultsTextBox.Text &= "X: " & point.X + Constants.vbLf
Me.ResultsTextBox.Text &= "Y: " & point.Y + Constants.vbLf
End If
End If
Next i
Me.ResultsTextBox.Text += Constants.vbLf
End Sub