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