| rev |
line source |
|
jbe@73
|
1 SET LOCAL search_path TO @extschema@;
|
|
jbe@73
|
2
|
|
jbe@0
|
3
|
|
jbe@0
|
4 ------------------------------------------------------------
|
|
jbe@0
|
5 -- dummy input/output functions for dummy index key types --
|
|
jbe@0
|
6 ------------------------------------------------------------
|
|
jbe@0
|
7
|
|
jbe@69
|
8 CREATE OR REPLACE FUNCTION ekey_point_in_dummy(cstring)
|
|
jbe@0
|
9 RETURNS ekey_point
|
|
jbe@0
|
10 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
11 AS '$libdir/latlon-v0010', 'pgl_notimpl';
|
|
jbe@0
|
12
|
|
jbe@69
|
13 CREATE OR REPLACE FUNCTION ekey_point_out_dummy(ekey_point)
|
|
jbe@0
|
14 RETURNS cstring
|
|
jbe@0
|
15 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
16 AS '$libdir/latlon-v0010', 'pgl_notimpl';
|
|
jbe@0
|
17
|
|
jbe@69
|
18 CREATE OR REPLACE FUNCTION ekey_area_in_dummy(cstring)
|
|
jbe@0
|
19 RETURNS ekey_area
|
|
jbe@0
|
20 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
21 AS '$libdir/latlon-v0010', 'pgl_notimpl';
|
|
jbe@0
|
22
|
|
jbe@69
|
23 CREATE OR REPLACE FUNCTION ekey_area_out_dummy(ekey_area)
|
|
jbe@0
|
24 RETURNS cstring
|
|
jbe@0
|
25 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
26 AS '$libdir/latlon-v0010', 'pgl_notimpl';
|
|
jbe@0
|
27
|
|
jbe@0
|
28
|
|
jbe@0
|
29 --------------------------
|
|
jbe@0
|
30 -- text input functions --
|
|
jbe@0
|
31 --------------------------
|
|
jbe@0
|
32
|
|
jbe@69
|
33 CREATE OR REPLACE FUNCTION epoint_in(cstring)
|
|
jbe@0
|
34 RETURNS epoint
|
|
jbe@0
|
35 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
36 AS '$libdir/latlon-v0010', 'pgl_epoint_in';
|
|
jbe@46
|
37
|
|
jbe@69
|
38 CREATE OR REPLACE FUNCTION epoint_with_sample_count_in(cstring)
|
|
jbe@46
|
39 RETURNS epoint_with_sample_count
|
|
jbe@46
|
40 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
41 AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_in';
|
|
jbe@0
|
42
|
|
jbe@69
|
43 CREATE OR REPLACE FUNCTION ebox_in(cstring)
|
|
jbe@0
|
44 RETURNS ebox
|
|
jbe@0
|
45 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
46 AS '$libdir/latlon-v0010', 'pgl_ebox_in';
|
|
jbe@0
|
47
|
|
jbe@69
|
48 CREATE OR REPLACE FUNCTION ecircle_in(cstring)
|
|
jbe@0
|
49 RETURNS ecircle
|
|
jbe@0
|
50 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
51 AS '$libdir/latlon-v0010', 'pgl_ecircle_in';
|
|
jbe@0
|
52
|
|
jbe@69
|
53 CREATE OR REPLACE FUNCTION ecluster_in(cstring)
|
|
jbe@0
|
54 RETURNS ecluster
|
|
jbe@0
|
55 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
56 AS '$libdir/latlon-v0010', 'pgl_ecluster_in';
|
|
jbe@0
|
57
|
|
jbe@0
|
58
|
|
jbe@0
|
59 ---------------------------
|
|
jbe@0
|
60 -- text output functions --
|
|
jbe@0
|
61 ---------------------------
|
|
jbe@0
|
62
|
|
jbe@69
|
63 CREATE OR REPLACE FUNCTION epoint_out(epoint)
|
|
jbe@0
|
64 RETURNS cstring
|
|
jbe@0
|
65 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
66 AS '$libdir/latlon-v0010', 'pgl_epoint_out';
|
|
jbe@46
|
67
|
|
jbe@69
|
68 CREATE OR REPLACE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count)
|
|
jbe@46
|
69 RETURNS cstring
|
|
jbe@46
|
70 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
71 AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_out';
|
|
jbe@0
|
72
|
|
jbe@69
|
73 CREATE OR REPLACE FUNCTION ebox_out(ebox)
|
|
jbe@0
|
74 RETURNS cstring
|
|
jbe@0
|
75 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
76 AS '$libdir/latlon-v0010', 'pgl_ebox_out';
|
|
jbe@0
|
77
|
|
jbe@69
|
78 CREATE OR REPLACE FUNCTION ecircle_out(ecircle)
|
|
jbe@0
|
79 RETURNS cstring
|
|
jbe@0
|
80 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
81 AS '$libdir/latlon-v0010', 'pgl_ecircle_out';
|
|
jbe@0
|
82
|
|
jbe@69
|
83 CREATE OR REPLACE FUNCTION ecluster_out(ecluster)
|
|
jbe@0
|
84 RETURNS cstring
|
|
jbe@0
|
85 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
86 AS '$libdir/latlon-v0010', 'pgl_ecluster_out';
|
|
jbe@0
|
87
|
|
jbe@0
|
88
|
|
jbe@0
|
89 --------------------------
|
|
jbe@0
|
90 -- binary I/O functions --
|
|
jbe@0
|
91 --------------------------
|
|
jbe@0
|
92
|
|
jbe@69
|
93 CREATE OR REPLACE FUNCTION epoint_recv(internal)
|
|
jbe@0
|
94 RETURNS epoint
|
|
jbe@0
|
95 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
96 AS '$libdir/latlon-v0010', 'pgl_epoint_recv';
|
|
jbe@0
|
97
|
|
jbe@69
|
98 CREATE OR REPLACE FUNCTION ebox_recv(internal)
|
|
jbe@0
|
99 RETURNS ebox
|
|
jbe@0
|
100 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
101 AS '$libdir/latlon-v0010', 'pgl_ebox_recv';
|
|
jbe@0
|
102
|
|
jbe@69
|
103 CREATE OR REPLACE FUNCTION ecircle_recv(internal)
|
|
jbe@0
|
104 RETURNS ecircle
|
|
jbe@0
|
105 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
106 AS '$libdir/latlon-v0010', 'pgl_ecircle_recv';
|
|
jbe@0
|
107
|
|
jbe@69
|
108 CREATE OR REPLACE FUNCTION epoint_send(epoint)
|
|
jbe@0
|
109 RETURNS bytea
|
|
jbe@0
|
110 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
111 AS '$libdir/latlon-v0010', 'pgl_epoint_send';
|
|
jbe@0
|
112
|
|
jbe@69
|
113 CREATE OR REPLACE FUNCTION ebox_send(ebox)
|
|
jbe@69
|
114 RETURNS bytea
|
|
jbe@69
|
115 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
116 AS '$libdir/latlon-v0010', 'pgl_ebox_send';
|
|
jbe@46
|
117
|
|
jbe@69
|
118 CREATE OR REPLACE FUNCTION ecircle_send(ecircle)
|
|
jbe@69
|
119 RETURNS bytea
|
|
jbe@69
|
120 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
121 AS '$libdir/latlon-v0010', 'pgl_ecircle_send';
|
|
jbe@0
|
122
|
|
jbe@0
|
123
|
|
jbe@0
|
124 --------------------
|
|
jbe@0
|
125 -- B-tree support --
|
|
jbe@0
|
126 --------------------
|
|
jbe@0
|
127
|
|
jbe@0
|
128 -- begin of B-tree support for epoint
|
|
jbe@0
|
129
|
|
jbe@69
|
130 CREATE OR REPLACE FUNCTION epoint_btree_lt(epoint, epoint)
|
|
jbe@0
|
131 RETURNS boolean
|
|
jbe@0
|
132 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
133 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_lt';
|
|
jbe@0
|
134
|
|
jbe@69
|
135 CREATE OR REPLACE FUNCTION epoint_btree_le(epoint, epoint)
|
|
jbe@0
|
136 RETURNS boolean
|
|
jbe@0
|
137 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
138 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_le';
|
|
jbe@0
|
139
|
|
jbe@69
|
140 CREATE OR REPLACE FUNCTION epoint_btree_eq(epoint, epoint)
|
|
jbe@0
|
141 RETURNS boolean
|
|
jbe@0
|
142 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
143 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_eq';
|
|
jbe@0
|
144
|
|
jbe@69
|
145 CREATE OR REPLACE FUNCTION epoint_btree_ne(epoint, epoint)
|
|
jbe@69
|
146 RETURNS boolean
|
|
jbe@69
|
147 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
148 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ne';
|
|
jbe@0
|
149
|
|
jbe@69
|
150 CREATE OR REPLACE FUNCTION epoint_btree_ge(epoint, epoint)
|
|
jbe@69
|
151 RETURNS boolean
|
|
jbe@69
|
152 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
153 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ge';
|
|
jbe@0
|
154
|
|
jbe@69
|
155 CREATE OR REPLACE FUNCTION epoint_btree_gt(epoint, epoint)
|
|
jbe@69
|
156 RETURNS boolean
|
|
jbe@69
|
157 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
158 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_gt';
|
|
jbe@0
|
159
|
|
jbe@69
|
160 CREATE OR REPLACE FUNCTION epoint_btree_cmp(epoint, epoint)
|
|
jbe@0
|
161 RETURNS int4
|
|
jbe@0
|
162 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
163 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_cmp';
|
|
jbe@0
|
164
|
|
jbe@0
|
165 -- end of B-tree support for epoint
|
|
jbe@0
|
166
|
|
jbe@0
|
167 -- begin of B-tree support for ebox
|
|
jbe@0
|
168
|
|
jbe@69
|
169 CREATE OR REPLACE FUNCTION ebox_btree_lt(ebox, ebox)
|
|
jbe@0
|
170 RETURNS boolean
|
|
jbe@0
|
171 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
172 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_lt';
|
|
jbe@0
|
173
|
|
jbe@69
|
174 CREATE OR REPLACE FUNCTION ebox_btree_le(ebox, ebox)
|
|
jbe@0
|
175 RETURNS boolean
|
|
jbe@0
|
176 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
177 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_le';
|
|
jbe@0
|
178
|
|
jbe@69
|
179 CREATE OR REPLACE FUNCTION ebox_btree_eq(ebox, ebox)
|
|
jbe@0
|
180 RETURNS boolean
|
|
jbe@0
|
181 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
182 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_eq';
|
|
jbe@0
|
183
|
|
jbe@69
|
184 CREATE OR REPLACE FUNCTION ebox_btree_ne(ebox, ebox)
|
|
jbe@69
|
185 RETURNS boolean
|
|
jbe@69
|
186 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
187 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ne';
|
|
jbe@0
|
188
|
|
jbe@69
|
189 CREATE OR REPLACE FUNCTION ebox_btree_ge(ebox, ebox)
|
|
jbe@69
|
190 RETURNS boolean
|
|
jbe@69
|
191 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
192 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ge';
|
|
jbe@0
|
193
|
|
jbe@69
|
194 CREATE OR REPLACE FUNCTION ebox_btree_gt(ebox, ebox)
|
|
jbe@69
|
195 RETURNS boolean
|
|
jbe@69
|
196 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
197 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_gt';
|
|
jbe@0
|
198
|
|
jbe@69
|
199 CREATE OR REPLACE FUNCTION ebox_btree_cmp(ebox, ebox)
|
|
jbe@0
|
200 RETURNS int4
|
|
jbe@0
|
201 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
202 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_cmp';
|
|
jbe@0
|
203
|
|
jbe@0
|
204 -- end of B-tree support for ebox
|
|
jbe@0
|
205
|
|
jbe@0
|
206 -- begin of B-tree support for ecircle
|
|
jbe@0
|
207
|
|
jbe@69
|
208 CREATE OR REPLACE FUNCTION ecircle_btree_lt(ecircle, ecircle)
|
|
jbe@0
|
209 RETURNS boolean
|
|
jbe@0
|
210 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
211 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_lt';
|
|
jbe@0
|
212
|
|
jbe@69
|
213 CREATE OR REPLACE FUNCTION ecircle_btree_le(ecircle, ecircle)
|
|
jbe@0
|
214 RETURNS boolean
|
|
jbe@0
|
215 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
216 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_le';
|
|
jbe@0
|
217
|
|
jbe@69
|
218 CREATE OR REPLACE FUNCTION ecircle_btree_eq(ecircle, ecircle)
|
|
jbe@0
|
219 RETURNS boolean
|
|
jbe@0
|
220 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
221 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_eq';
|
|
jbe@0
|
222
|
|
jbe@69
|
223 CREATE OR REPLACE FUNCTION ecircle_btree_ne(ecircle, ecircle)
|
|
jbe@69
|
224 RETURNS boolean
|
|
jbe@69
|
225 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
226 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ne';
|
|
jbe@0
|
227
|
|
jbe@69
|
228 CREATE OR REPLACE FUNCTION ecircle_btree_ge(ecircle, ecircle)
|
|
jbe@69
|
229 RETURNS boolean
|
|
jbe@69
|
230 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
231 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ge';
|
|
jbe@0
|
232
|
|
jbe@69
|
233 CREATE OR REPLACE FUNCTION ecircle_btree_gt(ecircle, ecircle)
|
|
jbe@69
|
234 RETURNS boolean
|
|
jbe@69
|
235 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
236 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_gt';
|
|
jbe@0
|
237
|
|
jbe@69
|
238 CREATE OR REPLACE FUNCTION ecircle_btree_cmp(ecircle, ecircle)
|
|
jbe@0
|
239 RETURNS int4
|
|
jbe@0
|
240 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
241 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_cmp';
|
|
jbe@0
|
242
|
|
jbe@0
|
243 -- end of B-tree support for ecircle
|
|
jbe@0
|
244
|
|
jbe@0
|
245
|
|
jbe@0
|
246 ----------------
|
|
jbe@0
|
247 -- type casts --
|
|
jbe@0
|
248 ----------------
|
|
jbe@0
|
249
|
|
jbe@69
|
250 CREATE OR REPLACE FUNCTION cast_epoint_to_ebox(epoint)
|
|
jbe@0
|
251 RETURNS ebox
|
|
jbe@0
|
252 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
253 AS '$libdir/latlon-v0010', 'pgl_epoint_to_ebox';
|
|
jbe@0
|
254
|
|
jbe@69
|
255 CREATE OR REPLACE FUNCTION cast_epoint_to_ecircle(epoint)
|
|
jbe@0
|
256 RETURNS ecircle
|
|
jbe@0
|
257 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
258 AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecircle';
|
|
jbe@0
|
259
|
|
jbe@69
|
260 CREATE OR REPLACE FUNCTION cast_epoint_to_ecluster(epoint)
|
|
jbe@0
|
261 RETURNS ecluster
|
|
jbe@0
|
262 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
263 AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecluster';
|
|
jbe@0
|
264
|
|
jbe@69
|
265 CREATE OR REPLACE FUNCTION cast_ebox_to_ecluster(ebox)
|
|
jbe@0
|
266 RETURNS ecluster
|
|
jbe@0
|
267 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
268 AS '$libdir/latlon-v0010', 'pgl_ebox_to_ecluster';
|
|
jbe@0
|
269
|
|
jbe@0
|
270
|
|
jbe@0
|
271 ---------------------------
|
|
jbe@0
|
272 -- constructor functions --
|
|
jbe@0
|
273 ---------------------------
|
|
jbe@0
|
274
|
|
jbe@69
|
275 CREATE OR REPLACE FUNCTION epoint(float8, float8)
|
|
jbe@0
|
276 RETURNS epoint
|
|
jbe@0
|
277 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
278 AS '$libdir/latlon-v0010', 'pgl_create_epoint';
|
|
jbe@0
|
279
|
|
jbe@73
|
280 CREATE OR REPLACE FUNCTION epoint_latlon(float8, float8)
|
|
jbe@73
|
281 RETURNS epoint
|
|
jbe@73
|
282 LANGUAGE SQL IMMUTABLE STRICT AS $$
|
|
jbe@73
|
283 SELECT @extschema@.epoint($1, $2)
|
|
jbe@73
|
284 $$;
|
|
jbe@73
|
285
|
|
jbe@73
|
286 CREATE OR REPLACE FUNCTION epoint_lonlat(float8, float8)
|
|
jbe@73
|
287 RETURNS epoint
|
|
jbe@73
|
288 LANGUAGE SQL IMMUTABLE STRICT AS $$
|
|
jbe@73
|
289 SELECT @extschema@.epoint($2, $1)
|
|
jbe@73
|
290 $$;
|
|
jbe@73
|
291
|
|
jbe@69
|
292 CREATE OR REPLACE FUNCTION epoint_with_sample_count(epoint, int4)
|
|
jbe@46
|
293 RETURNS epoint_with_sample_count
|
|
jbe@46
|
294 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
295 AS '$libdir/latlon-v0010', 'pgl_create_epoint_with_sample_count';
|
|
jbe@46
|
296
|
|
jbe@69
|
297 CREATE OR REPLACE FUNCTION empty_ebox()
|
|
jbe@0
|
298 RETURNS ebox
|
|
jbe@0
|
299 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
300 AS '$libdir/latlon-v0010', 'pgl_create_empty_ebox';
|
|
jbe@0
|
301
|
|
jbe@69
|
302 CREATE OR REPLACE FUNCTION ebox(float8, float8, float8, float8)
|
|
jbe@0
|
303 RETURNS ebox
|
|
jbe@0
|
304 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
305 AS '$libdir/latlon-v0010', 'pgl_create_ebox';
|
|
jbe@0
|
306
|
|
jbe@69
|
307 CREATE OR REPLACE FUNCTION ebox(epoint, epoint)
|
|
jbe@69
|
308 RETURNS ebox
|
|
jbe@0
|
309 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
310 AS '$libdir/latlon-v0010', 'pgl_create_ebox_from_epoints';
|
|
jbe@0
|
311
|
|
jbe@69
|
312 CREATE OR REPLACE FUNCTION ecircle(float8, float8, float8)
|
|
jbe@0
|
313 RETURNS ecircle
|
|
jbe@0
|
314 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
315 AS '$libdir/latlon-v0010', 'pgl_create_ecircle';
|
|
jbe@0
|
316
|
|
jbe@69
|
317 CREATE OR REPLACE FUNCTION ecircle(epoint, float8)
|
|
jbe@69
|
318 RETURNS ecircle
|
|
jbe@69
|
319 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
320 AS '$libdir/latlon-v0010', 'pgl_create_ecircle_from_epoint';
|
|
jbe@0
|
321
|
|
jbe@73
|
322 CREATE OR REPLACE FUNCTION ecluster_concat(ecluster[])
|
|
jbe@73
|
323 RETURNS ecluster
|
|
jbe@73
|
324 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
325 SELECT pg_catalog.array_to_string($1, ' ')::@extschema@.ecluster
|
|
jbe@73
|
326 $$;
|
|
jbe@73
|
327
|
|
jbe@73
|
328 CREATE OR REPLACE FUNCTION ecluster_concat(ecluster, ecluster)
|
|
jbe@73
|
329 RETURNS ecluster
|
|
jbe@73
|
330 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
331 SELECT (
|
|
jbe@73
|
332 $1::pg_catalog.text OPERATOR(pg_catalog.||) ' ' OPERATOR(pg_catalog.||)
|
|
jbe@73
|
333 $2::pg_catalog.text
|
|
jbe@73
|
334 )::@extschema@.ecluster
|
|
jbe@73
|
335 $$;
|
|
jbe@73
|
336
|
|
jbe@73
|
337 CREATE OR REPLACE FUNCTION ecluster_create_multipoint(epoint[])
|
|
jbe@73
|
338 RETURNS ecluster
|
|
jbe@73
|
339 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
340 SELECT
|
|
jbe@73
|
341 pg_catalog.array_to_string(
|
|
jbe@73
|
342 pg_catalog.array_agg(
|
|
jbe@73
|
343 'point (' OPERATOR(pg_catalog.||) unnest OPERATOR(pg_catalog.||) ')'
|
|
jbe@73
|
344 ),
|
|
jbe@73
|
345 ' '
|
|
jbe@73
|
346 )::@extschema@.ecluster
|
|
jbe@73
|
347 FROM pg_catalog.unnest($1)
|
|
jbe@73
|
348 $$;
|
|
jbe@73
|
349
|
|
jbe@73
|
350 CREATE OR REPLACE FUNCTION ecluster_create_path(epoint[])
|
|
jbe@73
|
351 RETURNS ecluster
|
|
jbe@73
|
352 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
353 SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN
|
|
jbe@73
|
354 'empty'::@extschema@.ecluster
|
|
jbe@73
|
355 ELSE
|
|
jbe@73
|
356 (
|
|
jbe@73
|
357 'path (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')'
|
|
jbe@73
|
358 )::@extschema@.ecluster
|
|
jbe@73
|
359 END
|
|
jbe@73
|
360 FROM pg_catalog.array_to_string($1, ' ') AS "str"
|
|
jbe@73
|
361 $$;
|
|
jbe@73
|
362
|
|
jbe@73
|
363 CREATE OR REPLACE FUNCTION ecluster_create_outline(epoint[])
|
|
jbe@73
|
364 RETURNS ecluster
|
|
jbe@73
|
365 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
366 SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN
|
|
jbe@73
|
367 'empty'::@extschema@.ecluster
|
|
jbe@73
|
368 ELSE
|
|
jbe@73
|
369 (
|
|
jbe@73
|
370 'outline (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')'
|
|
jbe@73
|
371 )::@extschema@.ecluster
|
|
jbe@73
|
372 END
|
|
jbe@73
|
373 FROM pg_catalog.array_to_string($1, ' ') AS "str"
|
|
jbe@73
|
374 $$;
|
|
jbe@73
|
375
|
|
jbe@73
|
376 CREATE OR REPLACE FUNCTION ecluster_create_polygon(epoint[])
|
|
jbe@73
|
377 RETURNS ecluster
|
|
jbe@73
|
378 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
379 SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN
|
|
jbe@73
|
380 'empty'::@extschema@.ecluster
|
|
jbe@73
|
381 ELSE
|
|
jbe@73
|
382 (
|
|
jbe@73
|
383 'polygon (' OPERATOR(pg_catalog.||) pg_catalog.array_to_string($1, ' ')
|
|
jbe@73
|
384 OPERATOR(pg_catalog.||) ')'
|
|
jbe@73
|
385 )::@extschema@.ecluster
|
|
jbe@73
|
386 END
|
|
jbe@73
|
387 FROM pg_catalog.array_to_string($1, ' ') AS "str"
|
|
jbe@73
|
388 $$;
|
|
jbe@73
|
389
|
|
jbe@0
|
390
|
|
jbe@0
|
391 ----------------------
|
|
jbe@0
|
392 -- getter functions --
|
|
jbe@0
|
393 ----------------------
|
|
jbe@0
|
394
|
|
jbe@69
|
395 CREATE OR REPLACE FUNCTION latitude(epoint)
|
|
jbe@0
|
396 RETURNS float8
|
|
jbe@0
|
397 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
398 AS '$libdir/latlon-v0010', 'pgl_epoint_lat';
|
|
jbe@0
|
399
|
|
jbe@69
|
400 CREATE OR REPLACE FUNCTION longitude(epoint)
|
|
jbe@0
|
401 RETURNS float8
|
|
jbe@0
|
402 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
403 AS '$libdir/latlon-v0010', 'pgl_epoint_lon';
|
|
jbe@0
|
404
|
|
jbe@69
|
405 CREATE OR REPLACE FUNCTION min_latitude(ebox)
|
|
jbe@0
|
406 RETURNS float8
|
|
jbe@0
|
407 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
408 AS '$libdir/latlon-v0010', 'pgl_ebox_lat_min';
|
|
jbe@0
|
409
|
|
jbe@69
|
410 CREATE OR REPLACE FUNCTION max_latitude(ebox)
|
|
jbe@0
|
411 RETURNS float8
|
|
jbe@0
|
412 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
413 AS '$libdir/latlon-v0010', 'pgl_ebox_lat_max';
|
|
jbe@0
|
414
|
|
jbe@69
|
415 CREATE OR REPLACE FUNCTION min_longitude(ebox)
|
|
jbe@69
|
416 RETURNS float8
|
|
jbe@69
|
417 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
418 AS '$libdir/latlon-v0010', 'pgl_ebox_lon_min';
|
|
jbe@0
|
419
|
|
jbe@69
|
420 CREATE OR REPLACE FUNCTION max_longitude(ebox)
|
|
jbe@69
|
421 RETURNS float8
|
|
jbe@69
|
422 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
423 AS '$libdir/latlon-v0010', 'pgl_ebox_lon_max';
|
|
jbe@0
|
424
|
|
jbe@69
|
425 CREATE OR REPLACE FUNCTION center(ecircle)
|
|
jbe@69
|
426 RETURNS epoint
|
|
jbe@69
|
427 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
428 AS '$libdir/latlon-v0010', 'pgl_ecircle_center';
|
|
jbe@69
|
429
|
|
jbe@69
|
430 CREATE OR REPLACE FUNCTION radius(ecircle)
|
|
jbe@69
|
431 RETURNS float8
|
|
jbe@69
|
432 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
433 AS '$libdir/latlon-v0010', 'pgl_ecircle_radius';
|
|
jbe@0
|
434
|
|
jbe@73
|
435 CREATE OR REPLACE FUNCTION ecluster_extract_points(ecluster)
|
|
jbe@73
|
436 RETURNS SETOF epoint
|
|
jbe@73
|
437 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
438 SELECT "match"[2]::@extschema@.epoint
|
|
jbe@73
|
439 FROM pg_catalog.regexp_matches(
|
|
jbe@73
|
440 $1::pg_catalog.text, e'(^| )point \\(([^)]+)\\)', 'g'
|
|
jbe@73
|
441 ) AS "match"
|
|
jbe@73
|
442 $$;
|
|
jbe@73
|
443
|
|
jbe@73
|
444 CREATE OR REPLACE FUNCTION ecluster_extract_paths(ecluster)
|
|
jbe@73
|
445 RETURNS SETOF epoint[]
|
|
jbe@73
|
446 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
447 SELECT (
|
|
jbe@73
|
448 SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint)
|
|
jbe@73
|
449 FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
|
|
jbe@73
|
450 )
|
|
jbe@73
|
451 FROM pg_catalog.regexp_matches(
|
|
jbe@73
|
452 $1::pg_catalog.text, e'(^| )path \\(([^)]+)\\)', 'g'
|
|
jbe@73
|
453 ) AS "m1"
|
|
jbe@73
|
454 $$;
|
|
jbe@73
|
455
|
|
jbe@73
|
456 CREATE OR REPLACE FUNCTION ecluster_extract_outlines(ecluster)
|
|
jbe@73
|
457 RETURNS SETOF epoint[]
|
|
jbe@73
|
458 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
459 SELECT (
|
|
jbe@73
|
460 SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint)
|
|
jbe@73
|
461 FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
|
|
jbe@73
|
462 )
|
|
jbe@73
|
463 FROM pg_catalog.regexp_matches(
|
|
jbe@73
|
464 $1::pg_catalog.text, e'(^| )outline \\(([^)]+)\\)', 'g'
|
|
jbe@73
|
465 ) AS "m1"
|
|
jbe@73
|
466 $$;
|
|
jbe@73
|
467
|
|
jbe@73
|
468 CREATE OR REPLACE FUNCTION ecluster_extract_polygons(ecluster)
|
|
jbe@73
|
469 RETURNS SETOF epoint[]
|
|
jbe@73
|
470 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
471 SELECT (
|
|
jbe@73
|
472 SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint)
|
|
jbe@73
|
473 FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
|
|
jbe@73
|
474 )
|
|
jbe@73
|
475 FROM pg_catalog.regexp_matches(
|
|
jbe@73
|
476 $1::pg_catalog.text, e'(^| )polygon \\(([^)]+)\\)', 'g'
|
|
jbe@73
|
477 ) AS "m1"
|
|
jbe@73
|
478 $$;
|
|
jbe@73
|
479
|
|
jbe@0
|
480
|
|
jbe@0
|
481 ---------------
|
|
jbe@0
|
482 -- operators --
|
|
jbe@0
|
483 ---------------
|
|
jbe@0
|
484
|
|
jbe@69
|
485 CREATE OR REPLACE FUNCTION epoint_ebox_overlap_proc(epoint, ebox)
|
|
jbe@0
|
486 RETURNS boolean
|
|
jbe@0
|
487 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
488 AS '$libdir/latlon-v0010', 'pgl_epoint_ebox_overlap';
|
|
jbe@0
|
489
|
|
jbe@69
|
490 CREATE OR REPLACE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle)
|
|
jbe@0
|
491 RETURNS boolean
|
|
jbe@0
|
492 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
493 AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_overlap';
|
|
jbe@0
|
494
|
|
jbe@69
|
495 CREATE OR REPLACE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster)
|
|
jbe@0
|
496 RETURNS boolean
|
|
jbe@0
|
497 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
498 AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_overlap';
|
|
jbe@0
|
499
|
|
jbe@69
|
500 CREATE OR REPLACE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster)
|
|
jbe@10
|
501 RETURNS boolean
|
|
jbe@10
|
502 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
503 AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_may_overlap';
|
|
jbe@10
|
504
|
|
jbe@69
|
505 CREATE OR REPLACE FUNCTION ebox_overlap_proc(ebox, ebox)
|
|
jbe@0
|
506 RETURNS boolean
|
|
jbe@0
|
507 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
508 AS '$libdir/latlon-v0010', 'pgl_ebox_overlap';
|
|
jbe@0
|
509
|
|
jbe@69
|
510 CREATE OR REPLACE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle)
|
|
jbe@0
|
511 RETURNS boolean
|
|
jbe@0
|
512 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
513 AS '$libdir/latlon-v0010', 'pgl_ebox_ecircle_may_overlap';
|
|
jbe@0
|
514
|
|
jbe@69
|
515 CREATE OR REPLACE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster)
|
|
jbe@10
|
516 RETURNS boolean
|
|
jbe@10
|
517 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
518 AS '$libdir/latlon-v0010', 'pgl_ebox_ecluster_may_overlap';
|
|
jbe@10
|
519
|
|
jbe@69
|
520 CREATE OR REPLACE FUNCTION ecircle_overlap_proc(ecircle, ecircle)
|
|
jbe@16
|
521 RETURNS boolean
|
|
jbe@16
|
522 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
523 AS '$libdir/latlon-v0010', 'pgl_ecircle_overlap';
|
|
jbe@16
|
524
|
|
jbe@69
|
525 CREATE OR REPLACE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster)
|
|
jbe@10
|
526 RETURNS boolean
|
|
jbe@10
|
527 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
528 AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_overlap';
|
|
jbe@10
|
529
|
|
jbe@69
|
530 CREATE OR REPLACE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster)
|
|
jbe@16
|
531 RETURNS boolean
|
|
jbe@16
|
532 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
533 AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_may_overlap';
|
|
jbe@0
|
534
|
|
jbe@69
|
535 CREATE OR REPLACE FUNCTION ecluster_overlap_proc(ecluster, ecluster)
|
|
jbe@69
|
536 RETURNS boolean
|
|
jbe@0
|
537 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
538 AS '$libdir/latlon-v0010', 'pgl_ecluster_overlap';
|
|
jbe@0
|
539
|
|
jbe@69
|
540 CREATE OR REPLACE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster)
|
|
jbe@69
|
541 RETURNS boolean
|
|
jbe@0
|
542 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
543 AS '$libdir/latlon-v0010', 'pgl_ecluster_may_overlap';
|
|
jbe@0
|
544
|
|
jbe@69
|
545 CREATE OR REPLACE FUNCTION ecluster_contains_proc(ecluster, ecluster)
|
|
jbe@69
|
546 RETURNS boolean
|
|
jbe@16
|
547 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
548 AS '$libdir/latlon-v0010', 'pgl_ecluster_contains';
|
|
jbe@46
|
549
|
|
jbe@69
|
550 CREATE OR REPLACE FUNCTION epoint_distance_proc(epoint, epoint)
|
|
jbe@46
|
551 RETURNS float8
|
|
jbe@46
|
552 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
553 AS '$libdir/latlon-v0010', 'pgl_epoint_distance';
|
|
jbe@16
|
554
|
|
jbe@69
|
555 CREATE OR REPLACE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle)
|
|
jbe@69
|
556 RETURNS float8
|
|
jbe@69
|
557 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
558 AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_distance';
|
|
jbe@10
|
559
|
|
jbe@69
|
560 CREATE OR REPLACE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster)
|
|
jbe@69
|
561 RETURNS float8
|
|
jbe@69
|
562 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
563 AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_distance';
|
|
jbe@16
|
564
|
|
jbe@69
|
565 CREATE OR REPLACE FUNCTION ecircle_distance_proc(ecircle, ecircle)
|
|
jbe@69
|
566 RETURNS float8
|
|
jbe@69
|
567 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
568 AS '$libdir/latlon-v0010', 'pgl_ecircle_distance';
|
|
jbe@20
|
569
|
|
jbe@69
|
570 CREATE OR REPLACE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster)
|
|
jbe@69
|
571 RETURNS float8
|
|
jbe@69
|
572 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
573 AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_distance';
|
|
jbe@0
|
574
|
|
jbe@69
|
575 CREATE OR REPLACE FUNCTION ecluster_distance_proc(ecluster, ecluster)
|
|
jbe@0
|
576 RETURNS float8
|
|
jbe@69
|
577 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
578 AS '$libdir/latlon-v0010', 'pgl_ecluster_distance';
|
|
jbe@16
|
579
|
|
jbe@69
|
580 CREATE OR REPLACE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count)
|
|
jbe@16
|
581 RETURNS float8
|
|
jbe@69
|
582 LANGUAGE C IMMUTABLE STRICT
|
|
jbe@69
|
583 AS '$libdir/latlon-v0010', 'pgl_ecluster_epoint_sc_fair_distance';
|
|
jbe@42
|
584
|
|
jbe@73
|
585 CREATE OR REPLACE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint)
|
|
jbe@73
|
586 RETURNS boolean
|
|
jbe@73
|
587 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1';
|
|
jbe@73
|
588
|
|
jbe@73
|
589 CREATE OR REPLACE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint)
|
|
jbe@73
|
590 RETURNS boolean
|
|
jbe@73
|
591 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1';
|
|
jbe@73
|
592
|
|
jbe@73
|
593 CREATE OR REPLACE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint)
|
|
jbe@73
|
594 RETURNS boolean
|
|
jbe@73
|
595 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1';
|
|
jbe@73
|
596
|
|
jbe@73
|
597 CREATE OR REPLACE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle)
|
|
jbe@73
|
598 RETURNS boolean
|
|
jbe@73
|
599 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1';
|
|
jbe@73
|
600
|
|
jbe@73
|
601 CREATE OR REPLACE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle)
|
|
jbe@73
|
602 RETURNS boolean
|
|
jbe@73
|
603 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
604 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2';
|
|
jbe@73
|
605
|
|
jbe@73
|
606 CREATE OR REPLACE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox)
|
|
jbe@73
|
607 RETURNS boolean
|
|
jbe@73
|
608 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
609 AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster';
|
|
jbe@73
|
610
|
|
jbe@73
|
611 CREATE OR REPLACE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster)
|
|
jbe@73
|
612 RETURNS boolean
|
|
jbe@73
|
613 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
614 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2';
|
|
jbe@73
|
615
|
|
jbe@73
|
616 CREATE OR REPLACE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox)
|
|
jbe@73
|
617 RETURNS boolean
|
|
jbe@73
|
618 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
619 AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster';
|
|
jbe@73
|
620
|
|
jbe@73
|
621 CREATE OR REPLACE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint)
|
|
jbe@73
|
622 RETURNS boolean
|
|
jbe@73
|
623 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1';
|
|
jbe@73
|
624
|
|
jbe@73
|
625 CREATE OR REPLACE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox)
|
|
jbe@73
|
626 RETURNS boolean
|
|
jbe@73
|
627 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1';
|
|
jbe@73
|
628
|
|
jbe@73
|
629 CREATE OR REPLACE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox)
|
|
jbe@73
|
630 RETURNS boolean
|
|
jbe@73
|
631 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1';
|
|
jbe@73
|
632
|
|
jbe@73
|
633 CREATE OR REPLACE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle)
|
|
jbe@73
|
634 RETURNS boolean
|
|
jbe@73
|
635 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1';
|
|
jbe@73
|
636
|
|
jbe@73
|
637 CREATE OR REPLACE FUNCTION ecluster_contains_commutator(ecluster, ecluster)
|
|
jbe@73
|
638 RETURNS boolean
|
|
jbe@73
|
639 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.@>) $1';
|
|
jbe@73
|
640
|
|
jbe@73
|
641 CREATE OR REPLACE FUNCTION ebox_contains_castwrap(ebox, ebox)
|
|
jbe@73
|
642 RETURNS boolean
|
|
jbe@73
|
643 LANGUAGE sql IMMUTABLE AS $$
|
|
jbe@73
|
644 SELECT
|
|
jbe@73
|
645 $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2::@extschema@.ecluster
|
|
jbe@73
|
646 $$;
|
|
jbe@73
|
647
|
|
jbe@73
|
648 CREATE OR REPLACE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox)
|
|
jbe@73
|
649 RETURNS boolean
|
|
jbe@73
|
650 LANGUAGE sql IMMUTABLE AS $$
|
|
jbe@73
|
651 SELECT
|
|
jbe@73
|
652 $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1::@extschema@.ecluster
|
|
jbe@73
|
653 $$;
|
|
jbe@73
|
654
|
|
jbe@73
|
655 CREATE OR REPLACE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster)
|
|
jbe@73
|
656 RETURNS boolean
|
|
jbe@73
|
657 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
658 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2';
|
|
jbe@73
|
659
|
|
jbe@73
|
660 CREATE OR REPLACE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox)
|
|
jbe@73
|
661 RETURNS boolean
|
|
jbe@73
|
662 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
663 AS 'SELECT $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1';
|
|
jbe@73
|
664
|
|
jbe@73
|
665 CREATE OR REPLACE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox)
|
|
jbe@73
|
666 RETURNS boolean
|
|
jbe@73
|
667 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
668 AS 'SELECT $1 OPERATOR(@extschema@.@>) $2::@extschema@.ecluster';
|
|
jbe@73
|
669
|
|
jbe@73
|
670 CREATE OR REPLACE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster)
|
|
jbe@73
|
671 RETURNS boolean
|
|
jbe@73
|
672 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
673 AS 'SELECT $2 OPERATOR(@extschema@.@>) $1::@extschema@.ecluster';
|
|
jbe@73
|
674
|
|
jbe@73
|
675 CREATE OR REPLACE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint)
|
|
jbe@73
|
676 RETURNS float8
|
|
jbe@73
|
677 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1';
|
|
jbe@73
|
678
|
|
jbe@73
|
679 CREATE OR REPLACE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint)
|
|
jbe@73
|
680 RETURNS float8
|
|
jbe@73
|
681 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1';
|
|
jbe@73
|
682
|
|
jbe@73
|
683 CREATE OR REPLACE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle)
|
|
jbe@73
|
684 RETURNS float8
|
|
jbe@73
|
685 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1';
|
|
jbe@73
|
686
|
|
jbe@73
|
687 CREATE OR REPLACE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox)
|
|
jbe@73
|
688 RETURNS float8
|
|
jbe@73
|
689 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
690 AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster';
|
|
jbe@73
|
691
|
|
jbe@73
|
692 CREATE OR REPLACE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint)
|
|
jbe@73
|
693 RETURNS float8
|
|
jbe@73
|
694 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
695 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2';
|
|
jbe@73
|
696
|
|
jbe@73
|
697 CREATE OR REPLACE FUNCTION ebox_distance_castwrap(ebox, ebox)
|
|
jbe@73
|
698 RETURNS float8
|
|
jbe@73
|
699 LANGUAGE sql IMMUTABLE AS $$
|
|
jbe@73
|
700 SELECT
|
|
jbe@73
|
701 $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2::@extschema@.ecluster
|
|
jbe@73
|
702 $$;
|
|
jbe@73
|
703
|
|
jbe@73
|
704 CREATE OR REPLACE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle)
|
|
jbe@73
|
705 RETURNS float8
|
|
jbe@73
|
706 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
707 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2';
|
|
jbe@73
|
708
|
|
jbe@73
|
709 CREATE OR REPLACE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox)
|
|
jbe@73
|
710 RETURNS float8
|
|
jbe@73
|
711 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
712 AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster';
|
|
jbe@73
|
713
|
|
jbe@73
|
714 CREATE OR REPLACE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster)
|
|
jbe@73
|
715 RETURNS float8
|
|
jbe@73
|
716 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
717 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2';
|
|
jbe@73
|
718
|
|
jbe@73
|
719 CREATE OR REPLACE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox)
|
|
jbe@73
|
720 RETURNS float8
|
|
jbe@73
|
721 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
722 AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster';
|
|
jbe@73
|
723
|
|
jbe@42
|
724
|
|
jbe@0
|
725 ----------------
|
|
jbe@0
|
726 -- GiST index --
|
|
jbe@0
|
727 ----------------
|
|
jbe@0
|
728
|
|
jbe@69
|
729 CREATE OR REPLACE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal)
|
|
jbe@0
|
730 RETURNS boolean
|
|
jbe@0
|
731 LANGUAGE C STRICT
|
|
jbe@69
|
732 AS '$libdir/latlon-v0010', 'pgl_gist_consistent';
|
|
jbe@0
|
733
|
|
jbe@69
|
734 CREATE OR REPLACE FUNCTION pgl_gist_union(internal, internal)
|
|
jbe@0
|
735 RETURNS internal
|
|
jbe@0
|
736 LANGUAGE C STRICT
|
|
jbe@69
|
737 AS '$libdir/latlon-v0010', 'pgl_gist_union';
|
|
jbe@0
|
738
|
|
jbe@69
|
739 CREATE OR REPLACE FUNCTION pgl_gist_compress_epoint(internal)
|
|
jbe@0
|
740 RETURNS internal
|
|
jbe@0
|
741 LANGUAGE C STRICT
|
|
jbe@69
|
742 AS '$libdir/latlon-v0010', 'pgl_gist_compress_epoint';
|
|
jbe@0
|
743
|
|
jbe@69
|
744 CREATE OR REPLACE FUNCTION pgl_gist_compress_ecircle(internal)
|
|
jbe@0
|
745 RETURNS internal
|
|
jbe@0
|
746 LANGUAGE C STRICT
|
|
jbe@69
|
747 AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecircle';
|
|
jbe@0
|
748
|
|
jbe@69
|
749 CREATE OR REPLACE FUNCTION pgl_gist_compress_ecluster(internal)
|
|
jbe@0
|
750 RETURNS internal
|
|
jbe@0
|
751 LANGUAGE C STRICT
|
|
jbe@69
|
752 AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecluster';
|
|
jbe@0
|
753
|
|
jbe@69
|
754 CREATE OR REPLACE FUNCTION pgl_gist_decompress(internal)
|
|
jbe@69
|
755 RETURNS internal
|
|
jbe@69
|
756 LANGUAGE C STRICT
|
|
jbe@69
|
757 AS '$libdir/latlon-v0010', 'pgl_gist_decompress';
|
|
jbe@0
|
758
|
|
jbe@69
|
759 CREATE OR REPLACE FUNCTION pgl_gist_penalty(internal, internal, internal)
|
|
jbe@69
|
760 RETURNS internal
|
|
jbe@69
|
761 LANGUAGE C STRICT
|
|
jbe@69
|
762 AS '$libdir/latlon-v0010', 'pgl_gist_penalty';
|
|
jbe@0
|
763
|
|
jbe@69
|
764 CREATE OR REPLACE FUNCTION pgl_gist_picksplit(internal, internal)
|
|
jbe@69
|
765 RETURNS internal
|
|
jbe@69
|
766 LANGUAGE C STRICT
|
|
jbe@69
|
767 AS '$libdir/latlon-v0010', 'pgl_gist_picksplit';
|
|
jbe@0
|
768
|
|
jbe@69
|
769 CREATE OR REPLACE FUNCTION pgl_gist_same(internal, internal, internal)
|
|
jbe@69
|
770 RETURNS internal
|
|
jbe@69
|
771 LANGUAGE C STRICT
|
|
jbe@69
|
772 AS '$libdir/latlon-v0010', 'pgl_gist_same';
|
|
jbe@0
|
773
|
|
jbe@69
|
774 CREATE OR REPLACE FUNCTION pgl_gist_distance(internal, internal, smallint, oid)
|
|
jbe@69
|
775 RETURNS internal
|
|
jbe@69
|
776 LANGUAGE C STRICT
|
|
jbe@69
|
777 AS '$libdir/latlon-v0010', 'pgl_gist_distance';
|
|
jbe@69
|
778
|
|
jbe@73
|
779
|
|
jbe@73
|
780 ---------------------
|
|
jbe@73
|
781 -- alias functions --
|
|
jbe@73
|
782 ---------------------
|
|
jbe@73
|
783
|
|
jbe@73
|
784 CREATE OR REPLACE FUNCTION distance(epoint, epoint)
|
|
jbe@73
|
785 RETURNS float8
|
|
jbe@73
|
786 LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2';
|
|
jbe@73
|
787
|
|
jbe@73
|
788 CREATE OR REPLACE FUNCTION distance(ecluster, epoint)
|
|
jbe@73
|
789 RETURNS float8
|
|
jbe@73
|
790 LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2';
|
|
jbe@73
|
791
|
|
jbe@73
|
792 CREATE OR REPLACE FUNCTION distance_within(epoint, epoint, float8)
|
|
jbe@73
|
793 RETURNS boolean
|
|
jbe@73
|
794 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
795 AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)';
|
|
jbe@73
|
796
|
|
jbe@73
|
797 CREATE OR REPLACE FUNCTION distance_within(ecluster, epoint, float8)
|
|
jbe@73
|
798 RETURNS boolean
|
|
jbe@73
|
799 LANGUAGE sql IMMUTABLE
|
|
jbe@73
|
800 AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)';
|
|
jbe@73
|
801
|
|
jbe@73
|
802 CREATE OR REPLACE FUNCTION fair_distance(ecluster, epoint, int4 = 10000)
|
|
jbe@73
|
803 RETURNS float8
|
|
jbe@73
|
804 LANGUAGE sql IMMUTABLE AS $$
|
|
jbe@73
|
805 SELECT
|
|
jbe@73
|
806 $1 OPERATOR(@extschema@.<=>) @extschema@.epoint_with_sample_count($2, $3)
|
|
jbe@73
|
807 $$;
|
|
jbe@73
|
808
|
|
jbe@73
|
809
|
|
jbe@73
|
810 --------------------------------
|
|
jbe@73
|
811 -- other data storage formats --
|
|
jbe@73
|
812 --------------------------------
|
|
jbe@73
|
813
|
|
jbe@73
|
814 CREATE OR REPLACE FUNCTION coords_to_epoint(float8, float8, text = 'epoint')
|
|
jbe@73
|
815 RETURNS epoint
|
|
jbe@73
|
816 LANGUAGE plpgsql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
817 DECLARE
|
|
jbe@73
|
818 "result" @extschema@.epoint;
|
|
jbe@73
|
819 BEGIN
|
|
jbe@73
|
820 IF $3 OPERATOR(pg_catalog.=) 'epoint_lonlat' THEN
|
|
jbe@73
|
821 -- avoid dynamic command execution for better performance
|
|
jbe@73
|
822 RETURN @extschema@.epoint($2, $1);
|
|
jbe@73
|
823 END IF;
|
|
jbe@73
|
824 IF
|
|
jbe@73
|
825 $3 OPERATOR(pg_catalog.=) 'epoint' OR
|
|
jbe@73
|
826 $3 OPERATOR(pg_catalog.=) 'epoint_latlon'
|
|
jbe@73
|
827 THEN
|
|
jbe@73
|
828 -- avoid dynamic command execution for better performance
|
|
jbe@73
|
829 RETURN @extschema@.epoint($1, $2);
|
|
jbe@73
|
830 END IF;
|
|
jbe@73
|
831 EXECUTE
|
|
jbe@73
|
832 'SELECT ' OPERATOR(pg_catalog.||) $3 OPERATOR(pg_catalog.||) '($1, $2)' INTO STRICT "result" USING $1, $2;
|
|
jbe@73
|
833 RETURN "result";
|
|
jbe@73
|
834 END;
|
|
jbe@73
|
835 $$;
|
|
jbe@73
|
836
|
|
jbe@73
|
837 CREATE OR REPLACE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat')
|
|
jbe@73
|
838 RETURNS SETOF jsonb
|
|
jbe@73
|
839 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
840 SELECT "result" FROM
|
|
jbe@73
|
841 ( SELECT pg_catalog.jsonb_array_length($1) - 1 )
|
|
jbe@73
|
842 AS "lastindex_row" ("lastindex")
|
|
jbe@73
|
843 CROSS JOIN LATERAL pg_catalog.jsonb_array_elements(
|
|
jbe@73
|
844 CASE WHEN
|
|
jbe@73
|
845 @extschema@.coords_to_epoint(
|
|
jbe@73
|
846 ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 0)
|
|
jbe@73
|
847 ::pg_catalog.float8,
|
|
jbe@73
|
848 ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 1)
|
|
jbe@73
|
849 ::pg_catalog.float8,
|
|
jbe@73
|
850 $2
|
|
jbe@73
|
851 ) OPERATOR(pg_catalog.=) @extschema@.coords_to_epoint(
|
|
jbe@73
|
852 ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 0)
|
|
jbe@73
|
853 ::pg_catalog.float8,
|
|
jbe@73
|
854 ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 1)
|
|
jbe@73
|
855 ::pg_catalog.float8,
|
|
jbe@73
|
856 $2
|
|
jbe@73
|
857 )
|
|
jbe@73
|
858 THEN
|
|
jbe@73
|
859 $1 - "lastindex"
|
|
jbe@73
|
860 ELSE
|
|
jbe@73
|
861 $1
|
|
jbe@73
|
862 END
|
|
jbe@73
|
863 ) AS "result_row" ("result")
|
|
jbe@73
|
864 $$;
|
|
jbe@73
|
865
|
|
jbe@73
|
866 CREATE OR REPLACE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat')
|
|
jbe@73
|
867 RETURNS epoint
|
|
jbe@73
|
868 LANGUAGE sql IMMUTABLE STRICT AS $$
|
|
jbe@73
|
869 SELECT CASE
|
|
jbe@73
|
870 WHEN $1 OPERATOR(pg_catalog.->>) 'type' OPERATOR(pg_catalog.=) 'Point' THEN
|
|
jbe@73
|
871 @extschema@.coords_to_epoint(
|
|
jbe@73
|
872 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0)
|
|
jbe@73
|
873 ::pg_catalog.float8,
|
|
jbe@73
|
874 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1)
|
|
jbe@73
|
875 ::pg_catalog.float8,
|
|
jbe@73
|
876 $2
|
|
jbe@73
|
877 )
|
|
jbe@73
|
878 WHEN $1->>'type' = 'Feature' THEN
|
|
jbe@73
|
879 @extschema@.GeoJSON_to_epoint($1 OPERATOR(pg_catalog.->) 'geometry', $2)
|
|
jbe@73
|
880 ELSE
|
|
jbe@73
|
881 NULL
|
|
jbe@73
|
882 END
|
|
jbe@73
|
883 $$;
|
|
jbe@73
|
884
|
|
jbe@73
|
885 CREATE OR REPLACE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat')
|
|
jbe@73
|
886 RETURNS ecluster
|
|
jbe@76
|
887 LANGUAGE plpgsql IMMUTABLE STRICT AS $$
|
|
jbe@76
|
888 DECLARE
|
|
jbe@76
|
889 "tp" TEXT = $1 OPERATOR(pg_catalog.->>) 'type';
|
|
jbe@76
|
890 BEGIN
|
|
jbe@76
|
891 IF "tp" = 'Point' THEN RETURN
|
|
jbe@76
|
892 @extschema@.coords_to_epoint(
|
|
jbe@76
|
893 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0)
|
|
jbe@76
|
894 ::pg_catalog.float8,
|
|
jbe@76
|
895 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1)
|
|
jbe@76
|
896 ::pg_catalog.float8,
|
|
jbe@76
|
897 $2
|
|
jbe@76
|
898 )::@extschema@.ecluster;
|
|
jbe@76
|
899 END IF;
|
|
jbe@76
|
900 raise notice 'DEBUG2';
|
|
jbe@76
|
901 IF "tp" = 'MultiPoint' THEN RETURN
|
|
jbe@76
|
902 ( SELECT @extschema@.ecluster_create_multipoint(pg_catalog.array_agg(
|
|
jbe@76
|
903 @extschema@.coords_to_epoint(
|
|
jbe@76
|
904 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8,
|
|
jbe@76
|
905 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8,
|
|
jbe@76
|
906 $2
|
|
jbe@76
|
907 )
|
|
jbe@76
|
908 ))
|
|
jbe@76
|
909 FROM pg_catalog.jsonb_array_elements(
|
|
jbe@76
|
910 $1 OPERATOR(pg_catalog.->) 'coordinates'
|
|
jbe@76
|
911 ) AS "coord"
|
|
jbe@76
|
912 );
|
|
jbe@76
|
913 END IF;
|
|
jbe@76
|
914 IF "tp" = 'LineString' THEN RETURN
|
|
jbe@76
|
915 ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg(
|
|
jbe@76
|
916 @extschema@.coords_to_epoint(
|
|
jbe@76
|
917 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8,
|
|
jbe@76
|
918 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8,
|
|
jbe@76
|
919 $2
|
|
jbe@76
|
920 )
|
|
jbe@76
|
921 ))
|
|
jbe@76
|
922 FROM pg_catalog.jsonb_array_elements(
|
|
jbe@76
|
923 $1 OPERATOR(pg_catalog.->) 'coordinates'
|
|
jbe@76
|
924 ) AS "coord"
|
|
jbe@76
|
925 );
|
|
jbe@76
|
926 END IF;
|
|
jbe@76
|
927 IF "tp" = 'MultiLineString' THEN RETURN
|
|
jbe@76
|
928 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
|
jbe@76
|
929 ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg(
|
|
jbe@76
|
930 @extschema@.coords_to_epoint(
|
|
jbe@76
|
931 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8,
|
|
jbe@76
|
932 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8,
|
|
jbe@76
|
933 $2
|
|
jbe@76
|
934 )
|
|
jbe@76
|
935 ))
|
|
jbe@76
|
936 FROM pg_catalog.jsonb_array_elements("coord_array") AS "coord"
|
|
jbe@76
|
937 )
|
|
jbe@76
|
938 ))
|
|
jbe@76
|
939 FROM pg_catalog.jsonb_array_elements(
|
|
jbe@76
|
940 $1 OPERATOR(pg_catalog.->) 'coordinates'
|
|
jbe@76
|
941 ) AS "coord_array"
|
|
jbe@76
|
942 );
|
|
jbe@76
|
943 END IF;
|
|
jbe@76
|
944 IF "tp" = 'Polygon' THEN RETURN
|
|
jbe@76
|
945 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
|
jbe@76
|
946 ( SELECT @extschema@.ecluster_create_polygon(pg_catalog.array_agg(
|
|
jbe@76
|
947 @extschema@.coords_to_epoint(
|
|
jbe@76
|
948 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8,
|
|
jbe@76
|
949 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8,
|
|
jbe@76
|
950 $2
|
|
jbe@76
|
951 )
|
|
jbe@76
|
952 ))
|
|
jbe@76
|
953 FROM @extschema@.GeoJSON_LinearRing_vertices("coord_array", $2)
|
|
jbe@76
|
954 AS "coord"
|
|
jbe@76
|
955 )
|
|
jbe@76
|
956 ))
|
|
jbe@76
|
957 FROM pg_catalog.jsonb_array_elements(
|
|
jbe@76
|
958 $1 OPERATOR(pg_catalog.->) 'coordinates'
|
|
jbe@76
|
959 ) AS "coord_array"
|
|
jbe@76
|
960 );
|
|
jbe@76
|
961 END IF;
|
|
jbe@76
|
962 IF "tp" = 'MultiPolygon' THEN RETURN
|
|
jbe@76
|
963 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
|
jbe@76
|
964 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
|
jbe@76
|
965 ( SELECT @extschema@.ecluster_create_polygon(
|
|
jbe@76
|
966 pg_catalog.array_agg(
|
|
jbe@76
|
967 @extschema@.coords_to_epoint(
|
|
jbe@76
|
968 ("coord" OPERATOR(pg_catalog.->>) 0)
|
|
jbe@76
|
969 ::pg_catalog.float8,
|
|
jbe@76
|
970 ("coord" OPERATOR(pg_catalog.->>) 1)
|
|
jbe@76
|
971 ::pg_catalog.float8,
|
|
jbe@76
|
972 $2
|
|
jbe@76
|
973 )
|
|
jbe@75
|
974 )
|
|
jbe@73
|
975 )
|
|
jbe@76
|
976 FROM @extschema@.GeoJSON_LinearRing_vertices(
|
|
jbe@76
|
977 "coord_array", $2
|
|
jbe@76
|
978 ) AS "coord"
|
|
jbe@75
|
979 )
|
|
jbe@76
|
980 ))
|
|
jbe@76
|
981 FROM pg_catalog.jsonb_array_elements("coord_array_array")
|
|
jbe@76
|
982 AS "coord_array"
|
|
jbe@76
|
983 )
|
|
jbe@76
|
984 ))
|
|
jbe@76
|
985 FROM jsonb_array_elements(
|
|
jbe@76
|
986 $1 OPERATOR(pg_catalog.->) 'coordinates'
|
|
jbe@76
|
987 ) AS "coord_array_array"
|
|
jbe@76
|
988 );
|
|
jbe@76
|
989 END IF;
|
|
jbe@76
|
990 IF "tp" = 'GeometryCollection' THEN RETURN
|
|
jbe@76
|
991 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
|
jbe@76
|
992 @extschema@.GeoJSON_to_ecluster("geometry", $2)
|
|
jbe@76
|
993 ))
|
|
jbe@76
|
994 FROM pg_catalog.jsonb_array_elements(
|
|
jbe@76
|
995 $1 OPERATOR(pg_catalog.->) 'geometries'
|
|
jbe@76
|
996 ) AS "geometry"
|
|
jbe@76
|
997 );
|
|
jbe@76
|
998 END IF;
|
|
jbe@76
|
999 IF "tp" = 'Feature' THEN RETURN
|
|
jbe@76
|
1000 @extschema@.GeoJSON_to_ecluster(
|
|
jbe@76
|
1001 $1 OPERATOR(pg_catalog.->) 'geometry', $2
|
|
jbe@76
|
1002 );
|
|
jbe@76
|
1003 END IF;
|
|
jbe@76
|
1004 IF "tp" = 'FeatureCollection' THEN RETURN
|
|
jbe@76
|
1005 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
|
jbe@76
|
1006 @extschema@.GeoJSON_to_ecluster("feature", $2)
|
|
jbe@76
|
1007 ))
|
|
jbe@76
|
1008 FROM pg_catalog.jsonb_array_elements(
|
|
jbe@76
|
1009 $1 OPERATOR(pg_catalog.->) 'features'
|
|
jbe@76
|
1010 ) AS "feature"
|
|
jbe@76
|
1011 );
|
|
jbe@76
|
1012 END IF;
|
|
jbe@76
|
1013 RETURN NULL;
|
|
jbe@76
|
1014 END;
|
|
jbe@73
|
1015 $$;
|
|
jbe@73
|
1016
|