1-- **************************
2--
3-- spherical point functions
4--
5-- **************************
6
7CREATE FUNCTION pg_sphere_version()
8   RETURNS CSTRING
9   AS 'MODULE_PATHNAME', 'pg_sphere_version'
10   LANGUAGE 'c';
11
12CREATE FUNCTION spoint(FLOAT8, FLOAT8)
13   RETURNS spoint
14   AS 'MODULE_PATHNAME', 'spherepoint_from_long_lat'
15   LANGUAGE 'c'
16   IMMUTABLE STRICT;
17
18CREATE FUNCTION set_sphere_output_precision(INT4)
19   RETURNS CSTRING
20   AS 'MODULE_PATHNAME', 'set_sphere_output_precision'
21   LANGUAGE 'c';
22
23CREATE FUNCTION set_sphere_output(CSTRING)
24   RETURNS CSTRING
25   AS 'MODULE_PATHNAME', 'set_sphere_output'
26   LANGUAGE 'c';
27
28COMMENT ON FUNCTION spoint(FLOAT8, FLOAT8) IS
29  'returns a spherical point from longitude (arg1), latitude (arg2)';
30
31CREATE FUNCTION long(spoint)
32   RETURNS FLOAT8
33   AS 'MODULE_PATHNAME', 'spherepoint_long'
34   LANGUAGE 'c'
35   IMMUTABLE STRICT;
36
37COMMENT ON FUNCTION long(spoint) IS
38  'longitude of spherical point';
39
40CREATE FUNCTION lat(spoint)
41   RETURNS FLOAT8
42   AS 'MODULE_PATHNAME', 'spherepoint_lat'
43   LANGUAGE 'c'
44   IMMUTABLE STRICT;
45
46COMMENT ON FUNCTION lat(spoint) IS
47  'latitude of spherical point';
48
49CREATE FUNCTION x(spoint)
50   RETURNS FLOAT8
51   AS 'MODULE_PATHNAME', 'spherepoint_x'
52   LANGUAGE 'c'
53   IMMUTABLE STRICT;
54
55COMMENT ON FUNCTION x(spoint) IS
56  'cartesian x value of spherical point';
57
58
59CREATE FUNCTION y(spoint)
60   RETURNS FLOAT8
61   AS 'MODULE_PATHNAME', 'spherepoint_y'
62   LANGUAGE 'c'
63   IMMUTABLE STRICT;
64
65COMMENT ON FUNCTION y(spoint) IS
66  'cartesian y value of spherical point';
67
68CREATE FUNCTION xyz(spoint)
69   RETURNS FLOAT8[]
70   AS 'MODULE_PATHNAME', 'spherepoint_xyz'
71   LANGUAGE 'c'
72   IMMUTABLE STRICT;
73
74COMMENT ON FUNCTION xyz(spoint) IS
75  'cartesian values of spherical point';
76
77
78CREATE FUNCTION z(spoint)
79   RETURNS FLOAT8
80   AS 'MODULE_PATHNAME', 'spherepoint_z'
81   LANGUAGE 'c'
82   IMMUTABLE STRICT;
83
84COMMENT ON FUNCTION z(spoint) IS
85  'cartesian z value of spherical point';
86
87
88-- ***************************
89--
90-- spherical point operators
91--
92-- ***************************
93
94--
95-- equal
96--
97
98CREATE FUNCTION spoint_equal(spoint, spoint)
99   RETURNS BOOL
100   AS 'MODULE_PATHNAME', 'spherepoint_equal'
101   LANGUAGE 'c'
102   IMMUTABLE STRICT;
103
104COMMENT ON FUNCTION spoint_equal(spoint, spoint) IS
105  'returns true, if spherical points are equal';
106
107CREATE OPERATOR  = (
108   LEFTARG    = spoint,
109   RIGHTARG   = spoint,
110   COMMUTATOR = =,
111   NEGATOR    = <>,
112   PROCEDURE  = spoint_equal,
113   RESTRICT   = contsel,
114   JOIN       = contjoinsel
115);
116
117COMMENT ON OPERATOR = (spoint, spoint) IS
118  'true, if spherical points are equal';
119
120--
121-- not equal
122--
123
124CREATE FUNCTION spoint_equal_neg (spoint, spoint)
125   RETURNS BOOL
126   AS 'SELECT NOT spoint_equal($1,$2);'
127   LANGUAGE 'sql'
128   IMMUTABLE STRICT;
129
130COMMENT ON FUNCTION spoint_equal_neg (spoint, spoint) IS
131  'returns true, if spherical points are not equal';
132
133
134CREATE OPERATOR  <> (
135   LEFTARG    = spoint,
136   RIGHTARG   = spoint,
137   COMMUTATOR = <>,
138   NEGATOR    = =,
139   PROCEDURE  = spoint_equal_neg,
140   RESTRICT   = contsel,
141   JOIN       = contjoinsel
142);
143
144COMMENT ON OPERATOR <> (spoint, spoint) IS
145  'true, if spherical points are not equal';
146
147--
148-- distance between points
149--
150
151CREATE FUNCTION dist(spoint, spoint)
152   RETURNS FLOAT8
153   AS 'MODULE_PATHNAME', 'spherepoint_distance'
154   LANGUAGE 'c'
155   IMMUTABLE STRICT;
156
157COMMENT ON FUNCTION dist(spoint, spoint) IS
158  'distance between spherical points';
159
160CREATE OPERATOR  <-> (
161   LEFTARG    = spoint,
162   RIGHTARG   = spoint,
163   COMMUTATOR = '<->',
164   PROCEDURE  = dist
165);
166
167COMMENT ON OPERATOR <-> (spoint, spoint) IS
168  'distance between spherical points';
169
170