Repair memory leaks in plpython.
[pgsql.git] / contrib / earthdistance / earthdistance--1.1--1.2.sql
blob40a0ce233d17ca41704d8c4e33b5d4f8ec32b194
1 /* contrib/earthdistance/earthdistance--1.1--1.2.sql */
3 -- complain if script is sourced in psql, rather than via ALTER EXTENSION
4 \echo Use "ALTER EXTENSION earthdistance UPDATE TO '1.2'" to load this file. \quit
6 CREATE OR REPLACE FUNCTION earth() RETURNS float8
7 LANGUAGE SQL IMMUTABLE PARALLEL SAFE
8 RETURN '6378168'::float8;
10 CREATE OR REPLACE FUNCTION sec_to_gc(float8)
11 RETURNS float8
12 LANGUAGE SQL
13 IMMUTABLE STRICT
14 PARALLEL SAFE
15 RETURN CASE
16   WHEN $1 < '0'::float8 THEN '0'::float8
17   WHEN $1 / ('2'::float8 * earth()) > '1'::float8 THEN pi() * earth()
18   ELSE '2'::float8 * earth() * asin($1 / ('2'::float8 * earth()))
19 END;
21 CREATE OR REPLACE FUNCTION gc_to_sec(float8)
22 RETURNS float8
23 LANGUAGE SQL
24 IMMUTABLE STRICT
25 PARALLEL SAFE
26 RETURN CASE
27   WHEN $1 < '0'::float8 THEN '0'::float8
28   WHEN $1 / earth() > pi() THEN '2'::float8 * earth()
29   ELSE '2'::float8 * earth() * sin($1 / ('2'::float8 * earth()))
30 END;
32 CREATE OR REPLACE FUNCTION ll_to_earth(float8, float8)
33 RETURNS earth
34 LANGUAGE SQL
35 IMMUTABLE STRICT
36 PARALLEL SAFE
37 RETURN @extschema:cube@.cube(@extschema:cube@.cube(@extschema:cube@.cube(
38     earth() * cos(radians($1)) * cos(radians($2))),
39     earth() * cos(radians($1)) * sin(radians($2))),
40     earth() * sin(radians($1)))::earth;
42 CREATE OR REPLACE FUNCTION latitude(earth)
43 RETURNS float8
44 LANGUAGE SQL
45 IMMUTABLE STRICT
46 PARALLEL SAFE
47 RETURN CASE
48   WHEN @extschema:cube@.cube_ll_coord($1, 3) / earth() < '-1'::float8 THEN '-90'::float8
49   WHEN @extschema:cube@.cube_ll_coord($1, 3) / earth() > '1'::float8 THEN '90'::float8
50   ELSE degrees(asin(@extschema:cube@.cube_ll_coord($1, 3) / earth()))
51 END;
53 CREATE OR REPLACE FUNCTION longitude(earth)
54 RETURNS float8
55 LANGUAGE SQL
56 IMMUTABLE STRICT
57 PARALLEL SAFE
58 RETURN degrees(atan2(@extschema:cube@.cube_ll_coord($1, 2),
59                      @extschema:cube@.cube_ll_coord($1, 1)));
61 CREATE OR REPLACE FUNCTION earth_distance(earth, earth)
62 RETURNS float8
63 LANGUAGE SQL
64 IMMUTABLE STRICT
65 PARALLEL SAFE
66 RETURN sec_to_gc(@extschema:cube@.cube_distance($1, $2));
68 CREATE OR REPLACE FUNCTION earth_box(earth, float8)
69 RETURNS @extschema:cube@.cube
70 LANGUAGE SQL
71 IMMUTABLE STRICT
72 PARALLEL SAFE
73 RETURN @extschema:cube@.cube_enlarge($1, gc_to_sec($2), 3);