Home Code Calculate distance between two points (Latitude / Longitude)

Calculate distance between two points (Latitude / Longitude)

1035
0

This is a useful script for calculating the distance between two points using their coordinates.

Very useful as part of a Lookup function.  I can see many applications for this code. 

Note: read the notes in the code carefully so you implement it correctly the first time.  Original code location: here

The code below isn’t perfect by the way.  Check out this page if you want to know more about the math and special cases for calculating distance.

What’s that you say? You need a coordinates database? This one is pretty good: http://download.geonames.org/export/zip/

Here is a site with an ASP function for pulling coordinates via a client browser’s IP address: http://forum.ipinfodb.com/viewtopic.php?f=7&t=269

<%

‘  This routine calculates the distance between two points
‘ (given the  latitude/longitude of those points). It is being
‘used to calculate  distance between two ZIP Codes or Postal
‘Codes using our    ZIPCodeWorld(TM) and PostalCodeWorld(TM)
‘ products.
‘Definitions
‘    South latitudes are negative, east longitudes are
‘positive          

‘  Passed to function
‘lat1, lon1 = Latitude and Longitude of point 1
‘(in decimal degrees)
‘lat2, lon2 = Latitude and Longitude of point 2
‘(in decimal degrees)
‘unit = the unit you desire for results
‘where ‘M’ is statute miles (default)
”K’ is kilometers
‘N’ is nautical miles
”United States ZIP Code/ Canadian Postal Code databases with
‘latitude & longitude are available at
‘http//www.zipcodeworld.com
‘For enquiries, please contact sales@zipcodeworld.com  

‘Official Web site http//www.zipcodeworld.com

‘Hexa Software Development Center ¸ All Rights Reserved 2003

const pi = 3.14159265358979323846

Function distance(lat1, lon1, lat2, lon2, unit)
  Dim theta, dist
  theta = lon1 – lon2
  dist = sin(deg2rad(lat1)) * sin(deg2rad(lat2)) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * cos(deg2rad(theta))
  dist = acos(dist)
  dist = rad2deg(dist)
  distance = dist * 60 * 1.1515
  Select Case ucase(unit)
    Case “K”
      distance = distance * 1.609344
    Case “N”
      distance = distance * 0.8684
  End Select
End Function

‘  This function get the arccos function from arctan function

Function acos(rad)
  If Abs(rad) <> 1 Then
    acos = pi/2 – Atn(rad / Sqr(1 – rad * rad))
  ElseIf rad = -1 Then
    acos = pi
  End If
End function

‘  This function converts decimal degrees to radians

Function deg2rad(Deg)
 deg2rad = cdbl(Deg * pi / 180)
End Function


‘  This function converts radians to decimal degrees

Function rad2deg(Rad)
 rad2deg = cdbl(Rad * 180 / pi)
End Function

‘Demo
response.write distance(32.9697, -96.80322, 29.46786, -98.53506, “M”) & ” Miles<br>”
response.write distance(32.9697, -96.80322, 29.46786, -98.53506, “K”) & ” Kilometers<br>”
response.write distance(32.9697, -96.80322, 29.46786, -98.53506, “N”) & ” Nautical Miles<br>”

%>

LEAVE A REPLY

Please enter your comment!
Please enter your name here