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