How to Build a Simple Distance Checker between 2 UK Postcodes into Your Access Database
Posted: Friday, May 29, 2009
by Michael Jillions
Mill House Data Solutions Ltd
Being able to determine the distance between two places is of an enormous benefit in many software applications. There are simply hundreds of uses and we at Mill House Data Solutions have used it to great effect many, many times. There are online companies who can offer, for a subscription, automated access to their distance check software but this will not only cost, but will rely on internet access as well.
So how do we do it? The method uses the "Haversine" formula which assumes that the Earth is a sphere. OK we know that the Earth is not a perfect sphere, but when you are checking between two map co-ordinates it is more than accurate enough for these purposes.
OK so without going into the technicalities of how the formula works, we shall get straight on with the coding requirements for VBA.
You will need a table in your application containing all the UK postcode variations and the X & Y axis co-ordinates. We would be very happy to provide a copy.
The following VBA Code attached to the "Calculate Distance" click event is used in a simple form where the user enters the start and end postcodes and the distance is calculated.
txtPostCodeStart and txtPostCodeEnd are blank text boxes for entering your criteria.
txtStartLat, txtEndLat, txtStartLong and txtEndLong are text boxes that are automatically populated through the"after update" event on the text boxes "txtPostCodeStart" and "txtPostCodeEnd" using simple RecordSet vba programming.
Private Sub caldistance_Click()
On Error GoTo Err_caldistance_Click
If Me.TxtPostCodeStart = "" Then
MsgBox ("Please enter a Start Post Code")
Exit Sub
End If
If Me.TxtPostCodeEnd = "" Then
MsgBox ("Please enter an End Post Code")
Exit Sub
End If
Distance = (Sin((Me.TxtEndLat * 3.14159265358979) / 180)) * (Sin((Me.TxtStartLat * _
3.14159265358979) / 180)) + (Cos((Me.TxtEndLat * 3.14159265358979) / 180)) * _
((Cos((Me.TxtStartLat * 3.14159265358979) / 180))) * _
(Cos((Me.TxtStartLong - Me.TxtEndLong) * (3.14159265358979 / 180)))
Distance = 6371 * (Atn(-Distance / Sqr(-Distance * Distance + 1)) + 2 * Atn(1))
Me.TxTDistance = Distance
Exit_caldistance_Click:
Exit Sub
Err_caldistance_Click:
MsgBox Err.Description
Resume Exit_caldistance_Click
End Sub
Whilst we have demonstrated a simple form, the basic formula is there to be used in a host of different ways. We hope you will find this as useful as we have!
This Article has been viewed 685 times. (Not updated in real-time.)
Top-level comments on this article: (1 total)Ummmmmm....very interesting!
We want your comments! If you can read this, you don't have javascript enabled, so you can't use this comment system. Please enable javascript.
