Skip to content

Instantly share code, notes, and snippets.

@romanitalian
Forked from carlzulauf/haversine.sql
Last active September 28, 2017 14:14
Show Gist options
  • Save romanitalian/6618f992c6a350902cbb28922a543ab8 to your computer and use it in GitHub Desktop.
Save romanitalian/6618f992c6a350902cbb28922a543ab8 to your computer and use it in GitHub Desktop.
PostgreSQL function for haversine distance calculation, in miles
-- Haversine Formula based geodistance in miles (constant is diameter of Earth in miles)
-- Based on a similar PostgreSQL function found here: https://gist.github.com/831833
-- Updated to use distance formulas found here: http://www.codecodex.com/wiki/Calculate_distance_between_two_points_on_a_globe
CREATE OR REPLACE FUNCTION public.geodistance(alat double precision, alng double precision, blat double precision, blng double precision)
RETURNS double precision AS
$BODY$
SELECT asin(
sqrt(
sin(radians($3-$1)/2)^2 +
sin(radians($4-$2)/2)^2 *
cos(radians($1)) *
cos(radians($3))
)
-- ) * 7926.3352 AS distance; -- miles
) * 12755.660544 AS distance; -- km
$BODY$
LANGUAGE sql IMMUTABLE
COST 100;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment