Calculating Distance in Miles from Latitude and Longitude
The amount of data out there via API's is increadible these days. For instance you can take an address, and get the latitude and longitude using Google's GeoCoding API.
I am using this API along with some others to build a pretty some interesting stuff (more on that when its public).
Today I needed to calculate the distance between two points, I found a bunch of formulas here to convert two lats and longs into miles. They had some more complicated formulas, but I went with an easier one because approximate accuracy was sufficent. Here's how the formula translated into SQL (tested on MySQL):
SELECT id, place_name, ROUND( SQRT( POW((69.1 * (#Val(arguments.latitude)# - latitude)), 2) + POW((53 * (#Val(arguments.longitude)# - longitude)), 2)), 1) AS distance FROM places ORDER BY distance ASC
I am also rounding it to one decimal place, which you can remove if you want.
Speaking of mileage, if you are looking for a Web Application to track business mileage checkout mileagepad.com
Tweet
add to del.icio.us
| Tags: maps, latitude, longitude, geo, gps, geocoding, sql, mysql, google
Related Entries
- Google's JavaScript API Loader - November 26, 2008
- Cheat Sheet Roundup - Over 30 Cheatsheets for developers - September 1, 2005
- Top 10 Reserved SQL Keywords - October 28, 2008
- INFORMATION_SCHEMA Support in MySQL, PostgreSQL - February 18, 2008
- Backwards LIKE Statements - January 10, 2007
Trackbacks
Comments
if you remember that the lines are drawn on a globe, you'll realise 69.1 is only correct at two exact latitudes, north and south of the equator.
(Greets to bazmod!)
dy = radius * (lat1 - lat0); dx = radius * cos(lat1) * (lon1 - lon0); distance = sqrt(dy*dy + dx*dx)
radius = earth radius lat,lon in radians
# Your lat/long of preferences SET @arguments_latitude = 51.355887; SET @arguments_longitude = -2.949691;
# Make a distance query SELECT p.postcode_id, p.postcode, ROUND( SQRT( POW((69.1 * (@arguments_latitude - p.latitude)), 2) + POW((53 * (@arguments_longitude - p.longitude)), 2) ) , 1) AS distance FROM postcodes p ORDER BY distance DESC;
Post a Comment
Recent Entries
- Writing Secure CFML cfObjective 2013 Slides
- Upgrading to Java 7 on Linux
- J2EE Sessions in CF10 Uses Secure Cookies
- Learn about ColdFusion Security at cfObjective 2013
- Session Loss and Session Fixation in ColdFusion
- FuseGuard 2.3 Released
- CKEditor Spell Checker Plugin
- Adobe Says Go Ahead and Upgrade your ColdFusion JVM





