LatLonDist User Defined Function (UDF)
by Tom Nunamaker (Contact me)
Home

Description
Calculates the distance (in statute miles, nautical miles, kilometers or radians) between two latitude/longitude coordinates

Example

Suppose point 1 is LAX: (33deg 57min N, 118deg 24min W)
Suppose point 2 is JFK: (40deg 38min N,  73deg 47min W)

Lat1 = 33.95  --> from 33 + 57/60
Lon1 = 118.4  --> from 118 + 24/60
Lat2 = 40.63333  --> from 40 + 38/60
Lon2 = 73.7833  --> from 73 + 47/60

Distance = #LatLonDist(lat1,lon1,lat2,lon2,'nm')# nautical miles
Distance = #LatLonDist(lat1,lon1,lat2,lon2,'sm')# statute miles
Distance = #LatLonDist(lat1,lon1,lat2,lon2,'km')# kilometers
Distance = #LatLonDist(lat1,lon1,lat2,lon2,'radians')# radians

Output

Distance = 2143.72762906 nautical miles
Distance = 2466.95769763 statute miles
Distance = 3970.18356901 kilometers
Distance = 0.623585089884 radians

<CFSCRIPT>
/**
 * Calculates the distance (in statute miles, nautical miles, kilometers or radians) between two latitude/longitude coordinates.
 * This function uses forumlae from Ed Williams Aviation Foundry website at http://williams.best.vwh.net/avform.htm.      
 * 
 * @param lat1 	 Latitude of first point in degrees. 
 * @param lon1 	 Longitude of first point in degrees. 
 * @param lat2 	 Latitude of second point in degrees. 
 * @param lon2 	 Longitude of second point in degrees. 
 * @param units 	 Unit to return distance in.  Options are km (kilometers), sm (statute miles), nm (nautical miles) or radians (radians).
 * @return Returns a simple value or a string to notify of incorrect parameters being passed. 
 * @author Tom Nunamaker (Contact me)
 * @version 1.0, February 10, 2002
 */
function LatLonDist(lat1,lon1,lat2,lon2,units)
{
  // Check to make sure latitutdes and longitudes are valid
  if(lat1 GT 90 OR lat1 LT -90 OR
     lon1 GT 180 OR lon1 LT -180 OR
     lat2 GT 90 OR lat2 LT -90 OR
     lon2 GT 280 OR lon2 LT -280) {
    Return ("Incorrect parameters");
  }

  lat1 = lat1 * pi()/180;
  lon1 = lon1 * pi()/180;
  lat2 = lat2 * pi()/180;
  lon2 = lon2 * pi()/180;
  UnitConverter = 1.150779448;  //standard is statute miles
  if(units eq 'nm') {
    UnitConverter = 1.0;
  }
  
  if(units eq 'km') {
    UnitConverter = 1.852;
  }
  
  distance = 2*asin(sqr((sin((lat1-lat2)/2))^2 + cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2));  //radians
  
  if(units neq 'radians'){
    distance = UnitConverter * 60 * distance * 180/pi();
  }
  
  Return (distance) ;
}
</CFSCRIPT>

Home  |   Email and Web Hosting  |   Find your IP address    ICAO  |   Math
Copyright 2009, All rights reserved.
Maintained by Tom Nunamaker