romanitalian
9/28/2017 - 2:11 PM

PostgreSQL function for haversine distance calculation, in miles

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;