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')# radiansOutput
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>