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