Advertisement
Guest User

Untitled

a guest
Sep 9th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION calculate_distance_kilometers(lat1 float, lon1 float, lat2 float, lon2 float)
  2. RETURNS float AS $dist$
  3.     DECLARE
  4.         dist float = 0;
  5.         radlat1 float;
  6.         radlat2 float;
  7.         theta float;
  8.         radtheta float;
  9.     BEGIN
  10.         IF lat1 = lat2 OR lon1 = lon2
  11.             THEN RETURN dist;
  12.         ELSE
  13.             radlat1 = pi() * lat1 / 180;
  14.             radlat2 = pi() * lat2 / 180;
  15.             theta = lon1 - lon2;
  16.             radtheta = pi() * theta / 180;
  17.             dist = sin(radlat1) * sin(radlat2) + cos(radlat1) * cos(radlat2) * cos(radtheta);
  18.  
  19.             IF dist > 1 THEN dist = 1; END IF;
  20.  
  21.             dist = acos(dist);
  22.             dist = dist * 180 / pi();
  23.             dist = dist * 60 * 1.1515 * 1.609344;
  24.  
  25.             RETURN dist;
  26.         END IF;
  27.     END;
  28.     $dist$
  29.     LANGUAGE plpgsql;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement