After Kathy Brown wrote about lists earlier today, I thought I would share another example of how they can be used. Back in April I shared some code showing how to get latitude and longitude for an address, by calling Google's GeoCode REST service.
Today I will show how easy it is to use that class together with a list...
First, let's revisit the GeoCode class. I made some minor modifications, so I will post the latest version here:
Class GeoData
Private GeoString As String
Public street As String
Public city As String
Public zip As String
Public state As String
Public latitude As String
Public longitude As String
Public Sub New(streetStr As String, cityStr As String, stateStr As String, zipStr As String)
Dim httpObject As Variant
Dim mapsKey As String
Dim mapsURL As String
Dim address As String
Dim retries As Integer
Dim httpURL As String
Dim returncode As String
Dim coordinates As String
Dim ret As Integer
Dim xmladdress As String
Dim addarray As Variant
retries = 0
Set httpObject = CreateObject("MSXML2.ServerXMLHTTP")
mapsKey = "your_googleAPI_key"
mapsUrl = "http://maps.google.com/maps/geo?q="
address = streetStr & ", " & cityStr & ", " & stateStr & " " & zipStr
httpURL = mapsURL & address & "&output=xml&key=" & mapsKey ' Use output=CSV for CVS file
Do
If retries>1 Then
Sleep 1 ' After the two first calls, introduce a 1 second delay betwen each additional call
End If
retries = retries + 1
Call httpObject.open("GET", httpURL, False)
Call httpObject.send()
GeoString = Left$(httpObject.responseText,16000)
returncode = GetGeoValue("code")
If retries >= 10 Then
returncode = "500" ' Fake other failure after 10 attempts
End If
Loop Until returncode <> "620"
If returncode = "200" Then
coordinates = GetGeoValue("coordinates")
latitude = Left$(coordinates, Instr(coordinates,",")-1)
longitude = Mid$(coordinates, Len(latitude)+2, Instr(Len(latitude)+2,coordinates,",")-Len(latitude)-2)
street =GetGeoValue("ThoroughfareName")
zip = GetGeoValue("PostalCodeNumber")
city = GetGeoValue("LocalityName")
state = GetGeoValue("AdministrativeAreaName")
xmladdress = GetGeoValue("address")
If city = "" Then
If state <> "" Then
addarray = R5split(xmladdress,", ")
city = addarray(1)
zip = Right$(addarray(2),5)
End If
End If
If Ucase(state