rev |
line source |
jbe@0
|
1
|
jbe@0
|
2 ----------------------------------------
|
jbe@0
|
3 -- forward declarations (shell types) --
|
jbe@0
|
4 ----------------------------------------
|
jbe@0
|
5
|
jbe@46
|
6 CREATE TYPE ekey_point;
|
jbe@46
|
7 CREATE TYPE ekey_area;
|
jbe@0
|
8 CREATE TYPE epoint;
|
jbe@46
|
9 CREATE TYPE epoint_with_sample_count;
|
jbe@0
|
10 CREATE TYPE ebox;
|
jbe@0
|
11 CREATE TYPE ecircle;
|
jbe@0
|
12 CREATE TYPE ecluster;
|
jbe@0
|
13
|
jbe@0
|
14
|
jbe@0
|
15 ------------------------------------------------------------
|
jbe@0
|
16 -- dummy input/output functions for dummy index key types --
|
jbe@0
|
17 ------------------------------------------------------------
|
jbe@0
|
18
|
jbe@0
|
19 CREATE FUNCTION ekey_point_in_dummy(cstring)
|
jbe@0
|
20 RETURNS ekey_point
|
jbe@0
|
21 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
22 AS '$libdir/latlon-v0009', 'pgl_notimpl';
|
jbe@0
|
23
|
jbe@0
|
24 CREATE FUNCTION ekey_point_out_dummy(ekey_point)
|
jbe@0
|
25 RETURNS cstring
|
jbe@0
|
26 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
27 AS '$libdir/latlon-v0009', 'pgl_notimpl';
|
jbe@0
|
28
|
jbe@0
|
29 CREATE FUNCTION ekey_area_in_dummy(cstring)
|
jbe@0
|
30 RETURNS ekey_area
|
jbe@0
|
31 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
32 AS '$libdir/latlon-v0009', 'pgl_notimpl';
|
jbe@0
|
33
|
jbe@0
|
34 CREATE FUNCTION ekey_area_out_dummy(ekey_area)
|
jbe@0
|
35 RETURNS cstring
|
jbe@0
|
36 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
37 AS '$libdir/latlon-v0009', 'pgl_notimpl';
|
jbe@0
|
38
|
jbe@0
|
39
|
jbe@0
|
40 --------------------------
|
jbe@0
|
41 -- text input functions --
|
jbe@0
|
42 --------------------------
|
jbe@0
|
43
|
jbe@0
|
44 CREATE FUNCTION epoint_in(cstring)
|
jbe@0
|
45 RETURNS epoint
|
jbe@0
|
46 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
47 AS '$libdir/latlon-v0009', 'pgl_epoint_in';
|
jbe@46
|
48
|
jbe@46
|
49 CREATE FUNCTION epoint_with_sample_count_in(cstring)
|
jbe@46
|
50 RETURNS epoint_with_sample_count
|
jbe@46
|
51 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
52 AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_in';
|
jbe@0
|
53
|
jbe@0
|
54 CREATE FUNCTION ebox_in(cstring)
|
jbe@0
|
55 RETURNS ebox
|
jbe@0
|
56 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
57 AS '$libdir/latlon-v0009', 'pgl_ebox_in';
|
jbe@0
|
58
|
jbe@0
|
59 CREATE FUNCTION ecircle_in(cstring)
|
jbe@0
|
60 RETURNS ecircle
|
jbe@0
|
61 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
62 AS '$libdir/latlon-v0009', 'pgl_ecircle_in';
|
jbe@0
|
63
|
jbe@0
|
64 CREATE FUNCTION ecluster_in(cstring)
|
jbe@0
|
65 RETURNS ecluster
|
jbe@0
|
66 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
67 AS '$libdir/latlon-v0009', 'pgl_ecluster_in';
|
jbe@0
|
68
|
jbe@0
|
69
|
jbe@0
|
70 ---------------------------
|
jbe@0
|
71 -- text output functions --
|
jbe@0
|
72 ---------------------------
|
jbe@0
|
73
|
jbe@0
|
74 CREATE FUNCTION epoint_out(epoint)
|
jbe@0
|
75 RETURNS cstring
|
jbe@0
|
76 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
77 AS '$libdir/latlon-v0009', 'pgl_epoint_out';
|
jbe@46
|
78
|
jbe@46
|
79 CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count)
|
jbe@46
|
80 RETURNS cstring
|
jbe@46
|
81 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
82 AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_out';
|
jbe@0
|
83
|
jbe@0
|
84 CREATE FUNCTION ebox_out(ebox)
|
jbe@0
|
85 RETURNS cstring
|
jbe@0
|
86 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
87 AS '$libdir/latlon-v0009', 'pgl_ebox_out';
|
jbe@0
|
88
|
jbe@0
|
89 CREATE FUNCTION ecircle_out(ecircle)
|
jbe@0
|
90 RETURNS cstring
|
jbe@0
|
91 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
92 AS '$libdir/latlon-v0009', 'pgl_ecircle_out';
|
jbe@0
|
93
|
jbe@0
|
94 CREATE FUNCTION ecluster_out(ecluster)
|
jbe@0
|
95 RETURNS cstring
|
jbe@0
|
96 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
97 AS '$libdir/latlon-v0009', 'pgl_ecluster_out';
|
jbe@0
|
98
|
jbe@0
|
99
|
jbe@0
|
100 --------------------------
|
jbe@0
|
101 -- binary I/O functions --
|
jbe@0
|
102 --------------------------
|
jbe@0
|
103
|
jbe@0
|
104 CREATE FUNCTION epoint_recv(internal)
|
jbe@0
|
105 RETURNS epoint
|
jbe@0
|
106 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
107 AS '$libdir/latlon-v0009', 'pgl_epoint_recv';
|
jbe@0
|
108
|
jbe@0
|
109 CREATE FUNCTION ebox_recv(internal)
|
jbe@0
|
110 RETURNS ebox
|
jbe@0
|
111 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
112 AS '$libdir/latlon-v0009', 'pgl_ebox_recv';
|
jbe@0
|
113
|
jbe@0
|
114 CREATE FUNCTION ecircle_recv(internal)
|
jbe@0
|
115 RETURNS ecircle
|
jbe@0
|
116 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
117 AS '$libdir/latlon-v0009', 'pgl_ecircle_recv';
|
jbe@0
|
118
|
jbe@0
|
119 CREATE FUNCTION epoint_send(epoint)
|
jbe@0
|
120 RETURNS bytea
|
jbe@0
|
121 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
122 AS '$libdir/latlon-v0009', 'pgl_epoint_send';
|
jbe@0
|
123
|
jbe@0
|
124 CREATE FUNCTION ebox_send(ebox)
|
jbe@0
|
125 RETURNS bytea
|
jbe@0
|
126 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
127 AS '$libdir/latlon-v0009', 'pgl_ebox_send';
|
jbe@0
|
128
|
jbe@0
|
129 CREATE FUNCTION ecircle_send(ecircle)
|
jbe@0
|
130 RETURNS bytea
|
jbe@0
|
131 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
132 AS '$libdir/latlon-v0009', 'pgl_ecircle_send';
|
jbe@0
|
133
|
jbe@0
|
134
|
jbe@0
|
135 -----------------------------------------------
|
jbe@0
|
136 -- type definitions of dummy index key types --
|
jbe@0
|
137 -----------------------------------------------
|
jbe@0
|
138
|
jbe@0
|
139 CREATE TYPE ekey_point (
|
jbe@0
|
140 internallength = 8,
|
jbe@0
|
141 input = ekey_point_in_dummy,
|
jbe@0
|
142 output = ekey_point_out_dummy,
|
jbe@0
|
143 alignment = char );
|
jbe@0
|
144
|
jbe@0
|
145 CREATE TYPE ekey_area (
|
jbe@0
|
146 internallength = 9,
|
jbe@0
|
147 input = ekey_area_in_dummy,
|
jbe@0
|
148 output = ekey_area_out_dummy,
|
jbe@0
|
149 alignment = char );
|
jbe@0
|
150
|
jbe@0
|
151
|
jbe@0
|
152 ------------------------------------------
|
jbe@0
|
153 -- definitions of geographic data types --
|
jbe@0
|
154 ------------------------------------------
|
jbe@0
|
155
|
jbe@0
|
156 CREATE TYPE epoint (
|
jbe@0
|
157 internallength = 16,
|
jbe@0
|
158 input = epoint_in,
|
jbe@0
|
159 output = epoint_out,
|
jbe@0
|
160 receive = epoint_recv,
|
jbe@0
|
161 send = epoint_send,
|
jbe@0
|
162 alignment = double );
|
jbe@0
|
163
|
jbe@46
|
164 CREATE TYPE epoint_with_sample_count (
|
jbe@46
|
165 internallength = 20,
|
jbe@46
|
166 input = epoint_with_sample_count_in,
|
jbe@46
|
167 output = epoint_with_sample_count_out,
|
jbe@46
|
168 alignment = double );
|
jbe@46
|
169
|
jbe@0
|
170 CREATE TYPE ebox (
|
jbe@0
|
171 internallength = 32,
|
jbe@0
|
172 input = ebox_in,
|
jbe@0
|
173 output = ebox_out,
|
jbe@0
|
174 receive = ebox_recv,
|
jbe@0
|
175 send = ebox_send,
|
jbe@0
|
176 alignment = double );
|
jbe@0
|
177
|
jbe@0
|
178 CREATE TYPE ecircle (
|
jbe@0
|
179 internallength = 24,
|
jbe@0
|
180 input = ecircle_in,
|
jbe@0
|
181 output = ecircle_out,
|
jbe@0
|
182 receive = ecircle_recv,
|
jbe@0
|
183 send = ecircle_send,
|
jbe@0
|
184 alignment = double );
|
jbe@0
|
185
|
jbe@0
|
186 CREATE TYPE ecluster (
|
jbe@0
|
187 internallength = VARIABLE,
|
jbe@0
|
188 input = ecluster_in,
|
jbe@0
|
189 output = ecluster_out,
|
jbe@0
|
190 alignment = double,
|
jbe@0
|
191 storage = external );
|
jbe@0
|
192
|
jbe@0
|
193
|
jbe@0
|
194 --------------------
|
jbe@0
|
195 -- B-tree support --
|
jbe@0
|
196 --------------------
|
jbe@0
|
197
|
jbe@0
|
198 -- begin of B-tree support for epoint
|
jbe@0
|
199
|
jbe@0
|
200 CREATE FUNCTION epoint_btree_lt(epoint, epoint)
|
jbe@0
|
201 RETURNS boolean
|
jbe@0
|
202 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
203 AS '$libdir/latlon-v0009', 'pgl_btree_epoint_lt';
|
jbe@0
|
204
|
jbe@0
|
205 CREATE FUNCTION epoint_btree_le(epoint, epoint)
|
jbe@0
|
206 RETURNS boolean
|
jbe@0
|
207 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
208 AS '$libdir/latlon-v0009', 'pgl_btree_epoint_le';
|
jbe@0
|
209
|
jbe@0
|
210 CREATE FUNCTION epoint_btree_eq(epoint, epoint)
|
jbe@0
|
211 RETURNS boolean
|
jbe@0
|
212 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
213 AS '$libdir/latlon-v0009', 'pgl_btree_epoint_eq';
|
jbe@0
|
214
|
jbe@0
|
215 CREATE FUNCTION epoint_btree_ne(epoint, epoint)
|
jbe@0
|
216 RETURNS boolean
|
jbe@0
|
217 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
218 AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ne';
|
jbe@0
|
219
|
jbe@0
|
220 CREATE FUNCTION epoint_btree_ge(epoint, epoint)
|
jbe@0
|
221 RETURNS boolean
|
jbe@0
|
222 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
223 AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ge';
|
jbe@0
|
224
|
jbe@0
|
225 CREATE FUNCTION epoint_btree_gt(epoint, epoint)
|
jbe@0
|
226 RETURNS boolean
|
jbe@0
|
227 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
228 AS '$libdir/latlon-v0009', 'pgl_btree_epoint_gt';
|
jbe@0
|
229
|
jbe@0
|
230 CREATE OPERATOR <<< (
|
jbe@0
|
231 leftarg = epoint,
|
jbe@0
|
232 rightarg = epoint,
|
jbe@0
|
233 procedure = epoint_btree_lt,
|
jbe@0
|
234 commutator = >>>,
|
jbe@0
|
235 negator = >>>=,
|
jbe@0
|
236 restrict = scalarltsel,
|
jbe@0
|
237 join = scalarltjoinsel
|
jbe@0
|
238 );
|
jbe@0
|
239
|
jbe@0
|
240 CREATE OPERATOR <<<= (
|
jbe@0
|
241 leftarg = epoint,
|
jbe@0
|
242 rightarg = epoint,
|
jbe@0
|
243 procedure = epoint_btree_le,
|
jbe@0
|
244 commutator = >>>=,
|
jbe@0
|
245 negator = >>>,
|
jbe@0
|
246 restrict = scalarltsel,
|
jbe@0
|
247 join = scalarltjoinsel
|
jbe@0
|
248 );
|
jbe@0
|
249
|
jbe@0
|
250 CREATE OPERATOR = (
|
jbe@0
|
251 leftarg = epoint,
|
jbe@0
|
252 rightarg = epoint,
|
jbe@0
|
253 procedure = epoint_btree_eq,
|
jbe@0
|
254 commutator = =,
|
jbe@0
|
255 negator = <>,
|
jbe@0
|
256 restrict = eqsel,
|
jbe@0
|
257 join = eqjoinsel,
|
jbe@0
|
258 merges
|
jbe@0
|
259 );
|
jbe@0
|
260
|
jbe@0
|
261 CREATE OPERATOR <> (
|
jbe@0
|
262 leftarg = epoint,
|
jbe@0
|
263 rightarg = epoint,
|
jbe@54
|
264 procedure = epoint_btree_ne,
|
jbe@0
|
265 commutator = <>,
|
jbe@0
|
266 negator = =,
|
jbe@0
|
267 restrict = neqsel,
|
jbe@0
|
268 join = neqjoinsel
|
jbe@0
|
269 );
|
jbe@0
|
270
|
jbe@0
|
271 CREATE OPERATOR >>>= (
|
jbe@0
|
272 leftarg = epoint,
|
jbe@0
|
273 rightarg = epoint,
|
jbe@0
|
274 procedure = epoint_btree_ge,
|
jbe@0
|
275 commutator = <<<=,
|
jbe@0
|
276 negator = <<<,
|
jbe@0
|
277 restrict = scalargtsel,
|
jbe@0
|
278 join = scalargtjoinsel
|
jbe@0
|
279 );
|
jbe@0
|
280
|
jbe@0
|
281 CREATE OPERATOR >>> (
|
jbe@0
|
282 leftarg = epoint,
|
jbe@0
|
283 rightarg = epoint,
|
jbe@0
|
284 procedure = epoint_btree_gt,
|
jbe@0
|
285 commutator = <<<,
|
jbe@0
|
286 negator = <<<=,
|
jbe@0
|
287 restrict = scalargtsel,
|
jbe@0
|
288 join = scalargtjoinsel
|
jbe@0
|
289 );
|
jbe@0
|
290
|
jbe@0
|
291 CREATE FUNCTION epoint_btree_cmp(epoint, epoint)
|
jbe@0
|
292 RETURNS int4
|
jbe@0
|
293 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
294 AS '$libdir/latlon-v0009', 'pgl_btree_epoint_cmp';
|
jbe@0
|
295
|
jbe@0
|
296 CREATE OPERATOR CLASS epoint_btree_ops
|
jbe@0
|
297 DEFAULT FOR TYPE epoint USING btree AS
|
jbe@0
|
298 OPERATOR 1 <<< ,
|
jbe@0
|
299 OPERATOR 2 <<<= ,
|
jbe@0
|
300 OPERATOR 3 = ,
|
jbe@0
|
301 OPERATOR 4 >>>= ,
|
jbe@0
|
302 OPERATOR 5 >>> ,
|
jbe@0
|
303 FUNCTION 1 epoint_btree_cmp(epoint, epoint);
|
jbe@0
|
304
|
jbe@0
|
305 -- end of B-tree support for epoint
|
jbe@0
|
306
|
jbe@0
|
307 -- begin of B-tree support for ebox
|
jbe@0
|
308
|
jbe@0
|
309 CREATE FUNCTION ebox_btree_lt(ebox, ebox)
|
jbe@0
|
310 RETURNS boolean
|
jbe@0
|
311 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
312 AS '$libdir/latlon-v0009', 'pgl_btree_ebox_lt';
|
jbe@0
|
313
|
jbe@0
|
314 CREATE FUNCTION ebox_btree_le(ebox, ebox)
|
jbe@0
|
315 RETURNS boolean
|
jbe@0
|
316 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
317 AS '$libdir/latlon-v0009', 'pgl_btree_ebox_le';
|
jbe@0
|
318
|
jbe@0
|
319 CREATE FUNCTION ebox_btree_eq(ebox, ebox)
|
jbe@0
|
320 RETURNS boolean
|
jbe@0
|
321 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
322 AS '$libdir/latlon-v0009', 'pgl_btree_ebox_eq';
|
jbe@0
|
323
|
jbe@0
|
324 CREATE FUNCTION ebox_btree_ne(ebox, ebox)
|
jbe@0
|
325 RETURNS boolean
|
jbe@0
|
326 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
327 AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ne';
|
jbe@0
|
328
|
jbe@0
|
329 CREATE FUNCTION ebox_btree_ge(ebox, ebox)
|
jbe@0
|
330 RETURNS boolean
|
jbe@0
|
331 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
332 AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ge';
|
jbe@0
|
333
|
jbe@0
|
334 CREATE FUNCTION ebox_btree_gt(ebox, ebox)
|
jbe@0
|
335 RETURNS boolean
|
jbe@0
|
336 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
337 AS '$libdir/latlon-v0009', 'pgl_btree_ebox_gt';
|
jbe@0
|
338
|
jbe@0
|
339 CREATE OPERATOR <<< (
|
jbe@0
|
340 leftarg = ebox,
|
jbe@0
|
341 rightarg = ebox,
|
jbe@0
|
342 procedure = ebox_btree_lt,
|
jbe@0
|
343 commutator = >>>,
|
jbe@0
|
344 negator = >>>=,
|
jbe@0
|
345 restrict = scalarltsel,
|
jbe@0
|
346 join = scalarltjoinsel
|
jbe@0
|
347 );
|
jbe@0
|
348
|
jbe@0
|
349 CREATE OPERATOR <<<= (
|
jbe@0
|
350 leftarg = ebox,
|
jbe@0
|
351 rightarg = ebox,
|
jbe@0
|
352 procedure = ebox_btree_le,
|
jbe@0
|
353 commutator = >>>=,
|
jbe@0
|
354 negator = >>>,
|
jbe@0
|
355 restrict = scalarltsel,
|
jbe@0
|
356 join = scalarltjoinsel
|
jbe@0
|
357 );
|
jbe@0
|
358
|
jbe@0
|
359 CREATE OPERATOR = (
|
jbe@0
|
360 leftarg = ebox,
|
jbe@0
|
361 rightarg = ebox,
|
jbe@0
|
362 procedure = ebox_btree_eq,
|
jbe@0
|
363 commutator = =,
|
jbe@0
|
364 negator = <>,
|
jbe@0
|
365 restrict = eqsel,
|
jbe@0
|
366 join = eqjoinsel,
|
jbe@0
|
367 merges
|
jbe@0
|
368 );
|
jbe@0
|
369
|
jbe@0
|
370 CREATE OPERATOR <> (
|
jbe@0
|
371 leftarg = ebox,
|
jbe@0
|
372 rightarg = ebox,
|
jbe@54
|
373 procedure = ebox_btree_ne,
|
jbe@0
|
374 commutator = <>,
|
jbe@0
|
375 negator = =,
|
jbe@0
|
376 restrict = neqsel,
|
jbe@0
|
377 join = neqjoinsel
|
jbe@0
|
378 );
|
jbe@0
|
379
|
jbe@0
|
380 CREATE OPERATOR >>>= (
|
jbe@0
|
381 leftarg = ebox,
|
jbe@0
|
382 rightarg = ebox,
|
jbe@0
|
383 procedure = ebox_btree_ge,
|
jbe@0
|
384 commutator = <<<=,
|
jbe@0
|
385 negator = <<<,
|
jbe@0
|
386 restrict = scalargtsel,
|
jbe@0
|
387 join = scalargtjoinsel
|
jbe@0
|
388 );
|
jbe@0
|
389
|
jbe@0
|
390 CREATE OPERATOR >>> (
|
jbe@0
|
391 leftarg = ebox,
|
jbe@0
|
392 rightarg = ebox,
|
jbe@0
|
393 procedure = ebox_btree_gt,
|
jbe@0
|
394 commutator = <<<,
|
jbe@0
|
395 negator = <<<=,
|
jbe@0
|
396 restrict = scalargtsel,
|
jbe@0
|
397 join = scalargtjoinsel
|
jbe@0
|
398 );
|
jbe@0
|
399
|
jbe@0
|
400 CREATE FUNCTION ebox_btree_cmp(ebox, ebox)
|
jbe@0
|
401 RETURNS int4
|
jbe@0
|
402 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
403 AS '$libdir/latlon-v0009', 'pgl_btree_ebox_cmp';
|
jbe@0
|
404
|
jbe@0
|
405 CREATE OPERATOR CLASS ebox_btree_ops
|
jbe@0
|
406 DEFAULT FOR TYPE ebox USING btree AS
|
jbe@0
|
407 OPERATOR 1 <<< ,
|
jbe@0
|
408 OPERATOR 2 <<<= ,
|
jbe@0
|
409 OPERATOR 3 = ,
|
jbe@0
|
410 OPERATOR 4 >>>= ,
|
jbe@0
|
411 OPERATOR 5 >>> ,
|
jbe@0
|
412 FUNCTION 1 ebox_btree_cmp(ebox, ebox);
|
jbe@0
|
413
|
jbe@0
|
414 -- end of B-tree support for ebox
|
jbe@0
|
415
|
jbe@0
|
416 -- begin of B-tree support for ecircle
|
jbe@0
|
417
|
jbe@0
|
418 CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle)
|
jbe@0
|
419 RETURNS boolean
|
jbe@0
|
420 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
421 AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_lt';
|
jbe@0
|
422
|
jbe@0
|
423 CREATE FUNCTION ecircle_btree_le(ecircle, ecircle)
|
jbe@0
|
424 RETURNS boolean
|
jbe@0
|
425 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
426 AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_le';
|
jbe@0
|
427
|
jbe@0
|
428 CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle)
|
jbe@0
|
429 RETURNS boolean
|
jbe@0
|
430 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
431 AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_eq';
|
jbe@0
|
432
|
jbe@0
|
433 CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle)
|
jbe@0
|
434 RETURNS boolean
|
jbe@0
|
435 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
436 AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ne';
|
jbe@0
|
437
|
jbe@0
|
438 CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle)
|
jbe@0
|
439 RETURNS boolean
|
jbe@0
|
440 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
441 AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ge';
|
jbe@0
|
442
|
jbe@0
|
443 CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle)
|
jbe@0
|
444 RETURNS boolean
|
jbe@0
|
445 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
446 AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_gt';
|
jbe@0
|
447
|
jbe@0
|
448 CREATE OPERATOR <<< (
|
jbe@0
|
449 leftarg = ecircle,
|
jbe@0
|
450 rightarg = ecircle,
|
jbe@0
|
451 procedure = ecircle_btree_lt,
|
jbe@0
|
452 commutator = >>>,
|
jbe@0
|
453 negator = >>>=,
|
jbe@0
|
454 restrict = scalarltsel,
|
jbe@0
|
455 join = scalarltjoinsel
|
jbe@0
|
456 );
|
jbe@0
|
457
|
jbe@0
|
458 CREATE OPERATOR <<<= (
|
jbe@0
|
459 leftarg = ecircle,
|
jbe@0
|
460 rightarg = ecircle,
|
jbe@0
|
461 procedure = ecircle_btree_le,
|
jbe@0
|
462 commutator = >>>=,
|
jbe@0
|
463 negator = >>>,
|
jbe@0
|
464 restrict = scalarltsel,
|
jbe@0
|
465 join = scalarltjoinsel
|
jbe@0
|
466 );
|
jbe@0
|
467
|
jbe@0
|
468 CREATE OPERATOR = (
|
jbe@0
|
469 leftarg = ecircle,
|
jbe@0
|
470 rightarg = ecircle,
|
jbe@0
|
471 procedure = ecircle_btree_eq,
|
jbe@0
|
472 commutator = =,
|
jbe@0
|
473 negator = <>,
|
jbe@0
|
474 restrict = eqsel,
|
jbe@0
|
475 join = eqjoinsel,
|
jbe@0
|
476 merges
|
jbe@0
|
477 );
|
jbe@0
|
478
|
jbe@0
|
479 CREATE OPERATOR <> (
|
jbe@0
|
480 leftarg = ecircle,
|
jbe@0
|
481 rightarg = ecircle,
|
jbe@54
|
482 procedure = ecircle_btree_ne,
|
jbe@0
|
483 commutator = <>,
|
jbe@0
|
484 negator = =,
|
jbe@0
|
485 restrict = neqsel,
|
jbe@0
|
486 join = neqjoinsel
|
jbe@0
|
487 );
|
jbe@0
|
488
|
jbe@0
|
489 CREATE OPERATOR >>>= (
|
jbe@0
|
490 leftarg = ecircle,
|
jbe@0
|
491 rightarg = ecircle,
|
jbe@0
|
492 procedure = ecircle_btree_ge,
|
jbe@0
|
493 commutator = <<<=,
|
jbe@0
|
494 negator = <<<,
|
jbe@0
|
495 restrict = scalargtsel,
|
jbe@0
|
496 join = scalargtjoinsel
|
jbe@0
|
497 );
|
jbe@0
|
498
|
jbe@0
|
499 CREATE OPERATOR >>> (
|
jbe@0
|
500 leftarg = ecircle,
|
jbe@0
|
501 rightarg = ecircle,
|
jbe@0
|
502 procedure = ecircle_btree_gt,
|
jbe@0
|
503 commutator = <<<,
|
jbe@0
|
504 negator = <<<=,
|
jbe@0
|
505 restrict = scalargtsel,
|
jbe@0
|
506 join = scalargtjoinsel
|
jbe@0
|
507 );
|
jbe@0
|
508
|
jbe@0
|
509 CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle)
|
jbe@0
|
510 RETURNS int4
|
jbe@0
|
511 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
512 AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_cmp';
|
jbe@0
|
513
|
jbe@0
|
514 CREATE OPERATOR CLASS ecircle_btree_ops
|
jbe@0
|
515 DEFAULT FOR TYPE ecircle USING btree AS
|
jbe@0
|
516 OPERATOR 1 <<< ,
|
jbe@0
|
517 OPERATOR 2 <<<= ,
|
jbe@0
|
518 OPERATOR 3 = ,
|
jbe@0
|
519 OPERATOR 4 >>>= ,
|
jbe@0
|
520 OPERATOR 5 >>> ,
|
jbe@0
|
521 FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle);
|
jbe@0
|
522
|
jbe@0
|
523 -- end of B-tree support for ecircle
|
jbe@0
|
524
|
jbe@0
|
525
|
jbe@0
|
526 ----------------
|
jbe@0
|
527 -- type casts --
|
jbe@0
|
528 ----------------
|
jbe@0
|
529
|
jbe@0
|
530 CREATE FUNCTION cast_epoint_to_ebox(epoint)
|
jbe@0
|
531 RETURNS ebox
|
jbe@0
|
532 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
533 AS '$libdir/latlon-v0009', 'pgl_epoint_to_ebox';
|
jbe@0
|
534
|
jbe@0
|
535 CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint);
|
jbe@0
|
536
|
jbe@0
|
537 CREATE FUNCTION cast_epoint_to_ecircle(epoint)
|
jbe@0
|
538 RETURNS ecircle
|
jbe@0
|
539 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
540 AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecircle';
|
jbe@0
|
541
|
jbe@0
|
542 CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint);
|
jbe@0
|
543
|
jbe@0
|
544 CREATE FUNCTION cast_epoint_to_ecluster(epoint)
|
jbe@0
|
545 RETURNS ecluster
|
jbe@0
|
546 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
547 AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecluster';
|
jbe@0
|
548
|
jbe@0
|
549 CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint);
|
jbe@0
|
550
|
jbe@0
|
551 CREATE FUNCTION cast_ebox_to_ecluster(ebox)
|
jbe@0
|
552 RETURNS ecluster
|
jbe@0
|
553 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
554 AS '$libdir/latlon-v0009', 'pgl_ebox_to_ecluster';
|
jbe@0
|
555
|
jbe@0
|
556 CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox);
|
jbe@0
|
557
|
jbe@0
|
558
|
jbe@0
|
559 ---------------------------
|
jbe@0
|
560 -- constructor functions --
|
jbe@0
|
561 ---------------------------
|
jbe@0
|
562
|
jbe@0
|
563 CREATE FUNCTION epoint(float8, float8)
|
jbe@0
|
564 RETURNS epoint
|
jbe@0
|
565 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
566 AS '$libdir/latlon-v0009', 'pgl_create_epoint';
|
jbe@0
|
567
|
jbe@0
|
568 CREATE FUNCTION epoint_latlon(float8, float8)
|
jbe@0
|
569 RETURNS epoint
|
jbe@0
|
570 LANGUAGE SQL IMMUTABLE STRICT AS $$
|
jbe@0
|
571 SELECT epoint($1, $2)
|
jbe@0
|
572 $$;
|
jbe@0
|
573
|
jbe@0
|
574 CREATE FUNCTION epoint_lonlat(float8, float8)
|
jbe@0
|
575 RETURNS epoint
|
jbe@0
|
576 LANGUAGE SQL IMMUTABLE STRICT AS $$
|
jbe@0
|
577 SELECT epoint($2, $1)
|
jbe@0
|
578 $$;
|
jbe@0
|
579
|
jbe@46
|
580 CREATE FUNCTION epoint_with_sample_count(epoint, int4)
|
jbe@46
|
581 RETURNS epoint_with_sample_count
|
jbe@46
|
582 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
583 AS '$libdir/latlon-v0009', 'pgl_create_epoint_with_sample_count';
|
jbe@46
|
584
|
jbe@0
|
585 CREATE FUNCTION empty_ebox()
|
jbe@0
|
586 RETURNS ebox
|
jbe@0
|
587 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
588 AS '$libdir/latlon-v0009', 'pgl_create_empty_ebox';
|
jbe@0
|
589
|
jbe@0
|
590 CREATE FUNCTION ebox(float8, float8, float8, float8)
|
jbe@0
|
591 RETURNS ebox
|
jbe@0
|
592 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
593 AS '$libdir/latlon-v0009', 'pgl_create_ebox';
|
jbe@0
|
594
|
jbe@0
|
595 CREATE FUNCTION ebox(epoint, epoint)
|
jbe@0
|
596 RETURNS ebox
|
jbe@0
|
597 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
598 AS '$libdir/latlon-v0009', 'pgl_create_ebox_from_epoints';
|
jbe@0
|
599
|
jbe@0
|
600 CREATE FUNCTION ecircle(float8, float8, float8)
|
jbe@0
|
601 RETURNS ecircle
|
jbe@0
|
602 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
603 AS '$libdir/latlon-v0009', 'pgl_create_ecircle';
|
jbe@0
|
604
|
jbe@0
|
605 CREATE FUNCTION ecircle(epoint, float8)
|
jbe@0
|
606 RETURNS ecircle
|
jbe@0
|
607 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
608 AS '$libdir/latlon-v0009', 'pgl_create_ecircle_from_epoint';
|
jbe@0
|
609
|
jbe@0
|
610 CREATE FUNCTION ecluster_concat(ecluster[])
|
jbe@0
|
611 RETURNS ecluster
|
jbe@0
|
612 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
613 SELECT array_to_string($1, ' ')::ecluster
|
jbe@0
|
614 $$;
|
jbe@0
|
615
|
jbe@0
|
616 CREATE FUNCTION ecluster_concat(ecluster, ecluster)
|
jbe@0
|
617 RETURNS ecluster
|
jbe@0
|
618 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
619 SELECT ($1::text || ' ' || $2::text)::ecluster
|
jbe@0
|
620 $$;
|
jbe@0
|
621
|
jbe@0
|
622 CREATE FUNCTION ecluster_create_multipoint(epoint[])
|
jbe@0
|
623 RETURNS ecluster
|
jbe@0
|
624 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
625 SELECT
|
jbe@0
|
626 array_to_string(array_agg('point (' || unnest || ')'), ' ')::ecluster
|
jbe@0
|
627 FROM unnest($1)
|
jbe@0
|
628 $$;
|
jbe@0
|
629
|
jbe@0
|
630 CREATE FUNCTION ecluster_create_path(epoint[])
|
jbe@0
|
631 RETURNS ecluster
|
jbe@0
|
632 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
633 SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE
|
jbe@0
|
634 ('path (' || array_to_string($1, ' ') || ')')::ecluster
|
jbe@0
|
635 END
|
jbe@0
|
636 FROM array_to_string($1, ' ') AS "str"
|
jbe@0
|
637 $$;
|
jbe@0
|
638
|
jbe@0
|
639 CREATE FUNCTION ecluster_create_outline(epoint[])
|
jbe@0
|
640 RETURNS ecluster
|
jbe@0
|
641 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
642 SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE
|
jbe@0
|
643 ('outline (' || array_to_string($1, ' ') || ')')::ecluster
|
jbe@0
|
644 END
|
jbe@0
|
645 FROM array_to_string($1, ' ') AS "str"
|
jbe@0
|
646 $$;
|
jbe@0
|
647
|
jbe@0
|
648 CREATE FUNCTION ecluster_create_polygon(epoint[])
|
jbe@0
|
649 RETURNS ecluster
|
jbe@0
|
650 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
651 SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE
|
jbe@0
|
652 ('polygon (' || array_to_string($1, ' ') || ')')::ecluster
|
jbe@0
|
653 END
|
jbe@0
|
654 FROM array_to_string($1, ' ') AS "str"
|
jbe@0
|
655 $$;
|
jbe@0
|
656
|
jbe@0
|
657
|
jbe@0
|
658 ----------------------
|
jbe@0
|
659 -- getter functions --
|
jbe@0
|
660 ----------------------
|
jbe@0
|
661
|
jbe@0
|
662 CREATE FUNCTION latitude(epoint)
|
jbe@0
|
663 RETURNS float8
|
jbe@0
|
664 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
665 AS '$libdir/latlon-v0009', 'pgl_epoint_lat';
|
jbe@0
|
666
|
jbe@0
|
667 CREATE FUNCTION longitude(epoint)
|
jbe@0
|
668 RETURNS float8
|
jbe@0
|
669 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
670 AS '$libdir/latlon-v0009', 'pgl_epoint_lon';
|
jbe@0
|
671
|
jbe@0
|
672 CREATE FUNCTION min_latitude(ebox)
|
jbe@0
|
673 RETURNS float8
|
jbe@0
|
674 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
675 AS '$libdir/latlon-v0009', 'pgl_ebox_lat_min';
|
jbe@0
|
676
|
jbe@0
|
677 CREATE FUNCTION max_latitude(ebox)
|
jbe@0
|
678 RETURNS float8
|
jbe@0
|
679 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
680 AS '$libdir/latlon-v0009', 'pgl_ebox_lat_max';
|
jbe@0
|
681
|
jbe@0
|
682 CREATE FUNCTION min_longitude(ebox)
|
jbe@0
|
683 RETURNS float8
|
jbe@0
|
684 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
685 AS '$libdir/latlon-v0009', 'pgl_ebox_lon_min';
|
jbe@0
|
686
|
jbe@0
|
687 CREATE FUNCTION max_longitude(ebox)
|
jbe@0
|
688 RETURNS float8
|
jbe@0
|
689 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
690 AS '$libdir/latlon-v0009', 'pgl_ebox_lon_max';
|
jbe@0
|
691
|
jbe@0
|
692 CREATE FUNCTION center(ecircle)
|
jbe@0
|
693 RETURNS epoint
|
jbe@0
|
694 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
695 AS '$libdir/latlon-v0009', 'pgl_ecircle_center';
|
jbe@0
|
696
|
jbe@0
|
697 CREATE FUNCTION radius(ecircle)
|
jbe@0
|
698 RETURNS float8
|
jbe@0
|
699 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
700 AS '$libdir/latlon-v0009', 'pgl_ecircle_radius';
|
jbe@0
|
701
|
jbe@0
|
702 CREATE FUNCTION ecluster_extract_points(ecluster)
|
jbe@0
|
703 RETURNS SETOF epoint
|
jbe@0
|
704 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
705 SELECT "match"[2]::epoint
|
jbe@0
|
706 FROM regexp_matches($1::text, e'(^| )point \\(([^)]+)\\)', 'g') AS "match"
|
jbe@0
|
707 $$;
|
jbe@0
|
708
|
jbe@0
|
709 CREATE FUNCTION ecluster_extract_paths(ecluster)
|
jbe@0
|
710 RETURNS SETOF epoint[]
|
jbe@0
|
711 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
712 SELECT (
|
jbe@0
|
713 SELECT array_agg("m2"[1]::epoint)
|
jbe@0
|
714 FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
|
jbe@0
|
715 )
|
jbe@0
|
716 FROM regexp_matches($1::text, e'(^| )path \\(([^)]+)\\)', 'g') AS "m1"
|
jbe@0
|
717 $$;
|
jbe@0
|
718
|
jbe@0
|
719 CREATE FUNCTION ecluster_extract_outlines(ecluster)
|
jbe@0
|
720 RETURNS SETOF epoint[]
|
jbe@0
|
721 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
722 SELECT (
|
jbe@0
|
723 SELECT array_agg("m2"[1]::epoint)
|
jbe@0
|
724 FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
|
jbe@0
|
725 )
|
jbe@0
|
726 FROM regexp_matches($1::text, e'(^| )outline \\(([^)]+)\\)', 'g') AS "m1"
|
jbe@0
|
727 $$;
|
jbe@0
|
728
|
jbe@0
|
729 CREATE FUNCTION ecluster_extract_polygons(ecluster)
|
jbe@0
|
730 RETURNS SETOF epoint[]
|
jbe@0
|
731 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
732 SELECT (
|
jbe@0
|
733 SELECT array_agg("m2"[1]::epoint)
|
jbe@0
|
734 FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
|
jbe@0
|
735 )
|
jbe@0
|
736 FROM regexp_matches($1::text, e'(^| )polygon \\(([^)]+)\\)', 'g') AS "m1"
|
jbe@0
|
737 $$;
|
jbe@0
|
738
|
jbe@0
|
739
|
jbe@0
|
740 ---------------
|
jbe@0
|
741 -- operators --
|
jbe@0
|
742 ---------------
|
jbe@0
|
743
|
jbe@0
|
744 CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox)
|
jbe@0
|
745 RETURNS boolean
|
jbe@0
|
746 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
747 AS '$libdir/latlon-v0009', 'pgl_epoint_ebox_overlap';
|
jbe@0
|
748
|
jbe@0
|
749 CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle)
|
jbe@0
|
750 RETURNS boolean
|
jbe@0
|
751 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
752 AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_overlap';
|
jbe@0
|
753
|
jbe@0
|
754 CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster)
|
jbe@0
|
755 RETURNS boolean
|
jbe@0
|
756 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
757 AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_overlap';
|
jbe@0
|
758
|
jbe@10
|
759 CREATE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster)
|
jbe@10
|
760 RETURNS boolean
|
jbe@10
|
761 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
762 AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_may_overlap';
|
jbe@10
|
763
|
jbe@0
|
764 CREATE FUNCTION ebox_overlap_proc(ebox, ebox)
|
jbe@0
|
765 RETURNS boolean
|
jbe@0
|
766 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
767 AS '$libdir/latlon-v0009', 'pgl_ebox_overlap';
|
jbe@0
|
768
|
jbe@10
|
769 CREATE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle)
|
jbe@10
|
770 RETURNS boolean
|
jbe@10
|
771 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
772 AS '$libdir/latlon-v0009', 'pgl_ebox_ecircle_may_overlap';
|
jbe@10
|
773
|
jbe@10
|
774 CREATE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster)
|
jbe@10
|
775 RETURNS boolean
|
jbe@10
|
776 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
777 AS '$libdir/latlon-v0009', 'pgl_ebox_ecluster_may_overlap';
|
jbe@10
|
778
|
jbe@0
|
779 CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle)
|
jbe@0
|
780 RETURNS boolean
|
jbe@0
|
781 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
782 AS '$libdir/latlon-v0009', 'pgl_ecircle_overlap';
|
jbe@0
|
783
|
jbe@0
|
784 CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster)
|
jbe@0
|
785 RETURNS boolean
|
jbe@0
|
786 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
787 AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_overlap';
|
jbe@0
|
788
|
jbe@10
|
789 CREATE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster)
|
jbe@10
|
790 RETURNS boolean
|
jbe@10
|
791 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
792 AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_may_overlap';
|
jbe@10
|
793
|
jbe@16
|
794 CREATE FUNCTION ecluster_overlap_proc(ecluster, ecluster)
|
jbe@16
|
795 RETURNS boolean
|
jbe@16
|
796 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
797 AS '$libdir/latlon-v0009', 'pgl_ecluster_overlap';
|
jbe@16
|
798
|
jbe@10
|
799 CREATE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster)
|
jbe@10
|
800 RETURNS boolean
|
jbe@10
|
801 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
802 AS '$libdir/latlon-v0009', 'pgl_ecluster_may_overlap';
|
jbe@10
|
803
|
jbe@16
|
804 CREATE FUNCTION ecluster_contains_proc(ecluster, ecluster)
|
jbe@16
|
805 RETURNS boolean
|
jbe@16
|
806 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
807 AS '$libdir/latlon-v0009', 'pgl_ecluster_contains';
|
jbe@16
|
808
|
jbe@0
|
809 CREATE FUNCTION epoint_distance_proc(epoint, epoint)
|
jbe@0
|
810 RETURNS float8
|
jbe@0
|
811 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
812 AS '$libdir/latlon-v0009', 'pgl_epoint_distance';
|
jbe@0
|
813
|
jbe@0
|
814 CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle)
|
jbe@0
|
815 RETURNS float8
|
jbe@0
|
816 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
817 AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_distance';
|
jbe@0
|
818
|
jbe@0
|
819 CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster)
|
jbe@0
|
820 RETURNS float8
|
jbe@0
|
821 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
822 AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_distance';
|
jbe@0
|
823
|
jbe@0
|
824 CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle)
|
jbe@0
|
825 RETURNS float8
|
jbe@0
|
826 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
827 AS '$libdir/latlon-v0009', 'pgl_ecircle_distance';
|
jbe@0
|
828
|
jbe@0
|
829 CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster)
|
jbe@0
|
830 RETURNS float8
|
jbe@0
|
831 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
832 AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_distance';
|
jbe@0
|
833
|
jbe@16
|
834 CREATE FUNCTION ecluster_distance_proc(ecluster, ecluster)
|
jbe@16
|
835 RETURNS float8
|
jbe@16
|
836 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
837 AS '$libdir/latlon-v0009', 'pgl_ecluster_distance';
|
jbe@46
|
838
|
jbe@46
|
839 CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count)
|
jbe@46
|
840 RETURNS float8
|
jbe@46
|
841 LANGUAGE C IMMUTABLE STRICT
|
jbe@46
|
842 AS '$libdir/latlon-v0009', 'pgl_ecluster_epoint_sc_fair_distance';
|
jbe@16
|
843
|
jbe@0
|
844 CREATE OPERATOR && (
|
jbe@0
|
845 leftarg = epoint,
|
jbe@0
|
846 rightarg = ebox,
|
jbe@0
|
847 procedure = epoint_ebox_overlap_proc,
|
jbe@0
|
848 commutator = &&,
|
jbe@0
|
849 restrict = areasel,
|
jbe@0
|
850 join = areajoinsel
|
jbe@0
|
851 );
|
jbe@0
|
852
|
jbe@0
|
853 CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint)
|
jbe@0
|
854 RETURNS boolean
|
jbe@0
|
855 LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1';
|
jbe@0
|
856
|
jbe@0
|
857 CREATE OPERATOR && (
|
jbe@0
|
858 leftarg = ebox,
|
jbe@0
|
859 rightarg = epoint,
|
jbe@0
|
860 procedure = epoint_ebox_overlap_commutator,
|
jbe@0
|
861 commutator = &&,
|
jbe@0
|
862 restrict = areasel,
|
jbe@0
|
863 join = areajoinsel
|
jbe@0
|
864 );
|
jbe@0
|
865
|
jbe@0
|
866 CREATE OPERATOR && (
|
jbe@0
|
867 leftarg = epoint,
|
jbe@0
|
868 rightarg = ecircle,
|
jbe@0
|
869 procedure = epoint_ecircle_overlap_proc,
|
jbe@0
|
870 commutator = &&,
|
jbe@0
|
871 restrict = areasel,
|
jbe@0
|
872 join = areajoinsel
|
jbe@0
|
873 );
|
jbe@0
|
874
|
jbe@0
|
875 CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint)
|
jbe@0
|
876 RETURNS boolean
|
jbe@0
|
877 LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1';
|
jbe@0
|
878
|
jbe@0
|
879 CREATE OPERATOR && (
|
jbe@0
|
880 leftarg = ecircle,
|
jbe@0
|
881 rightarg = epoint,
|
jbe@0
|
882 procedure = epoint_ecircle_overlap_commutator,
|
jbe@0
|
883 commutator = &&,
|
jbe@0
|
884 restrict = areasel,
|
jbe@0
|
885 join = areajoinsel
|
jbe@0
|
886 );
|
jbe@0
|
887
|
jbe@0
|
888 CREATE OPERATOR && (
|
jbe@0
|
889 leftarg = epoint,
|
jbe@0
|
890 rightarg = ecluster,
|
jbe@0
|
891 procedure = epoint_ecluster_overlap_proc,
|
jbe@0
|
892 commutator = &&,
|
jbe@0
|
893 restrict = areasel,
|
jbe@0
|
894 join = areajoinsel
|
jbe@0
|
895 );
|
jbe@0
|
896
|
jbe@0
|
897 CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint)
|
jbe@0
|
898 RETURNS boolean
|
jbe@0
|
899 LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1';
|
jbe@0
|
900
|
jbe@0
|
901 CREATE OPERATOR && (
|
jbe@0
|
902 leftarg = ecluster,
|
jbe@0
|
903 rightarg = epoint,
|
jbe@0
|
904 procedure = epoint_ecluster_overlap_commutator,
|
jbe@0
|
905 commutator = &&,
|
jbe@0
|
906 restrict = areasel,
|
jbe@0
|
907 join = areajoinsel
|
jbe@0
|
908 );
|
jbe@0
|
909
|
jbe@0
|
910 CREATE OPERATOR && (
|
jbe@0
|
911 leftarg = ebox,
|
jbe@0
|
912 rightarg = ebox,
|
jbe@0
|
913 procedure = ebox_overlap_proc,
|
jbe@0
|
914 commutator = &&,
|
jbe@0
|
915 restrict = areasel,
|
jbe@0
|
916 join = areajoinsel
|
jbe@0
|
917 );
|
jbe@0
|
918
|
jbe@0
|
919 CREATE OPERATOR && (
|
jbe@0
|
920 leftarg = ecircle,
|
jbe@0
|
921 rightarg = ecircle,
|
jbe@0
|
922 procedure = ecircle_overlap_proc,
|
jbe@0
|
923 commutator = &&,
|
jbe@0
|
924 restrict = areasel,
|
jbe@0
|
925 join = areajoinsel
|
jbe@0
|
926 );
|
jbe@0
|
927
|
jbe@0
|
928 CREATE OPERATOR && (
|
jbe@0
|
929 leftarg = ecircle,
|
jbe@0
|
930 rightarg = ecluster,
|
jbe@0
|
931 procedure = ecircle_ecluster_overlap_proc,
|
jbe@0
|
932 commutator = &&,
|
jbe@0
|
933 restrict = areasel,
|
jbe@0
|
934 join = areajoinsel
|
jbe@0
|
935 );
|
jbe@0
|
936
|
jbe@0
|
937 CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle)
|
jbe@0
|
938 RETURNS boolean
|
jbe@0
|
939 LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1';
|
jbe@0
|
940
|
jbe@0
|
941 CREATE OPERATOR && (
|
jbe@0
|
942 leftarg = ecluster,
|
jbe@0
|
943 rightarg = ecircle,
|
jbe@0
|
944 procedure = ecircle_ecluster_overlap_commutator,
|
jbe@0
|
945 commutator = &&,
|
jbe@0
|
946 restrict = areasel,
|
jbe@0
|
947 join = areajoinsel
|
jbe@0
|
948 );
|
jbe@0
|
949
|
jbe@16
|
950 CREATE OPERATOR && (
|
jbe@16
|
951 leftarg = ecluster,
|
jbe@16
|
952 rightarg = ecluster,
|
jbe@16
|
953 procedure = ecluster_overlap_proc,
|
jbe@16
|
954 commutator = &&,
|
jbe@16
|
955 restrict = areasel,
|
jbe@16
|
956 join = areajoinsel
|
jbe@16
|
957 );
|
jbe@16
|
958
|
jbe@16
|
959 CREATE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle)
|
jbe@16
|
960 RETURNS boolean
|
jbe@16
|
961 LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2';
|
jbe@16
|
962
|
jbe@16
|
963 CREATE OPERATOR && (
|
jbe@16
|
964 leftarg = ebox,
|
jbe@16
|
965 rightarg = ecircle,
|
jbe@16
|
966 procedure = ebox_ecircle_overlap_castwrap,
|
jbe@16
|
967 commutator = &&,
|
jbe@16
|
968 restrict = areasel,
|
jbe@16
|
969 join = areajoinsel
|
jbe@16
|
970 );
|
jbe@16
|
971
|
jbe@16
|
972 CREATE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox)
|
jbe@16
|
973 RETURNS boolean
|
jbe@16
|
974 LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster';
|
jbe@16
|
975
|
jbe@16
|
976 CREATE OPERATOR && (
|
jbe@16
|
977 leftarg = ecircle,
|
jbe@16
|
978 rightarg = ebox,
|
jbe@16
|
979 procedure = ebox_ecircle_overlap_castwrap,
|
jbe@16
|
980 commutator = &&,
|
jbe@16
|
981 restrict = areasel,
|
jbe@16
|
982 join = areajoinsel
|
jbe@16
|
983 );
|
jbe@16
|
984
|
jbe@16
|
985 CREATE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster)
|
jbe@16
|
986 RETURNS boolean
|
jbe@16
|
987 LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2';
|
jbe@16
|
988
|
jbe@16
|
989 CREATE OPERATOR && (
|
jbe@16
|
990 leftarg = ebox,
|
jbe@16
|
991 rightarg = ecluster,
|
jbe@16
|
992 procedure = ebox_ecluster_overlap_castwrap,
|
jbe@16
|
993 commutator = &&,
|
jbe@16
|
994 restrict = areasel,
|
jbe@16
|
995 join = areajoinsel
|
jbe@16
|
996 );
|
jbe@16
|
997
|
jbe@16
|
998 CREATE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox)
|
jbe@16
|
999 RETURNS boolean
|
jbe@16
|
1000 LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster';
|
jbe@16
|
1001
|
jbe@16
|
1002 CREATE OPERATOR && (
|
jbe@16
|
1003 leftarg = ecluster,
|
jbe@16
|
1004 rightarg = ebox,
|
jbe@16
|
1005 procedure = ebox_ecluster_overlap_castwrap,
|
jbe@16
|
1006 commutator = &&,
|
jbe@16
|
1007 restrict = areasel,
|
jbe@16
|
1008 join = areajoinsel
|
jbe@16
|
1009 );
|
jbe@16
|
1010
|
jbe@10
|
1011 CREATE OPERATOR &&+ (
|
jbe@10
|
1012 leftarg = epoint,
|
jbe@10
|
1013 rightarg = ecluster,
|
jbe@10
|
1014 procedure = epoint_ecluster_may_overlap_proc,
|
jbe@10
|
1015 commutator = &&+,
|
jbe@10
|
1016 restrict = areasel,
|
jbe@10
|
1017 join = areajoinsel
|
jbe@10
|
1018 );
|
jbe@10
|
1019
|
jbe@10
|
1020 CREATE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint)
|
jbe@10
|
1021 RETURNS boolean
|
jbe@10
|
1022 LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1';
|
jbe@10
|
1023
|
jbe@10
|
1024 CREATE OPERATOR &&+ (
|
jbe@10
|
1025 leftarg = ecluster,
|
jbe@10
|
1026 rightarg = epoint,
|
jbe@10
|
1027 procedure = epoint_ecluster_may_overlap_commutator,
|
jbe@10
|
1028 commutator = &&+,
|
jbe@10
|
1029 restrict = areasel,
|
jbe@10
|
1030 join = areajoinsel
|
jbe@10
|
1031 );
|
jbe@10
|
1032
|
jbe@10
|
1033 CREATE OPERATOR &&+ (
|
jbe@10
|
1034 leftarg = ebox,
|
jbe@10
|
1035 rightarg = ecircle,
|
jbe@10
|
1036 procedure = ebox_ecircle_may_overlap_proc,
|
jbe@10
|
1037 commutator = &&+,
|
jbe@10
|
1038 restrict = areasel,
|
jbe@10
|
1039 join = areajoinsel
|
jbe@10
|
1040 );
|
jbe@10
|
1041
|
jbe@10
|
1042 CREATE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox)
|
jbe@10
|
1043 RETURNS boolean
|
jbe@10
|
1044 LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1';
|
jbe@10
|
1045
|
jbe@10
|
1046 CREATE OPERATOR &&+ (
|
jbe@10
|
1047 leftarg = ecircle,
|
jbe@10
|
1048 rightarg = ebox,
|
jbe@10
|
1049 procedure = ebox_ecircle_may_overlap_commutator,
|
jbe@10
|
1050 commutator = &&+,
|
jbe@10
|
1051 restrict = areasel,
|
jbe@10
|
1052 join = areajoinsel
|
jbe@10
|
1053 );
|
jbe@10
|
1054
|
jbe@10
|
1055 CREATE OPERATOR &&+ (
|
jbe@10
|
1056 leftarg = ebox,
|
jbe@10
|
1057 rightarg = ecluster,
|
jbe@10
|
1058 procedure = ebox_ecluster_may_overlap_proc,
|
jbe@10
|
1059 commutator = &&+,
|
jbe@10
|
1060 restrict = areasel,
|
jbe@10
|
1061 join = areajoinsel
|
jbe@10
|
1062 );
|
jbe@10
|
1063
|
jbe@10
|
1064 CREATE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox)
|
jbe@10
|
1065 RETURNS boolean
|
jbe@10
|
1066 LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1';
|
jbe@10
|
1067
|
jbe@10
|
1068 CREATE OPERATOR &&+ (
|
jbe@10
|
1069 leftarg = ecluster,
|
jbe@10
|
1070 rightarg = ebox,
|
jbe@10
|
1071 procedure = ebox_ecluster_may_overlap_commutator,
|
jbe@10
|
1072 commutator = &&+,
|
jbe@10
|
1073 restrict = areasel,
|
jbe@10
|
1074 join = areajoinsel
|
jbe@10
|
1075 );
|
jbe@10
|
1076
|
jbe@10
|
1077 CREATE OPERATOR &&+ (
|
jbe@10
|
1078 leftarg = ecircle,
|
jbe@10
|
1079 rightarg = ecluster,
|
jbe@10
|
1080 procedure = ecircle_ecluster_may_overlap_proc,
|
jbe@10
|
1081 commutator = &&+,
|
jbe@10
|
1082 restrict = areasel,
|
jbe@10
|
1083 join = areajoinsel
|
jbe@10
|
1084 );
|
jbe@10
|
1085
|
jbe@10
|
1086 CREATE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle)
|
jbe@10
|
1087 RETURNS boolean
|
jbe@10
|
1088 LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1';
|
jbe@10
|
1089
|
jbe@10
|
1090 CREATE OPERATOR &&+ (
|
jbe@10
|
1091 leftarg = ecluster,
|
jbe@10
|
1092 rightarg = ecircle,
|
jbe@10
|
1093 procedure = ecircle_ecluster_may_overlap_commutator,
|
jbe@10
|
1094 commutator = &&+,
|
jbe@10
|
1095 restrict = areasel,
|
jbe@10
|
1096 join = areajoinsel
|
jbe@10
|
1097 );
|
jbe@10
|
1098
|
jbe@10
|
1099 CREATE OPERATOR &&+ (
|
jbe@10
|
1100 leftarg = ecluster,
|
jbe@10
|
1101 rightarg = ecluster,
|
jbe@10
|
1102 procedure = ecluster_may_overlap_proc,
|
jbe@10
|
1103 commutator = &&+,
|
jbe@10
|
1104 restrict = areasel,
|
jbe@10
|
1105 join = areajoinsel
|
jbe@10
|
1106 );
|
jbe@10
|
1107
|
jbe@16
|
1108 CREATE OPERATOR @> (
|
jbe@16
|
1109 leftarg = ebox,
|
jbe@16
|
1110 rightarg = epoint,
|
jbe@16
|
1111 procedure = epoint_ebox_overlap_commutator,
|
jbe@16
|
1112 commutator = <@,
|
jbe@16
|
1113 restrict = areasel,
|
jbe@16
|
1114 join = areajoinsel
|
jbe@16
|
1115 );
|
jbe@16
|
1116
|
jbe@16
|
1117 CREATE OPERATOR <@ (
|
jbe@16
|
1118 leftarg = epoint,
|
jbe@16
|
1119 rightarg = ebox,
|
jbe@16
|
1120 procedure = epoint_ebox_overlap_proc,
|
jbe@16
|
1121 commutator = @>,
|
jbe@16
|
1122 restrict = areasel,
|
jbe@16
|
1123 join = areajoinsel
|
jbe@16
|
1124 );
|
jbe@16
|
1125
|
jbe@16
|
1126 CREATE OPERATOR @> (
|
jbe@16
|
1127 leftarg = ecluster,
|
jbe@16
|
1128 rightarg = epoint,
|
jbe@16
|
1129 procedure = epoint_ecluster_overlap_commutator,
|
jbe@16
|
1130 commutator = <@,
|
jbe@16
|
1131 restrict = areasel,
|
jbe@16
|
1132 join = areajoinsel
|
jbe@16
|
1133 );
|
jbe@16
|
1134
|
jbe@16
|
1135 CREATE OPERATOR <@ (
|
jbe@16
|
1136 leftarg = epoint,
|
jbe@16
|
1137 rightarg = ecluster,
|
jbe@16
|
1138 procedure = epoint_ecluster_overlap_proc,
|
jbe@16
|
1139 commutator = <@,
|
jbe@16
|
1140 restrict = areasel,
|
jbe@16
|
1141 join = areajoinsel
|
jbe@16
|
1142 );
|
jbe@16
|
1143
|
jbe@16
|
1144 CREATE OPERATOR @> (
|
jbe@16
|
1145 leftarg = ecluster,
|
jbe@16
|
1146 rightarg = ecluster,
|
jbe@16
|
1147 procedure = ecluster_contains_proc,
|
jbe@16
|
1148 commutator = <@,
|
jbe@16
|
1149 restrict = areasel,
|
jbe@16
|
1150 join = areajoinsel
|
jbe@16
|
1151 );
|
jbe@16
|
1152
|
jbe@16
|
1153 CREATE FUNCTION ecluster_contains_commutator(ecluster, ecluster)
|
jbe@16
|
1154 RETURNS boolean
|
jbe@16
|
1155 LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1';
|
jbe@16
|
1156
|
jbe@16
|
1157 CREATE OPERATOR <@ (
|
jbe@16
|
1158 leftarg = ecluster,
|
jbe@16
|
1159 rightarg = ecluster,
|
jbe@16
|
1160 procedure = ecluster_contains_commutator,
|
jbe@16
|
1161 commutator = @>,
|
jbe@16
|
1162 restrict = areasel,
|
jbe@16
|
1163 join = areajoinsel
|
jbe@16
|
1164 );
|
jbe@16
|
1165
|
jbe@20
|
1166 CREATE FUNCTION ebox_contains_castwrap(ebox, ebox)
|
jbe@20
|
1167 RETURNS boolean
|
jbe@20
|
1168 LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2::ecluster';
|
jbe@20
|
1169
|
jbe@20
|
1170 CREATE OPERATOR @> (
|
jbe@20
|
1171 leftarg = ebox,
|
jbe@20
|
1172 rightarg = ebox,
|
jbe@20
|
1173 procedure = ebox_contains_castwrap,
|
jbe@20
|
1174 commutator = <@,
|
jbe@20
|
1175 restrict = areasel,
|
jbe@20
|
1176 join = areajoinsel
|
jbe@20
|
1177 );
|
jbe@20
|
1178
|
jbe@20
|
1179 CREATE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox)
|
jbe@20
|
1180 RETURNS boolean
|
jbe@20
|
1181 LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1::ecluster';
|
jbe@20
|
1182
|
jbe@20
|
1183 CREATE OPERATOR <@ (
|
jbe@20
|
1184 leftarg = ebox,
|
jbe@20
|
1185 rightarg = ebox,
|
jbe@20
|
1186 procedure = ebox_contains_swapped_castwrap,
|
jbe@20
|
1187 commutator = @>,
|
jbe@20
|
1188 restrict = areasel,
|
jbe@20
|
1189 join = areajoinsel
|
jbe@20
|
1190 );
|
jbe@20
|
1191
|
jbe@16
|
1192 CREATE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster)
|
jbe@16
|
1193 RETURNS boolean
|
jbe@16
|
1194 LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2';
|
jbe@16
|
1195
|
jbe@16
|
1196 CREATE OPERATOR @> (
|
jbe@16
|
1197 leftarg = ebox,
|
jbe@16
|
1198 rightarg = ecluster,
|
jbe@16
|
1199 procedure = ebox_ecluster_contains_castwrap,
|
jbe@16
|
1200 commutator = <@,
|
jbe@16
|
1201 restrict = areasel,
|
jbe@16
|
1202 join = areajoinsel
|
jbe@16
|
1203 );
|
jbe@16
|
1204
|
jbe@16
|
1205 CREATE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox)
|
jbe@16
|
1206 RETURNS boolean
|
jbe@16
|
1207 LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1';
|
jbe@16
|
1208
|
jbe@16
|
1209 CREATE OPERATOR <@ (
|
jbe@16
|
1210 leftarg = ecluster,
|
jbe@16
|
1211 rightarg = ebox,
|
jbe@16
|
1212 procedure = ebox_ecluster_contains_castwrap,
|
jbe@16
|
1213 commutator = @>,
|
jbe@16
|
1214 restrict = areasel,
|
jbe@16
|
1215 join = areajoinsel
|
jbe@16
|
1216 );
|
jbe@16
|
1217
|
jbe@16
|
1218 CREATE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox)
|
jbe@16
|
1219 RETURNS boolean
|
jbe@16
|
1220 LANGUAGE sql IMMUTABLE AS 'SELECT $1 @> $2::ecluster';
|
jbe@16
|
1221
|
jbe@16
|
1222 CREATE OPERATOR @> (
|
jbe@16
|
1223 leftarg = ecluster,
|
jbe@16
|
1224 rightarg = ebox,
|
jbe@16
|
1225 procedure = ecluster_ebox_contains_castwrap,
|
jbe@16
|
1226 commutator = <@,
|
jbe@16
|
1227 restrict = areasel,
|
jbe@16
|
1228 join = areajoinsel
|
jbe@16
|
1229 );
|
jbe@16
|
1230
|
jbe@16
|
1231 CREATE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster)
|
jbe@16
|
1232 RETURNS boolean
|
jbe@16
|
1233 LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1::ecluster';
|
jbe@16
|
1234
|
jbe@16
|
1235 CREATE OPERATOR <@ (
|
jbe@16
|
1236 leftarg = ebox,
|
jbe@16
|
1237 rightarg = ecluster,
|
jbe@16
|
1238 procedure = ecluster_ebox_contains_castwrap,
|
jbe@16
|
1239 commutator = @>,
|
jbe@16
|
1240 restrict = areasel,
|
jbe@16
|
1241 join = areajoinsel
|
jbe@16
|
1242 );
|
jbe@16
|
1243
|
jbe@0
|
1244 CREATE OPERATOR <-> (
|
jbe@0
|
1245 leftarg = epoint,
|
jbe@0
|
1246 rightarg = epoint,
|
jbe@0
|
1247 procedure = epoint_distance_proc,
|
jbe@0
|
1248 commutator = <->
|
jbe@0
|
1249 );
|
jbe@0
|
1250
|
jbe@0
|
1251 CREATE OPERATOR <-> (
|
jbe@0
|
1252 leftarg = epoint,
|
jbe@0
|
1253 rightarg = ecircle,
|
jbe@0
|
1254 procedure = epoint_ecircle_distance_proc,
|
jbe@0
|
1255 commutator = <->
|
jbe@0
|
1256 );
|
jbe@0
|
1257
|
jbe@0
|
1258 CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint)
|
jbe@0
|
1259 RETURNS float8
|
jbe@0
|
1260 LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1';
|
jbe@0
|
1261
|
jbe@0
|
1262 CREATE OPERATOR <-> (
|
jbe@0
|
1263 leftarg = ecircle,
|
jbe@0
|
1264 rightarg = epoint,
|
jbe@0
|
1265 procedure = epoint_ecircle_distance_commutator,
|
jbe@0
|
1266 commutator = <->
|
jbe@0
|
1267 );
|
jbe@0
|
1268
|
jbe@0
|
1269 CREATE OPERATOR <-> (
|
jbe@0
|
1270 leftarg = epoint,
|
jbe@0
|
1271 rightarg = ecluster,
|
jbe@0
|
1272 procedure = epoint_ecluster_distance_proc,
|
jbe@0
|
1273 commutator = <->
|
jbe@0
|
1274 );
|
jbe@0
|
1275
|
jbe@0
|
1276 CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint)
|
jbe@0
|
1277 RETURNS float8
|
jbe@0
|
1278 LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1';
|
jbe@0
|
1279
|
jbe@0
|
1280 CREATE OPERATOR <-> (
|
jbe@0
|
1281 leftarg = ecluster,
|
jbe@0
|
1282 rightarg = epoint,
|
jbe@0
|
1283 procedure = epoint_ecluster_distance_commutator,
|
jbe@0
|
1284 commutator = <->
|
jbe@0
|
1285 );
|
jbe@0
|
1286
|
jbe@0
|
1287 CREATE OPERATOR <-> (
|
jbe@0
|
1288 leftarg = ecircle,
|
jbe@0
|
1289 rightarg = ecircle,
|
jbe@0
|
1290 procedure = ecircle_distance_proc,
|
jbe@0
|
1291 commutator = <->
|
jbe@0
|
1292 );
|
jbe@0
|
1293
|
jbe@0
|
1294 CREATE OPERATOR <-> (
|
jbe@0
|
1295 leftarg = ecircle,
|
jbe@0
|
1296 rightarg = ecluster,
|
jbe@0
|
1297 procedure = ecircle_ecluster_distance_proc,
|
jbe@0
|
1298 commutator = <->
|
jbe@0
|
1299 );
|
jbe@0
|
1300
|
jbe@0
|
1301 CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle)
|
jbe@0
|
1302 RETURNS float8
|
jbe@0
|
1303 LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1';
|
jbe@0
|
1304
|
jbe@0
|
1305 CREATE OPERATOR <-> (
|
jbe@0
|
1306 leftarg = ecluster,
|
jbe@0
|
1307 rightarg = ecircle,
|
jbe@0
|
1308 procedure = ecircle_ecluster_distance_commutator,
|
jbe@0
|
1309 commutator = <->
|
jbe@0
|
1310 );
|
jbe@0
|
1311
|
jbe@16
|
1312 CREATE OPERATOR <-> (
|
jbe@16
|
1313 leftarg = ecluster,
|
jbe@16
|
1314 rightarg = ecluster,
|
jbe@16
|
1315 procedure = ecluster_distance_proc,
|
jbe@16
|
1316 commutator = <->
|
jbe@16
|
1317 );
|
jbe@16
|
1318
|
jbe@16
|
1319 CREATE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox)
|
jbe@16
|
1320 RETURNS float8
|
jbe@16
|
1321 LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster';
|
jbe@16
|
1322
|
jbe@16
|
1323 CREATE OPERATOR <-> (
|
jbe@16
|
1324 leftarg = epoint,
|
jbe@16
|
1325 rightarg = ebox,
|
jbe@16
|
1326 procedure = epoint_ebox_distance_castwrap,
|
jbe@16
|
1327 commutator = <->
|
jbe@16
|
1328 );
|
jbe@16
|
1329
|
jbe@16
|
1330 CREATE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint)
|
jbe@16
|
1331 RETURNS float8
|
jbe@16
|
1332 LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2';
|
jbe@16
|
1333
|
jbe@16
|
1334 CREATE OPERATOR <-> (
|
jbe@16
|
1335 leftarg = ebox,
|
jbe@16
|
1336 rightarg = epoint,
|
jbe@16
|
1337 procedure = epoint_ebox_distance_castwrap,
|
jbe@16
|
1338 commutator = <->
|
jbe@16
|
1339 );
|
jbe@16
|
1340
|
jbe@16
|
1341 CREATE FUNCTION ebox_distance_castwrap(ebox, ebox)
|
jbe@16
|
1342 RETURNS float8
|
jbe@16
|
1343 LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2::ecluster';
|
jbe@16
|
1344
|
jbe@16
|
1345 CREATE OPERATOR <-> (
|
jbe@16
|
1346 leftarg = ebox,
|
jbe@16
|
1347 rightarg = ebox,
|
jbe@16
|
1348 procedure = ebox_distance_castwrap,
|
jbe@16
|
1349 commutator = <->
|
jbe@16
|
1350 );
|
jbe@16
|
1351
|
jbe@16
|
1352 CREATE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle)
|
jbe@16
|
1353 RETURNS float8
|
jbe@16
|
1354 LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2';
|
jbe@16
|
1355
|
jbe@16
|
1356 CREATE OPERATOR <-> (
|
jbe@16
|
1357 leftarg = ebox,
|
jbe@16
|
1358 rightarg = ecircle,
|
jbe@16
|
1359 procedure = ebox_ecircle_distance_castwrap,
|
jbe@16
|
1360 commutator = <->
|
jbe@16
|
1361 );
|
jbe@16
|
1362
|
jbe@16
|
1363 CREATE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox)
|
jbe@16
|
1364 RETURNS float8
|
jbe@16
|
1365 LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster';
|
jbe@16
|
1366
|
jbe@16
|
1367 CREATE OPERATOR <-> (
|
jbe@16
|
1368 leftarg = ecircle,
|
jbe@16
|
1369 rightarg = ebox,
|
jbe@16
|
1370 procedure = ebox_ecircle_distance_castwrap,
|
jbe@16
|
1371 commutator = <->
|
jbe@16
|
1372 );
|
jbe@16
|
1373
|
jbe@16
|
1374 CREATE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster)
|
jbe@16
|
1375 RETURNS float8
|
jbe@16
|
1376 LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2';
|
jbe@16
|
1377
|
jbe@16
|
1378 CREATE OPERATOR <-> (
|
jbe@16
|
1379 leftarg = ebox,
|
jbe@16
|
1380 rightarg = ecluster,
|
jbe@16
|
1381 procedure = ebox_ecluster_distance_castwrap,
|
jbe@16
|
1382 commutator = <->
|
jbe@16
|
1383 );
|
jbe@16
|
1384
|
jbe@16
|
1385 CREATE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox)
|
jbe@16
|
1386 RETURNS float8
|
jbe@16
|
1387 LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster';
|
jbe@16
|
1388
|
jbe@16
|
1389 CREATE OPERATOR <-> (
|
jbe@16
|
1390 leftarg = ecluster,
|
jbe@16
|
1391 rightarg = ebox,
|
jbe@16
|
1392 procedure = ebox_ecluster_distance_castwrap,
|
jbe@16
|
1393 commutator = <->
|
jbe@16
|
1394 );
|
jbe@16
|
1395
|
jbe@46
|
1396 CREATE OPERATOR <=> (
|
jbe@46
|
1397 leftarg = ecluster,
|
jbe@46
|
1398 rightarg = epoint_with_sample_count,
|
jbe@46
|
1399 procedure = fair_distance_operator_proc
|
jbe@46
|
1400 );
|
jbe@42
|
1401
|
jbe@42
|
1402
|
jbe@0
|
1403 ----------------
|
jbe@0
|
1404 -- GiST index --
|
jbe@0
|
1405 ----------------
|
jbe@0
|
1406
|
jbe@0
|
1407 CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal)
|
jbe@0
|
1408 RETURNS boolean
|
jbe@0
|
1409 LANGUAGE C STRICT
|
jbe@46
|
1410 AS '$libdir/latlon-v0009', 'pgl_gist_consistent';
|
jbe@0
|
1411
|
jbe@0
|
1412 CREATE FUNCTION pgl_gist_union(internal, internal)
|
jbe@0
|
1413 RETURNS internal
|
jbe@0
|
1414 LANGUAGE C STRICT
|
jbe@46
|
1415 AS '$libdir/latlon-v0009', 'pgl_gist_union';
|
jbe@0
|
1416
|
jbe@0
|
1417 CREATE FUNCTION pgl_gist_compress_epoint(internal)
|
jbe@0
|
1418 RETURNS internal
|
jbe@0
|
1419 LANGUAGE C STRICT
|
jbe@46
|
1420 AS '$libdir/latlon-v0009', 'pgl_gist_compress_epoint';
|
jbe@0
|
1421
|
jbe@0
|
1422 CREATE FUNCTION pgl_gist_compress_ecircle(internal)
|
jbe@0
|
1423 RETURNS internal
|
jbe@0
|
1424 LANGUAGE C STRICT
|
jbe@46
|
1425 AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecircle';
|
jbe@0
|
1426
|
jbe@0
|
1427 CREATE FUNCTION pgl_gist_compress_ecluster(internal)
|
jbe@0
|
1428 RETURNS internal
|
jbe@0
|
1429 LANGUAGE C STRICT
|
jbe@46
|
1430 AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecluster';
|
jbe@0
|
1431
|
jbe@0
|
1432 CREATE FUNCTION pgl_gist_decompress(internal)
|
jbe@0
|
1433 RETURNS internal
|
jbe@0
|
1434 LANGUAGE C STRICT
|
jbe@46
|
1435 AS '$libdir/latlon-v0009', 'pgl_gist_decompress';
|
jbe@0
|
1436
|
jbe@0
|
1437 CREATE FUNCTION pgl_gist_penalty(internal, internal, internal)
|
jbe@0
|
1438 RETURNS internal
|
jbe@0
|
1439 LANGUAGE C STRICT
|
jbe@46
|
1440 AS '$libdir/latlon-v0009', 'pgl_gist_penalty';
|
jbe@0
|
1441
|
jbe@0
|
1442 CREATE FUNCTION pgl_gist_picksplit(internal, internal)
|
jbe@0
|
1443 RETURNS internal
|
jbe@0
|
1444 LANGUAGE C STRICT
|
jbe@46
|
1445 AS '$libdir/latlon-v0009', 'pgl_gist_picksplit';
|
jbe@0
|
1446
|
jbe@0
|
1447 CREATE FUNCTION pgl_gist_same(internal, internal, internal)
|
jbe@0
|
1448 RETURNS internal
|
jbe@0
|
1449 LANGUAGE C STRICT
|
jbe@46
|
1450 AS '$libdir/latlon-v0009', 'pgl_gist_same';
|
jbe@0
|
1451
|
jbe@0
|
1452 CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid)
|
jbe@0
|
1453 RETURNS internal
|
jbe@0
|
1454 LANGUAGE C STRICT
|
jbe@46
|
1455 AS '$libdir/latlon-v0009', 'pgl_gist_distance';
|
jbe@0
|
1456
|
jbe@0
|
1457 CREATE OPERATOR CLASS epoint_ops
|
jbe@0
|
1458 DEFAULT FOR TYPE epoint USING gist AS
|
jbe@10
|
1459 OPERATOR 11 = ,
|
jbe@10
|
1460 OPERATOR 22 && (epoint, ebox),
|
jbe@16
|
1461 OPERATOR 222 <@ (epoint, ebox),
|
jbe@10
|
1462 OPERATOR 23 && (epoint, ecircle),
|
jbe@10
|
1463 OPERATOR 24 && (epoint, ecluster),
|
jbe@10
|
1464 OPERATOR 124 &&+ (epoint, ecluster),
|
jbe@16
|
1465 OPERATOR 224 <@ (epoint, ecluster),
|
jbe@10
|
1466 OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops,
|
jbe@16
|
1467 OPERATOR 32 <-> (epoint, ebox) FOR ORDER BY float_ops,
|
jbe@10
|
1468 OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops,
|
jbe@10
|
1469 OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops,
|
jbe@0
|
1470 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal),
|
jbe@0
|
1471 FUNCTION 2 pgl_gist_union(internal, internal),
|
jbe@0
|
1472 FUNCTION 3 pgl_gist_compress_epoint(internal),
|
jbe@0
|
1473 FUNCTION 4 pgl_gist_decompress(internal),
|
jbe@0
|
1474 FUNCTION 5 pgl_gist_penalty(internal, internal, internal),
|
jbe@0
|
1475 FUNCTION 6 pgl_gist_picksplit(internal, internal),
|
jbe@0
|
1476 FUNCTION 7 pgl_gist_same(internal, internal, internal),
|
jbe@0
|
1477 FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid),
|
jbe@0
|
1478 STORAGE ekey_point;
|
jbe@0
|
1479
|
jbe@0
|
1480 CREATE OPERATOR CLASS ecircle_ops
|
jbe@0
|
1481 DEFAULT FOR TYPE ecircle USING gist AS
|
jbe@10
|
1482 OPERATOR 13 = ,
|
jbe@10
|
1483 OPERATOR 21 && (ecircle, epoint),
|
jbe@16
|
1484 OPERATOR 22 && (ecircle, ebox),
|
jbe@10
|
1485 OPERATOR 122 &&+ (ecircle, ebox),
|
jbe@10
|
1486 OPERATOR 23 && (ecircle, ecircle),
|
jbe@10
|
1487 OPERATOR 24 && (ecircle, ecluster),
|
jbe@10
|
1488 OPERATOR 124 &&+ (ecircle, ecluster),
|
jbe@10
|
1489 OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops,
|
jbe@16
|
1490 OPERATOR 32 <-> (ecircle, ebox) FOR ORDER BY float_ops,
|
jbe@10
|
1491 OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops,
|
jbe@10
|
1492 OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops,
|
jbe@0
|
1493 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal),
|
jbe@0
|
1494 FUNCTION 2 pgl_gist_union(internal, internal),
|
jbe@0
|
1495 FUNCTION 3 pgl_gist_compress_ecircle(internal),
|
jbe@0
|
1496 FUNCTION 4 pgl_gist_decompress(internal),
|
jbe@0
|
1497 FUNCTION 5 pgl_gist_penalty(internal, internal, internal),
|
jbe@0
|
1498 FUNCTION 6 pgl_gist_picksplit(internal, internal),
|
jbe@0
|
1499 FUNCTION 7 pgl_gist_same(internal, internal, internal),
|
jbe@0
|
1500 FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid),
|
jbe@0
|
1501 STORAGE ekey_area;
|
jbe@0
|
1502
|
jbe@0
|
1503 CREATE OPERATOR CLASS ecluster_ops
|
jbe@0
|
1504 DEFAULT FOR TYPE ecluster USING gist AS
|
jbe@10
|
1505 OPERATOR 21 && (ecluster, epoint),
|
jbe@10
|
1506 OPERATOR 121 &&+ (ecluster, epoint),
|
jbe@16
|
1507 OPERATOR 221 @> (ecluster, epoint),
|
jbe@16
|
1508 OPERATOR 22 && (ecluster, ebox),
|
jbe@10
|
1509 OPERATOR 122 &&+ (ecluster, ebox),
|
jbe@16
|
1510 OPERATOR 222 @> (ecluster, ebox),
|
jbe@16
|
1511 OPERATOR 322 <@ (ecluster, ebox),
|
jbe@10
|
1512 OPERATOR 23 && (ecluster, ecircle),
|
jbe@10
|
1513 OPERATOR 123 &&+ (ecluster, ecircle),
|
jbe@16
|
1514 OPERATOR 24 && (ecluster, ecluster),
|
jbe@10
|
1515 OPERATOR 124 &&+ (ecluster, ecluster),
|
jbe@16
|
1516 OPERATOR 224 @> (ecluster, ecluster),
|
jbe@16
|
1517 OPERATOR 324 <@ (ecluster, ecluster),
|
jbe@16
|
1518 OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops,
|
jbe@16
|
1519 OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops,
|
jbe@16
|
1520 OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops,
|
jbe@16
|
1521 OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops,
|
jbe@46
|
1522 OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops,
|
jbe@0
|
1523 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal),
|
jbe@0
|
1524 FUNCTION 2 pgl_gist_union(internal, internal),
|
jbe@0
|
1525 FUNCTION 3 pgl_gist_compress_ecluster(internal),
|
jbe@0
|
1526 FUNCTION 4 pgl_gist_decompress(internal),
|
jbe@0
|
1527 FUNCTION 5 pgl_gist_penalty(internal, internal, internal),
|
jbe@0
|
1528 FUNCTION 6 pgl_gist_picksplit(internal, internal),
|
jbe@0
|
1529 FUNCTION 7 pgl_gist_same(internal, internal, internal),
|
jbe@0
|
1530 FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid),
|
jbe@0
|
1531 STORAGE ekey_area;
|
jbe@0
|
1532
|
jbe@0
|
1533
|
jbe@0
|
1534 ---------------------
|
jbe@0
|
1535 -- alias functions --
|
jbe@0
|
1536 ---------------------
|
jbe@0
|
1537
|
jbe@0
|
1538 CREATE FUNCTION distance(epoint, epoint)
|
jbe@0
|
1539 RETURNS float8
|
jbe@0
|
1540 LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2';
|
jbe@0
|
1541
|
jbe@0
|
1542 CREATE FUNCTION distance(ecluster, epoint)
|
jbe@0
|
1543 RETURNS float8
|
jbe@0
|
1544 LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2';
|
jbe@0
|
1545
|
jbe@0
|
1546 CREATE FUNCTION distance_within(epoint, epoint, float8)
|
jbe@0
|
1547 RETURNS boolean
|
jbe@0
|
1548 LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)';
|
jbe@0
|
1549
|
jbe@0
|
1550 CREATE FUNCTION distance_within(ecluster, epoint, float8)
|
jbe@0
|
1551 RETURNS boolean
|
jbe@0
|
1552 LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)';
|
jbe@0
|
1553
|
jbe@46
|
1554 CREATE FUNCTION fair_distance(ecluster, epoint, int4 = 10000)
|
jbe@46
|
1555 RETURNS float8
|
jbe@46
|
1556 LANGUAGE sql IMMUTABLE AS 'SELECT $1 <=> epoint_with_sample_count($2, $3)';
|
jbe@46
|
1557
|
jbe@0
|
1558
|
jbe@0
|
1559 --------------------------------
|
jbe@0
|
1560 -- other data storage formats --
|
jbe@0
|
1561 --------------------------------
|
jbe@0
|
1562
|
jbe@39
|
1563 CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint')
|
jbe@0
|
1564 RETURNS epoint
|
jbe@0
|
1565 LANGUAGE plpgsql IMMUTABLE STRICT AS $$
|
jbe@0
|
1566 DECLARE
|
jbe@0
|
1567 "result" epoint;
|
jbe@0
|
1568 BEGIN
|
jbe@0
|
1569 IF $3 = 'epoint_lonlat' THEN
|
jbe@0
|
1570 -- avoid dynamic command execution for better performance
|
jbe@0
|
1571 RETURN epoint($2, $1);
|
jbe@0
|
1572 END IF;
|
jbe@0
|
1573 IF $3 = 'epoint' OR $3 = 'epoint_latlon' THEN
|
jbe@0
|
1574 -- avoid dynamic command execution for better performance
|
jbe@0
|
1575 RETURN epoint($1, $2);
|
jbe@0
|
1576 END IF;
|
jbe@0
|
1577 EXECUTE 'SELECT ' || $3 || '($1, $2)' INTO STRICT "result" USING $1, $2;
|
jbe@0
|
1578 RETURN "result";
|
jbe@0
|
1579 END;
|
jbe@0
|
1580 $$;
|
jbe@0
|
1581
|
jbe@39
|
1582 CREATE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat')
|
jbe@39
|
1583 RETURNS SETOF jsonb
|
jbe@39
|
1584 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@39
|
1585 SELECT "result" FROM
|
jbe@39
|
1586 ( SELECT jsonb_array_length($1) - 1 ) AS "lastindex_row" ("lastindex")
|
jbe@39
|
1587 CROSS JOIN LATERAL jsonb_array_elements(
|
jbe@39
|
1588 CASE WHEN
|
jbe@39
|
1589 coords_to_epoint(
|
jbe@39
|
1590 ($1->0->>0)::float8,
|
jbe@39
|
1591 ($1->0->>1)::float8,
|
jbe@39
|
1592 $2
|
jbe@39
|
1593 ) = coords_to_epoint(
|
jbe@39
|
1594 ($1->"lastindex"->>0)::float8,
|
jbe@39
|
1595 ($1->"lastindex"->>1)::float8,
|
jbe@39
|
1596 $2
|
jbe@39
|
1597 )
|
jbe@39
|
1598 THEN
|
jbe@39
|
1599 $1 - "lastindex"
|
jbe@39
|
1600 ELSE
|
jbe@39
|
1601 $1
|
jbe@39
|
1602 END
|
jbe@39
|
1603 ) AS "result_row" ("result")
|
jbe@39
|
1604 $$;
|
jbe@39
|
1605
|
jbe@0
|
1606 CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat')
|
jbe@0
|
1607 RETURNS epoint
|
jbe@0
|
1608 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
1609 SELECT CASE
|
jbe@0
|
1610 WHEN $1->>'type' = 'Point' THEN
|
jbe@0
|
1611 coords_to_epoint(
|
jbe@39
|
1612 ($1->'coordinates'->>0)::float8,
|
jbe@0
|
1613 ($1->'coordinates'->>1)::float8,
|
jbe@0
|
1614 $2
|
jbe@0
|
1615 )
|
jbe@0
|
1616 WHEN $1->>'type' = 'Feature' THEN
|
jbe@0
|
1617 GeoJSON_to_epoint($1->'geometry', $2)
|
jbe@0
|
1618 ELSE
|
jbe@0
|
1619 NULL
|
jbe@0
|
1620 END
|
jbe@0
|
1621 $$;
|
jbe@0
|
1622
|
jbe@0
|
1623 CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat')
|
jbe@0
|
1624 RETURNS ecluster
|
jbe@0
|
1625 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
1626 SELECT CASE $1->>'type'
|
jbe@0
|
1627 WHEN 'Point' THEN
|
jbe@0
|
1628 coords_to_epoint(
|
jbe@39
|
1629 ($1->'coordinates'->>0)::float8,
|
jbe@0
|
1630 ($1->'coordinates'->>1)::float8,
|
jbe@0
|
1631 $2
|
jbe@0
|
1632 )::ecluster
|
jbe@0
|
1633 WHEN 'MultiPoint' THEN
|
jbe@0
|
1634 ( SELECT ecluster_create_multipoint(array_agg(
|
jbe@0
|
1635 coords_to_epoint(
|
jbe@39
|
1636 ("coord"->>0)::float8,
|
jbe@0
|
1637 ("coord"->>1)::float8,
|
jbe@0
|
1638 $2
|
jbe@0
|
1639 )
|
jbe@0
|
1640 ))
|
jbe@0
|
1641 FROM jsonb_array_elements($1->'coordinates') AS "coord"
|
jbe@0
|
1642 )
|
jbe@0
|
1643 WHEN 'LineString' THEN
|
jbe@0
|
1644 ( SELECT ecluster_create_path(array_agg(
|
jbe@0
|
1645 coords_to_epoint(
|
jbe@39
|
1646 ("coord"->>0)::float8,
|
jbe@0
|
1647 ("coord"->>1)::float8,
|
jbe@0
|
1648 $2
|
jbe@0
|
1649 )
|
jbe@0
|
1650 ))
|
jbe@0
|
1651 FROM jsonb_array_elements($1->'coordinates') AS "coord"
|
jbe@0
|
1652 )
|
jbe@0
|
1653 WHEN 'MultiLineString' THEN
|
jbe@0
|
1654 ( SELECT ecluster_concat(array_agg(
|
jbe@0
|
1655 ( SELECT ecluster_create_path(array_agg(
|
jbe@0
|
1656 coords_to_epoint(
|
jbe@39
|
1657 ("coord"->>0)::float8,
|
jbe@0
|
1658 ("coord"->>1)::float8,
|
jbe@0
|
1659 $2
|
jbe@0
|
1660 )
|
jbe@0
|
1661 ))
|
jbe@0
|
1662 FROM jsonb_array_elements("coord_array") AS "coord"
|
jbe@0
|
1663 )
|
jbe@0
|
1664 ))
|
jbe@0
|
1665 FROM jsonb_array_elements($1->'coordinates') AS "coord_array"
|
jbe@0
|
1666 )
|
jbe@0
|
1667 WHEN 'Polygon' THEN
|
jbe@0
|
1668 ( SELECT ecluster_concat(array_agg(
|
jbe@0
|
1669 ( SELECT ecluster_create_polygon(array_agg(
|
jbe@0
|
1670 coords_to_epoint(
|
jbe@39
|
1671 ("coord"->>0)::float8,
|
jbe@0
|
1672 ("coord"->>1)::float8,
|
jbe@0
|
1673 $2
|
jbe@0
|
1674 )
|
jbe@0
|
1675 ))
|
jbe@39
|
1676 FROM GeoJSON_LinearRing_vertices("coord_array", $2) AS "coord"
|
jbe@0
|
1677 )
|
jbe@0
|
1678 ))
|
jbe@0
|
1679 FROM jsonb_array_elements($1->'coordinates') AS "coord_array"
|
jbe@0
|
1680 )
|
jbe@0
|
1681 WHEN 'MultiPolygon' THEN
|
jbe@0
|
1682 ( SELECT ecluster_concat(array_agg(
|
jbe@0
|
1683 ( SELECT ecluster_concat(array_agg(
|
jbe@0
|
1684 ( SELECT ecluster_create_polygon(array_agg(
|
jbe@0
|
1685 coords_to_epoint(
|
jbe@39
|
1686 ("coord"->>0)::float8,
|
jbe@0
|
1687 ("coord"->>1)::float8,
|
jbe@0
|
1688 $2
|
jbe@0
|
1689 )
|
jbe@0
|
1690 ))
|
jbe@39
|
1691 FROM GeoJSON_LinearRing_vertices("coord_array", $2) AS "coord"
|
jbe@0
|
1692 )
|
jbe@0
|
1693 ))
|
jbe@0
|
1694 FROM jsonb_array_elements("coord_array_array") AS "coord_array"
|
jbe@0
|
1695 )
|
jbe@0
|
1696 ))
|
jbe@0
|
1697 FROM jsonb_array_elements($1->'coordinates') AS "coord_array_array"
|
jbe@0
|
1698 )
|
jbe@39
|
1699 WHEN 'GeometryCollection' THEN
|
jbe@39
|
1700 ( SELECT ecluster_concat(array_agg(
|
jbe@39
|
1701 GeoJSON_to_ecluster("geometry", $2)
|
jbe@39
|
1702 ))
|
jbe@39
|
1703 FROM jsonb_array_elements($1->'geometries') AS "geometry"
|
jbe@39
|
1704 )
|
jbe@0
|
1705 WHEN 'Feature' THEN
|
jbe@0
|
1706 GeoJSON_to_ecluster($1->'geometry', $2)
|
jbe@0
|
1707 WHEN 'FeatureCollection' THEN
|
jbe@0
|
1708 ( SELECT ecluster_concat(array_agg(
|
jbe@0
|
1709 GeoJSON_to_ecluster("feature", $2)
|
jbe@0
|
1710 ))
|
jbe@0
|
1711 FROM jsonb_array_elements($1->'features') AS "feature"
|
jbe@0
|
1712 )
|
jbe@0
|
1713 ELSE
|
jbe@0
|
1714 NULL
|
jbe@0
|
1715 END
|
jbe@0
|
1716 $$;
|
jbe@0
|
1717
|