Welcome to MapForums!

When you are signed in, this message, the ads in this row, and the red-underlined link ads all go away.

## Reverse Geocoding, Pt. III

This is a discussion on Reverse Geocoding, Pt. III within the MP2K Magazine Articles forums, part of the Map Forums category; Walt Cygan, a frequent contributor of late, submits this solution for tackling reverse geocoding Read the full article: http://www.mp2kmag.com/articles.asp?ArticleID=50...

1. Senior Member Black Belt
Join Date
Jul 2002
Posts
5,137

## Reverse Geocoding, Pt. III

Walt Cygan, a frequent contributor of late, submits this solution for tackling reverse geocoding

2. Member Yellow Belt
Join Date
Feb 2003
Posts
48
I have a similar/simpler/less accurate(but good enough for my purposes) method which I call when a point on the map is clicked, passing in the location's X and Y values:

Code:
```Function FindNearestAddress&#40;locX As Long, locY As Long&#41; As String
'Mossoft2003
Dim dblTolerance    As Double
Dim blnFound        As Boolean
Dim lngCount        As Long
Dim fr      As MapPoint.FindResults
Dim obj     As Object
Dim lngAttempt  As Long
Dim ToleranceStep   As Long
Dim dX      As Long
Dim dY      As Long
Const ALTITUDE_LIMIT = 15

On Error Resume Next

If mapWhere.ActiveMap.Altitude < ALTITUDE_LIMIT Then

blnFound = False
lngAttempt = 0
ToleranceStep = ALTITUDE_LIMIT - mapWhere.ActiveMap.Altitude
dX = locX
dY = locY

Do
Set fr = mapWhere.ActiveMap.ObjectsFromPoint&#40;dX, dY&#41;
For Each obj In fr
If Not sa Is Nothing Then
FindNearestAddress = sa.Value & " &#40;" & CStr&#40;mapWhere.ActiveMap.Distance&#40;mapWhere.ActiveMap.XYToLocation&#40;locX, locY&#41;, obj&#41;&#41; & " miles&#41;"
blnFound = True
Exit For
End If
Next
If blnFound Then Exit Do
lngAttempt = lngAttempt + 1
Select Case lngAttempt Mod 8
Case 1
dX = locX
dY = locY + ToleranceStep
Case 2
dX = locX + ToleranceStep
dY = locY + ToleranceStep
Case 3
dX = locX + ToleranceStep
dY = locY
Case 4
dX = locX + ToleranceStep
dY = locY - ToleranceStep
Case 5
dX = locX
dY = locY - ToleranceStep
Case 6
dX = locX - ToleranceStep
dY = locY - ToleranceStep
Case 7
dX = locX - ToleranceStep
dY = locY
Case 0
dX = locX - ToleranceStep
dY = locY + ToleranceStep
ToleranceStep = ToleranceStep + 1
End Select
Loop While Not blnFound And ToleranceStep < &#40;2 * ALTITUDE_LIMIT&#41;
End If

FNA_Exit&#58;
Exit Function
FNA_Error&#58;
Debug.Print "ERROR&#58; " & Err.Description
Resume FNA_Exit

End Function```
The search pattern is an 8 pointed star eminating, and spiralling out, from the original point.
The altitude check is to ensure the view point is low enough to display address level locations.

M.