Skip to content

Instantly share code, notes, and snippets.

@joshes
Forked from aramonc/distance.sql
Created March 21, 2017 20:53
Show Gist options
  • Save joshes/9027a7391377a8a86e5bb7b20f7d43fc to your computer and use it in GitHub Desktop.
Save joshes/9027a7391377a8a86e5bb7b20f7d43fc to your computer and use it in GitHub Desktop.
MySQL function to calculate the distance between two coordinates using the Haversine formula. Leaving it here for future reference.
DELIMITER $$
CREATE FUNCTION `haversine` (lat1 DECIMAL(8,6), lng1 DECIMAL(8,6), lat2 DECIMAL(8,6), lng2 DECIMAL(8,6)) RETURNS DECIMAL(8,6)
BEGIN
DECLARE R INT;
DECLARE dLat DECIMAL(30,15);
DECLARE dLng DECIMAL(30,15);
DECLARE a1 DECIMAL(30,15);
DECLARE a2 DECIMAL(30,15);
DECLARE a DECIMAL(30,15);
DECLARE c DECIMAL(30,15);
DECLARE d DECIMAL(30,15);
SET R = 3959; -- Earth's radius in miles
SET dLat = RADIANS( lat2 ) - RADIANS( lat1 );
SET dLng = RADIANS( lng2 ) - RADIANS( lng1 );
SET a1 = SIN( dLat / 2 ) * SIN( dLat / 2 );
SET a2 = SIN( dLng / 2 ) * SIN( dLng / 2 ) * COS( RADIANS( lng1 )) * COS( RADIANS( lat2 ) );
SET a = a1 + a2;
SET c = 2 * ATAN2( SQRT( a ), SQRT( 1 - a ) );
SET d = R * c;
RETURN d;
END$$
DELIMITER ;
@joshes
Copy link
Author

joshes commented Mar 21, 2017

R=6371; -- Earth's radius in Km
R=6371000; -- Earth's radius in metres

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment