SQL = "SELECT [uid], [username], [zipcode], [lat], [lng] FROM [users];"
adoConn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0; DATA SOURCE=" & Server.MapPath("users.mdb") & "; User ID=admin; Password=;"
adoRS.Open SQL,adoConn, 1, 1
Dim arrUsers(), r
arrUsers = adoRS.GetRows
Set adoRS = Nothing
Set adoConn = Nothing
Dim arrDistance()
ReDim arrDistance(4, UBound(arrUsers))
r = 0
For r = LBound(arrUsers) To UBound(arrUsers)
'User Name
arrDistance(0, r) = arrUsers(1, r)
'UID
arrDistance(1, r) = arrUsers(0, r)
'ZipCode
arrDistance(2, r) = arrUsers(2, r)
'Distance
arrDistance(3, r) = CStr(Round(Distance(strMyLat, strMyLng, arrUsers(3, r), arrUsers(4, r)), 1))
Next
Function Distance(Latitude1, Longitude1, Latitude2, Longitude2)
Dim R, Lat, Lon, a, c
'Radius of the Earth (Miles)
R = 3956.4538
'Calculate the Deltas...
Lon = AsRadians(Longitude2) - AsRadians(Longitude1)
Lat = AsRadians(Latitude2) - AsRadians(Latitude1)
'Intermediate values...
a = Sin2(Lat / 2) + Cos(AsRadians(Latitude1)) * Cos(AsRadians(Latitude2)) * Sin2(Lon / 2)
'Intermediate result c is the great circle distance in radians...
c = 2 * Arcsin(GetMin(1, Sqr(a)))
'Multiply the radians by the radius to get the distance in specified units...
Distance = R * c
End Function
Function AsRadians(Degrees)
'To convert decimal degrees to radians, multiply
'the number of degrees by pi/180 = 0.017453293 radians/degree
AsRadians = Degrees * (3.14159265358979 / 180)
End Function
Function Sin2(X)
Sin2 = (1 - Cos(2 * X)) / 2
End Function
Function Arcsin(X)
Arcsin = Atn(X / Sqr(-X * X + 1))
End Function
Function GetMin(X, Y)
If X <= Y Then
GetMin = X
Else
GetMin = Y
End If
End Function