pgLatLon
diff latlon--0.16.sql @ 83:037e28f426e7
Set version to 0.16
| author | jbe |
|---|---|
| date | Thu Oct 23 15:31:50 2025 +0200 (4 weeks ago) |
| parents | latlon--0.15.sql@4eb23fd90088 |
| children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/latlon--0.16.sql Thu Oct 23 15:31:50 2025 +0200 1.3 @@ -0,0 +1,1821 @@ 1.4 +---------------------------------------- 1.5 +-- forward declarations (shell types) -- 1.6 +---------------------------------------- 1.7 + 1.8 +CREATE TYPE ekey_point; 1.9 +CREATE TYPE ekey_area; 1.10 +CREATE TYPE epoint; 1.11 +CREATE TYPE epoint_with_sample_count; 1.12 +CREATE TYPE ebox; 1.13 +CREATE TYPE ecircle; 1.14 +CREATE TYPE ecluster; 1.15 + 1.16 + 1.17 +------------------------------------------------------------ 1.18 +-- dummy input/output functions for dummy index key types -- 1.19 +------------------------------------------------------------ 1.20 + 1.21 +CREATE FUNCTION ekey_point_in_dummy(cstring) 1.22 + RETURNS ekey_point 1.23 + LANGUAGE C IMMUTABLE STRICT 1.24 + AS '$libdir/latlon-v0010', 'pgl_notimpl'; 1.25 + 1.26 +CREATE FUNCTION ekey_point_out_dummy(ekey_point) 1.27 + RETURNS cstring 1.28 + LANGUAGE C IMMUTABLE STRICT 1.29 + AS '$libdir/latlon-v0010', 'pgl_notimpl'; 1.30 + 1.31 +CREATE FUNCTION ekey_area_in_dummy(cstring) 1.32 + RETURNS ekey_area 1.33 + LANGUAGE C IMMUTABLE STRICT 1.34 + AS '$libdir/latlon-v0010', 'pgl_notimpl'; 1.35 + 1.36 +CREATE FUNCTION ekey_area_out_dummy(ekey_area) 1.37 + RETURNS cstring 1.38 + LANGUAGE C IMMUTABLE STRICT 1.39 + AS '$libdir/latlon-v0010', 'pgl_notimpl'; 1.40 + 1.41 + 1.42 +-------------------------- 1.43 +-- text input functions -- 1.44 +-------------------------- 1.45 + 1.46 +CREATE FUNCTION epoint_in(cstring) 1.47 + RETURNS epoint 1.48 + LANGUAGE C IMMUTABLE STRICT 1.49 + AS '$libdir/latlon-v0010', 'pgl_epoint_in'; 1.50 + 1.51 +CREATE FUNCTION epoint_with_sample_count_in(cstring) 1.52 + RETURNS epoint_with_sample_count 1.53 + LANGUAGE C IMMUTABLE STRICT 1.54 + AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_in'; 1.55 + 1.56 +CREATE FUNCTION ebox_in(cstring) 1.57 + RETURNS ebox 1.58 + LANGUAGE C IMMUTABLE STRICT 1.59 + AS '$libdir/latlon-v0010', 'pgl_ebox_in'; 1.60 + 1.61 +CREATE FUNCTION ecircle_in(cstring) 1.62 + RETURNS ecircle 1.63 + LANGUAGE C IMMUTABLE STRICT 1.64 + AS '$libdir/latlon-v0010', 'pgl_ecircle_in'; 1.65 + 1.66 +CREATE FUNCTION ecluster_in(cstring) 1.67 + RETURNS ecluster 1.68 + LANGUAGE C IMMUTABLE STRICT 1.69 + AS '$libdir/latlon-v0010', 'pgl_ecluster_in'; 1.70 + 1.71 + 1.72 +--------------------------- 1.73 +-- text output functions -- 1.74 +--------------------------- 1.75 + 1.76 +CREATE FUNCTION epoint_out(epoint) 1.77 + RETURNS cstring 1.78 + LANGUAGE C IMMUTABLE STRICT 1.79 + AS '$libdir/latlon-v0010', 'pgl_epoint_out'; 1.80 + 1.81 +CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) 1.82 + RETURNS cstring 1.83 + LANGUAGE C IMMUTABLE STRICT 1.84 + AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_out'; 1.85 + 1.86 +CREATE FUNCTION ebox_out(ebox) 1.87 + RETURNS cstring 1.88 + LANGUAGE C IMMUTABLE STRICT 1.89 + AS '$libdir/latlon-v0010', 'pgl_ebox_out'; 1.90 + 1.91 +CREATE FUNCTION ecircle_out(ecircle) 1.92 + RETURNS cstring 1.93 + LANGUAGE C IMMUTABLE STRICT 1.94 + AS '$libdir/latlon-v0010', 'pgl_ecircle_out'; 1.95 + 1.96 +CREATE FUNCTION ecluster_out(ecluster) 1.97 + RETURNS cstring 1.98 + LANGUAGE C IMMUTABLE STRICT 1.99 + AS '$libdir/latlon-v0010', 'pgl_ecluster_out'; 1.100 + 1.101 + 1.102 +-------------------------- 1.103 +-- binary I/O functions -- 1.104 +-------------------------- 1.105 + 1.106 +CREATE FUNCTION epoint_recv(internal) 1.107 + RETURNS epoint 1.108 + LANGUAGE C IMMUTABLE STRICT 1.109 + AS '$libdir/latlon-v0010', 'pgl_epoint_recv'; 1.110 + 1.111 +CREATE FUNCTION ebox_recv(internal) 1.112 + RETURNS ebox 1.113 + LANGUAGE C IMMUTABLE STRICT 1.114 + AS '$libdir/latlon-v0010', 'pgl_ebox_recv'; 1.115 + 1.116 +CREATE FUNCTION ecircle_recv(internal) 1.117 + RETURNS ecircle 1.118 + LANGUAGE C IMMUTABLE STRICT 1.119 + AS '$libdir/latlon-v0010', 'pgl_ecircle_recv'; 1.120 + 1.121 +CREATE FUNCTION epoint_send(epoint) 1.122 + RETURNS bytea 1.123 + LANGUAGE C IMMUTABLE STRICT 1.124 + AS '$libdir/latlon-v0010', 'pgl_epoint_send'; 1.125 + 1.126 +CREATE FUNCTION ebox_send(ebox) 1.127 + RETURNS bytea 1.128 + LANGUAGE C IMMUTABLE STRICT 1.129 + AS '$libdir/latlon-v0010', 'pgl_ebox_send'; 1.130 + 1.131 +CREATE FUNCTION ecircle_send(ecircle) 1.132 + RETURNS bytea 1.133 + LANGUAGE C IMMUTABLE STRICT 1.134 + AS '$libdir/latlon-v0010', 'pgl_ecircle_send'; 1.135 + 1.136 + 1.137 +----------------------------------------------- 1.138 +-- type definitions of dummy index key types -- 1.139 +----------------------------------------------- 1.140 + 1.141 +CREATE TYPE ekey_point ( 1.142 + internallength = 8, 1.143 + input = ekey_point_in_dummy, 1.144 + output = ekey_point_out_dummy, 1.145 + alignment = char ); 1.146 + 1.147 +CREATE TYPE ekey_area ( 1.148 + internallength = 9, 1.149 + input = ekey_area_in_dummy, 1.150 + output = ekey_area_out_dummy, 1.151 + alignment = char ); 1.152 + 1.153 + 1.154 +------------------------------------------ 1.155 +-- definitions of geographic data types -- 1.156 +------------------------------------------ 1.157 + 1.158 +CREATE TYPE epoint ( 1.159 + internallength = 16, 1.160 + input = epoint_in, 1.161 + output = epoint_out, 1.162 + receive = epoint_recv, 1.163 + send = epoint_send, 1.164 + alignment = double ); 1.165 + 1.166 +CREATE TYPE epoint_with_sample_count ( 1.167 + internallength = 20, 1.168 + input = epoint_with_sample_count_in, 1.169 + output = epoint_with_sample_count_out, 1.170 + alignment = double ); 1.171 + 1.172 +CREATE TYPE ebox ( 1.173 + internallength = 32, 1.174 + input = ebox_in, 1.175 + output = ebox_out, 1.176 + receive = ebox_recv, 1.177 + send = ebox_send, 1.178 + alignment = double ); 1.179 + 1.180 +CREATE TYPE ecircle ( 1.181 + internallength = 24, 1.182 + input = ecircle_in, 1.183 + output = ecircle_out, 1.184 + receive = ecircle_recv, 1.185 + send = ecircle_send, 1.186 + alignment = double ); 1.187 + 1.188 +CREATE TYPE ecluster ( 1.189 + internallength = VARIABLE, 1.190 + input = ecluster_in, 1.191 + output = ecluster_out, 1.192 + alignment = double, 1.193 + storage = external ); 1.194 + 1.195 + 1.196 +-------------------- 1.197 +-- B-tree support -- 1.198 +-------------------- 1.199 + 1.200 +-- begin of B-tree support for epoint 1.201 + 1.202 +CREATE FUNCTION epoint_btree_lt(epoint, epoint) 1.203 + RETURNS boolean 1.204 + LANGUAGE C IMMUTABLE STRICT 1.205 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_lt'; 1.206 + 1.207 +CREATE FUNCTION epoint_btree_le(epoint, epoint) 1.208 + RETURNS boolean 1.209 + LANGUAGE C IMMUTABLE STRICT 1.210 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_le'; 1.211 + 1.212 +CREATE FUNCTION epoint_btree_eq(epoint, epoint) 1.213 + RETURNS boolean 1.214 + LANGUAGE C IMMUTABLE STRICT 1.215 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_eq'; 1.216 + 1.217 +CREATE FUNCTION epoint_btree_ne(epoint, epoint) 1.218 + RETURNS boolean 1.219 + LANGUAGE C IMMUTABLE STRICT 1.220 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ne'; 1.221 + 1.222 +CREATE FUNCTION epoint_btree_ge(epoint, epoint) 1.223 + RETURNS boolean 1.224 + LANGUAGE C IMMUTABLE STRICT 1.225 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ge'; 1.226 + 1.227 +CREATE FUNCTION epoint_btree_gt(epoint, epoint) 1.228 + RETURNS boolean 1.229 + LANGUAGE C IMMUTABLE STRICT 1.230 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_gt'; 1.231 + 1.232 +CREATE OPERATOR <<< ( 1.233 + leftarg = epoint, 1.234 + rightarg = epoint, 1.235 + procedure = epoint_btree_lt, 1.236 + commutator = >>>, 1.237 + negator = >>>=, 1.238 + restrict = scalarltsel, 1.239 + join = scalarltjoinsel 1.240 +); 1.241 + 1.242 +CREATE OPERATOR <<<= ( 1.243 + leftarg = epoint, 1.244 + rightarg = epoint, 1.245 + procedure = epoint_btree_le, 1.246 + commutator = >>>=, 1.247 + negator = >>>, 1.248 + restrict = scalarltsel, 1.249 + join = scalarltjoinsel 1.250 +); 1.251 + 1.252 +CREATE OPERATOR = ( 1.253 + leftarg = epoint, 1.254 + rightarg = epoint, 1.255 + procedure = epoint_btree_eq, 1.256 + commutator = =, 1.257 + negator = <>, 1.258 + restrict = eqsel, 1.259 + join = eqjoinsel, 1.260 + merges 1.261 +); 1.262 + 1.263 +CREATE OPERATOR <> ( 1.264 + leftarg = epoint, 1.265 + rightarg = epoint, 1.266 + procedure = epoint_btree_ne, 1.267 + commutator = <>, 1.268 + negator = =, 1.269 + restrict = neqsel, 1.270 + join = neqjoinsel 1.271 +); 1.272 + 1.273 +CREATE OPERATOR >>>= ( 1.274 + leftarg = epoint, 1.275 + rightarg = epoint, 1.276 + procedure = epoint_btree_ge, 1.277 + commutator = <<<=, 1.278 + negator = <<<, 1.279 + restrict = scalargtsel, 1.280 + join = scalargtjoinsel 1.281 +); 1.282 + 1.283 +CREATE OPERATOR >>> ( 1.284 + leftarg = epoint, 1.285 + rightarg = epoint, 1.286 + procedure = epoint_btree_gt, 1.287 + commutator = <<<, 1.288 + negator = <<<=, 1.289 + restrict = scalargtsel, 1.290 + join = scalargtjoinsel 1.291 +); 1.292 + 1.293 +CREATE FUNCTION epoint_btree_cmp(epoint, epoint) 1.294 + RETURNS int4 1.295 + LANGUAGE C IMMUTABLE STRICT 1.296 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_cmp'; 1.297 + 1.298 +CREATE OPERATOR CLASS epoint_btree_ops 1.299 + DEFAULT FOR TYPE epoint USING btree AS 1.300 + OPERATOR 1 <<< , 1.301 + OPERATOR 2 <<<= , 1.302 + OPERATOR 3 = , 1.303 + OPERATOR 4 >>>= , 1.304 + OPERATOR 5 >>> , 1.305 + FUNCTION 1 epoint_btree_cmp(epoint, epoint); 1.306 + 1.307 +-- end of B-tree support for epoint 1.308 + 1.309 +-- begin of B-tree support for ebox 1.310 + 1.311 +CREATE FUNCTION ebox_btree_lt(ebox, ebox) 1.312 + RETURNS boolean 1.313 + LANGUAGE C IMMUTABLE STRICT 1.314 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_lt'; 1.315 + 1.316 +CREATE FUNCTION ebox_btree_le(ebox, ebox) 1.317 + RETURNS boolean 1.318 + LANGUAGE C IMMUTABLE STRICT 1.319 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_le'; 1.320 + 1.321 +CREATE FUNCTION ebox_btree_eq(ebox, ebox) 1.322 + RETURNS boolean 1.323 + LANGUAGE C IMMUTABLE STRICT 1.324 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_eq'; 1.325 + 1.326 +CREATE FUNCTION ebox_btree_ne(ebox, ebox) 1.327 + RETURNS boolean 1.328 + LANGUAGE C IMMUTABLE STRICT 1.329 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ne'; 1.330 + 1.331 +CREATE FUNCTION ebox_btree_ge(ebox, ebox) 1.332 + RETURNS boolean 1.333 + LANGUAGE C IMMUTABLE STRICT 1.334 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ge'; 1.335 + 1.336 +CREATE FUNCTION ebox_btree_gt(ebox, ebox) 1.337 + RETURNS boolean 1.338 + LANGUAGE C IMMUTABLE STRICT 1.339 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_gt'; 1.340 + 1.341 +CREATE OPERATOR <<< ( 1.342 + leftarg = ebox, 1.343 + rightarg = ebox, 1.344 + procedure = ebox_btree_lt, 1.345 + commutator = >>>, 1.346 + negator = >>>=, 1.347 + restrict = scalarltsel, 1.348 + join = scalarltjoinsel 1.349 +); 1.350 + 1.351 +CREATE OPERATOR <<<= ( 1.352 + leftarg = ebox, 1.353 + rightarg = ebox, 1.354 + procedure = ebox_btree_le, 1.355 + commutator = >>>=, 1.356 + negator = >>>, 1.357 + restrict = scalarltsel, 1.358 + join = scalarltjoinsel 1.359 +); 1.360 + 1.361 +CREATE OPERATOR = ( 1.362 + leftarg = ebox, 1.363 + rightarg = ebox, 1.364 + procedure = ebox_btree_eq, 1.365 + commutator = =, 1.366 + negator = <>, 1.367 + restrict = eqsel, 1.368 + join = eqjoinsel, 1.369 + merges 1.370 +); 1.371 + 1.372 +CREATE OPERATOR <> ( 1.373 + leftarg = ebox, 1.374 + rightarg = ebox, 1.375 + procedure = ebox_btree_ne, 1.376 + commutator = <>, 1.377 + negator = =, 1.378 + restrict = neqsel, 1.379 + join = neqjoinsel 1.380 +); 1.381 + 1.382 +CREATE OPERATOR >>>= ( 1.383 + leftarg = ebox, 1.384 + rightarg = ebox, 1.385 + procedure = ebox_btree_ge, 1.386 + commutator = <<<=, 1.387 + negator = <<<, 1.388 + restrict = scalargtsel, 1.389 + join = scalargtjoinsel 1.390 +); 1.391 + 1.392 +CREATE OPERATOR >>> ( 1.393 + leftarg = ebox, 1.394 + rightarg = ebox, 1.395 + procedure = ebox_btree_gt, 1.396 + commutator = <<<, 1.397 + negator = <<<=, 1.398 + restrict = scalargtsel, 1.399 + join = scalargtjoinsel 1.400 +); 1.401 + 1.402 +CREATE FUNCTION ebox_btree_cmp(ebox, ebox) 1.403 + RETURNS int4 1.404 + LANGUAGE C IMMUTABLE STRICT 1.405 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_cmp'; 1.406 + 1.407 +CREATE OPERATOR CLASS ebox_btree_ops 1.408 + DEFAULT FOR TYPE ebox USING btree AS 1.409 + OPERATOR 1 <<< , 1.410 + OPERATOR 2 <<<= , 1.411 + OPERATOR 3 = , 1.412 + OPERATOR 4 >>>= , 1.413 + OPERATOR 5 >>> , 1.414 + FUNCTION 1 ebox_btree_cmp(ebox, ebox); 1.415 + 1.416 +-- end of B-tree support for ebox 1.417 + 1.418 +-- begin of B-tree support for ecircle 1.419 + 1.420 +CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle) 1.421 + RETURNS boolean 1.422 + LANGUAGE C IMMUTABLE STRICT 1.423 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_lt'; 1.424 + 1.425 +CREATE FUNCTION ecircle_btree_le(ecircle, ecircle) 1.426 + RETURNS boolean 1.427 + LANGUAGE C IMMUTABLE STRICT 1.428 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_le'; 1.429 + 1.430 +CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle) 1.431 + RETURNS boolean 1.432 + LANGUAGE C IMMUTABLE STRICT 1.433 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_eq'; 1.434 + 1.435 +CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle) 1.436 + RETURNS boolean 1.437 + LANGUAGE C IMMUTABLE STRICT 1.438 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ne'; 1.439 + 1.440 +CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle) 1.441 + RETURNS boolean 1.442 + LANGUAGE C IMMUTABLE STRICT 1.443 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ge'; 1.444 + 1.445 +CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle) 1.446 + RETURNS boolean 1.447 + LANGUAGE C IMMUTABLE STRICT 1.448 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_gt'; 1.449 + 1.450 +CREATE OPERATOR <<< ( 1.451 + leftarg = ecircle, 1.452 + rightarg = ecircle, 1.453 + procedure = ecircle_btree_lt, 1.454 + commutator = >>>, 1.455 + negator = >>>=, 1.456 + restrict = scalarltsel, 1.457 + join = scalarltjoinsel 1.458 +); 1.459 + 1.460 +CREATE OPERATOR <<<= ( 1.461 + leftarg = ecircle, 1.462 + rightarg = ecircle, 1.463 + procedure = ecircle_btree_le, 1.464 + commutator = >>>=, 1.465 + negator = >>>, 1.466 + restrict = scalarltsel, 1.467 + join = scalarltjoinsel 1.468 +); 1.469 + 1.470 +CREATE OPERATOR = ( 1.471 + leftarg = ecircle, 1.472 + rightarg = ecircle, 1.473 + procedure = ecircle_btree_eq, 1.474 + commutator = =, 1.475 + negator = <>, 1.476 + restrict = eqsel, 1.477 + join = eqjoinsel, 1.478 + merges 1.479 +); 1.480 + 1.481 +CREATE OPERATOR <> ( 1.482 + leftarg = ecircle, 1.483 + rightarg = ecircle, 1.484 + procedure = ecircle_btree_ne, 1.485 + commutator = <>, 1.486 + negator = =, 1.487 + restrict = neqsel, 1.488 + join = neqjoinsel 1.489 +); 1.490 + 1.491 +CREATE OPERATOR >>>= ( 1.492 + leftarg = ecircle, 1.493 + rightarg = ecircle, 1.494 + procedure = ecircle_btree_ge, 1.495 + commutator = <<<=, 1.496 + negator = <<<, 1.497 + restrict = scalargtsel, 1.498 + join = scalargtjoinsel 1.499 +); 1.500 + 1.501 +CREATE OPERATOR >>> ( 1.502 + leftarg = ecircle, 1.503 + rightarg = ecircle, 1.504 + procedure = ecircle_btree_gt, 1.505 + commutator = <<<, 1.506 + negator = <<<=, 1.507 + restrict = scalargtsel, 1.508 + join = scalargtjoinsel 1.509 +); 1.510 + 1.511 +CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 1.512 + RETURNS int4 1.513 + LANGUAGE C IMMUTABLE STRICT 1.514 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_cmp'; 1.515 + 1.516 +CREATE OPERATOR CLASS ecircle_btree_ops 1.517 + DEFAULT FOR TYPE ecircle USING btree AS 1.518 + OPERATOR 1 <<< , 1.519 + OPERATOR 2 <<<= , 1.520 + OPERATOR 3 = , 1.521 + OPERATOR 4 >>>= , 1.522 + OPERATOR 5 >>> , 1.523 + FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle); 1.524 + 1.525 +-- end of B-tree support for ecircle 1.526 + 1.527 + 1.528 +---------------- 1.529 +-- type casts -- 1.530 +---------------- 1.531 + 1.532 +CREATE FUNCTION cast_epoint_to_ebox(epoint) 1.533 + RETURNS ebox 1.534 + LANGUAGE C IMMUTABLE STRICT 1.535 + AS '$libdir/latlon-v0010', 'pgl_epoint_to_ebox'; 1.536 + 1.537 +CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint); 1.538 + 1.539 +CREATE FUNCTION cast_epoint_to_ecircle(epoint) 1.540 + RETURNS ecircle 1.541 + LANGUAGE C IMMUTABLE STRICT 1.542 + AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecircle'; 1.543 + 1.544 +CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint); 1.545 + 1.546 +CREATE FUNCTION cast_epoint_to_ecluster(epoint) 1.547 + RETURNS ecluster 1.548 + LANGUAGE C IMMUTABLE STRICT 1.549 + AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecluster'; 1.550 + 1.551 +CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint); 1.552 + 1.553 +CREATE FUNCTION cast_ebox_to_ecluster(ebox) 1.554 + RETURNS ecluster 1.555 + LANGUAGE C IMMUTABLE STRICT 1.556 + AS '$libdir/latlon-v0010', 'pgl_ebox_to_ecluster'; 1.557 + 1.558 +CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox); 1.559 + 1.560 + 1.561 +--------------------------- 1.562 +-- constructor functions -- 1.563 +--------------------------- 1.564 + 1.565 +CREATE FUNCTION epoint(float8, float8) 1.566 + RETURNS epoint 1.567 + LANGUAGE C IMMUTABLE STRICT 1.568 + AS '$libdir/latlon-v0010', 'pgl_create_epoint'; 1.569 + 1.570 +CREATE FUNCTION epoint_latlon(float8, float8) 1.571 + RETURNS epoint 1.572 + LANGUAGE SQL IMMUTABLE STRICT AS $$ 1.573 + SELECT @extschema@.epoint($1, $2) 1.574 + $$; 1.575 + 1.576 +CREATE FUNCTION epoint_lonlat(float8, float8) 1.577 + RETURNS epoint 1.578 + LANGUAGE SQL IMMUTABLE STRICT AS $$ 1.579 + SELECT @extschema@.epoint($2, $1) 1.580 + $$; 1.581 + 1.582 +CREATE FUNCTION epoint_with_sample_count(epoint, int4) 1.583 + RETURNS epoint_with_sample_count 1.584 + LANGUAGE C IMMUTABLE STRICT 1.585 + AS '$libdir/latlon-v0010', 'pgl_create_epoint_with_sample_count'; 1.586 + 1.587 +CREATE FUNCTION empty_ebox() 1.588 + RETURNS ebox 1.589 + LANGUAGE C IMMUTABLE STRICT 1.590 + AS '$libdir/latlon-v0010', 'pgl_create_empty_ebox'; 1.591 + 1.592 +CREATE FUNCTION ebox(float8, float8, float8, float8) 1.593 + RETURNS ebox 1.594 + LANGUAGE C IMMUTABLE STRICT 1.595 + AS '$libdir/latlon-v0010', 'pgl_create_ebox'; 1.596 + 1.597 +CREATE FUNCTION ebox(epoint, epoint) 1.598 + RETURNS ebox 1.599 + LANGUAGE C IMMUTABLE STRICT 1.600 + AS '$libdir/latlon-v0010', 'pgl_create_ebox_from_epoints'; 1.601 + 1.602 +CREATE FUNCTION ecircle(float8, float8, float8) 1.603 + RETURNS ecircle 1.604 + LANGUAGE C IMMUTABLE STRICT 1.605 + AS '$libdir/latlon-v0010', 'pgl_create_ecircle'; 1.606 + 1.607 +CREATE FUNCTION ecircle(epoint, float8) 1.608 + RETURNS ecircle 1.609 + LANGUAGE C IMMUTABLE STRICT 1.610 + AS '$libdir/latlon-v0010', 'pgl_create_ecircle_from_epoint'; 1.611 + 1.612 +CREATE FUNCTION ecluster_concat(ecluster[]) 1.613 + RETURNS ecluster 1.614 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.615 + SELECT pg_catalog.array_to_string($1, ' ')::@extschema@.ecluster 1.616 + $$; 1.617 + 1.618 +CREATE FUNCTION ecluster_concat(ecluster, ecluster) 1.619 + RETURNS ecluster 1.620 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.621 + SELECT ( 1.622 + $1::pg_catalog.text OPERATOR(pg_catalog.||) ' ' OPERATOR(pg_catalog.||) 1.623 + $2::pg_catalog.text 1.624 + )::@extschema@.ecluster 1.625 + $$; 1.626 + 1.627 +CREATE FUNCTION ecluster_create_multipoint(epoint[]) 1.628 + RETURNS ecluster 1.629 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.630 + SELECT 1.631 + pg_catalog.array_to_string( 1.632 + pg_catalog.array_agg( 1.633 + 'point (' OPERATOR(pg_catalog.||) unnest OPERATOR(pg_catalog.||) ')' 1.634 + ), 1.635 + ' ' 1.636 + )::@extschema@.ecluster 1.637 + FROM pg_catalog.unnest($1) 1.638 + $$; 1.639 + 1.640 +CREATE FUNCTION ecluster_create_path(epoint[]) 1.641 + RETURNS ecluster 1.642 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.643 + SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 1.644 + 'empty'::@extschema@.ecluster 1.645 + ELSE 1.646 + ( 1.647 + 'path (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')' 1.648 + )::@extschema@.ecluster 1.649 + END 1.650 + FROM pg_catalog.array_to_string($1, ' ') AS "str" 1.651 + $$; 1.652 + 1.653 +CREATE FUNCTION ecluster_create_outline(epoint[]) 1.654 + RETURNS ecluster 1.655 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.656 + SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 1.657 + 'empty'::@extschema@.ecluster 1.658 + ELSE 1.659 + ( 1.660 + 'outline (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')' 1.661 + )::@extschema@.ecluster 1.662 + END 1.663 + FROM pg_catalog.array_to_string($1, ' ') AS "str" 1.664 + $$; 1.665 + 1.666 +CREATE FUNCTION ecluster_create_polygon(epoint[]) 1.667 + RETURNS ecluster 1.668 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.669 + SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 1.670 + 'empty'::@extschema@.ecluster 1.671 + ELSE 1.672 + ( 1.673 + 'polygon (' OPERATOR(pg_catalog.||) pg_catalog.array_to_string($1, ' ') 1.674 + OPERATOR(pg_catalog.||) ')' 1.675 + )::@extschema@.ecluster 1.676 + END 1.677 + FROM pg_catalog.array_to_string($1, ' ') AS "str" 1.678 + $$; 1.679 + 1.680 + 1.681 +---------------------- 1.682 +-- getter functions -- 1.683 +---------------------- 1.684 + 1.685 +CREATE FUNCTION latitude(epoint) 1.686 + RETURNS float8 1.687 + LANGUAGE C IMMUTABLE STRICT 1.688 + AS '$libdir/latlon-v0010', 'pgl_epoint_lat'; 1.689 + 1.690 +CREATE FUNCTION longitude(epoint) 1.691 + RETURNS float8 1.692 + LANGUAGE C IMMUTABLE STRICT 1.693 + AS '$libdir/latlon-v0010', 'pgl_epoint_lon'; 1.694 + 1.695 +CREATE FUNCTION min_latitude(ebox) 1.696 + RETURNS float8 1.697 + LANGUAGE C IMMUTABLE STRICT 1.698 + AS '$libdir/latlon-v0010', 'pgl_ebox_lat_min'; 1.699 + 1.700 +CREATE FUNCTION max_latitude(ebox) 1.701 + RETURNS float8 1.702 + LANGUAGE C IMMUTABLE STRICT 1.703 + AS '$libdir/latlon-v0010', 'pgl_ebox_lat_max'; 1.704 + 1.705 +CREATE FUNCTION min_longitude(ebox) 1.706 + RETURNS float8 1.707 + LANGUAGE C IMMUTABLE STRICT 1.708 + AS '$libdir/latlon-v0010', 'pgl_ebox_lon_min'; 1.709 + 1.710 +CREATE FUNCTION max_longitude(ebox) 1.711 + RETURNS float8 1.712 + LANGUAGE C IMMUTABLE STRICT 1.713 + AS '$libdir/latlon-v0010', 'pgl_ebox_lon_max'; 1.714 + 1.715 +CREATE FUNCTION center(ecircle) 1.716 + RETURNS epoint 1.717 + LANGUAGE C IMMUTABLE STRICT 1.718 + AS '$libdir/latlon-v0010', 'pgl_ecircle_center'; 1.719 + 1.720 +CREATE FUNCTION radius(ecircle) 1.721 + RETURNS float8 1.722 + LANGUAGE C IMMUTABLE STRICT 1.723 + AS '$libdir/latlon-v0010', 'pgl_ecircle_radius'; 1.724 + 1.725 +CREATE FUNCTION ecluster_extract_points(ecluster) 1.726 + RETURNS SETOF epoint 1.727 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.728 + SELECT "match"[2]::@extschema@.epoint 1.729 + FROM pg_catalog.regexp_matches( 1.730 + $1::pg_catalog.text, e'(^| )point \\(([^)]+)\\)', 'g' 1.731 + ) AS "match" 1.732 + $$; 1.733 + 1.734 +CREATE FUNCTION ecluster_extract_paths(ecluster) 1.735 + RETURNS SETOF epoint[] 1.736 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.737 + SELECT ( 1.738 + SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 1.739 + FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 1.740 + ) 1.741 + FROM pg_catalog.regexp_matches( 1.742 + $1::pg_catalog.text, e'(^| )path \\(([^)]+)\\)', 'g' 1.743 + ) AS "m1" 1.744 + $$; 1.745 + 1.746 +CREATE FUNCTION ecluster_extract_outlines(ecluster) 1.747 + RETURNS SETOF epoint[] 1.748 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.749 + SELECT ( 1.750 + SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 1.751 + FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 1.752 + ) 1.753 + FROM pg_catalog.regexp_matches( 1.754 + $1::pg_catalog.text, e'(^| )outline \\(([^)]+)\\)', 'g' 1.755 + ) AS "m1" 1.756 + $$; 1.757 + 1.758 +CREATE FUNCTION ecluster_extract_polygons(ecluster) 1.759 + RETURNS SETOF epoint[] 1.760 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.761 + SELECT ( 1.762 + SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 1.763 + FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 1.764 + ) 1.765 + FROM pg_catalog.regexp_matches( 1.766 + $1::pg_catalog.text, e'(^| )polygon \\(([^)]+)\\)', 'g' 1.767 + ) AS "m1" 1.768 + $$; 1.769 + 1.770 + 1.771 +--------------- 1.772 +-- operators -- 1.773 +--------------- 1.774 + 1.775 +CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 1.776 + RETURNS boolean 1.777 + LANGUAGE C IMMUTABLE STRICT 1.778 + AS '$libdir/latlon-v0010', 'pgl_epoint_ebox_overlap'; 1.779 + 1.780 +CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 1.781 + RETURNS boolean 1.782 + LANGUAGE C IMMUTABLE STRICT 1.783 + AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_overlap'; 1.784 + 1.785 +CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 1.786 + RETURNS boolean 1.787 + LANGUAGE C IMMUTABLE STRICT 1.788 + AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_overlap'; 1.789 + 1.790 +CREATE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 1.791 + RETURNS boolean 1.792 + LANGUAGE C IMMUTABLE STRICT 1.793 + AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_may_overlap'; 1.794 + 1.795 +CREATE FUNCTION ebox_overlap_proc(ebox, ebox) 1.796 + RETURNS boolean 1.797 + LANGUAGE C IMMUTABLE STRICT 1.798 + AS '$libdir/latlon-v0010', 'pgl_ebox_overlap'; 1.799 + 1.800 +CREATE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 1.801 + RETURNS boolean 1.802 + LANGUAGE C IMMUTABLE STRICT 1.803 + AS '$libdir/latlon-v0010', 'pgl_ebox_ecircle_may_overlap'; 1.804 + 1.805 +CREATE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 1.806 + RETURNS boolean 1.807 + LANGUAGE C IMMUTABLE STRICT 1.808 + AS '$libdir/latlon-v0010', 'pgl_ebox_ecluster_may_overlap'; 1.809 + 1.810 +CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 1.811 + RETURNS boolean 1.812 + LANGUAGE C IMMUTABLE STRICT 1.813 + AS '$libdir/latlon-v0010', 'pgl_ecircle_overlap'; 1.814 + 1.815 +CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 1.816 + RETURNS boolean 1.817 + LANGUAGE C IMMUTABLE STRICT 1.818 + AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_overlap'; 1.819 + 1.820 +CREATE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 1.821 + RETURNS boolean 1.822 + LANGUAGE C IMMUTABLE STRICT 1.823 + AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_may_overlap'; 1.824 + 1.825 +CREATE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 1.826 + RETURNS boolean 1.827 + LANGUAGE C IMMUTABLE STRICT 1.828 + AS '$libdir/latlon-v0010', 'pgl_ecluster_overlap'; 1.829 + 1.830 +CREATE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 1.831 + RETURNS boolean 1.832 + LANGUAGE C IMMUTABLE STRICT 1.833 + AS '$libdir/latlon-v0010', 'pgl_ecluster_may_overlap'; 1.834 + 1.835 +CREATE FUNCTION ecluster_contains_proc(ecluster, ecluster) 1.836 + RETURNS boolean 1.837 + LANGUAGE C IMMUTABLE STRICT 1.838 + AS '$libdir/latlon-v0010', 'pgl_ecluster_contains'; 1.839 + 1.840 +CREATE FUNCTION epoint_distance_proc(epoint, epoint) 1.841 + RETURNS float8 1.842 + LANGUAGE C IMMUTABLE STRICT 1.843 + AS '$libdir/latlon-v0010', 'pgl_epoint_distance'; 1.844 + 1.845 +CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 1.846 + RETURNS float8 1.847 + LANGUAGE C IMMUTABLE STRICT 1.848 + AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_distance'; 1.849 + 1.850 +CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 1.851 + RETURNS float8 1.852 + LANGUAGE C IMMUTABLE STRICT 1.853 + AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_distance'; 1.854 + 1.855 +CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle) 1.856 + RETURNS float8 1.857 + LANGUAGE C IMMUTABLE STRICT 1.858 + AS '$libdir/latlon-v0010', 'pgl_ecircle_distance'; 1.859 + 1.860 +CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 1.861 + RETURNS float8 1.862 + LANGUAGE C IMMUTABLE STRICT 1.863 + AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_distance'; 1.864 + 1.865 +CREATE FUNCTION ecluster_distance_proc(ecluster, ecluster) 1.866 + RETURNS float8 1.867 + LANGUAGE C IMMUTABLE STRICT 1.868 + AS '$libdir/latlon-v0010', 'pgl_ecluster_distance'; 1.869 + 1.870 +CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) 1.871 + RETURNS float8 1.872 + LANGUAGE C IMMUTABLE STRICT 1.873 + AS '$libdir/latlon-v0010', 'pgl_ecluster_epoint_sc_fair_distance'; 1.874 + 1.875 +CREATE OPERATOR && ( 1.876 + leftarg = epoint, 1.877 + rightarg = ebox, 1.878 + procedure = epoint_ebox_overlap_proc, 1.879 + commutator = &&, 1.880 + restrict = areasel, 1.881 + join = areajoinsel 1.882 +); 1.883 + 1.884 +CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint) 1.885 + RETURNS boolean 1.886 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 1.887 + 1.888 +CREATE OPERATOR && ( 1.889 + leftarg = ebox, 1.890 + rightarg = epoint, 1.891 + procedure = epoint_ebox_overlap_commutator, 1.892 + commutator = &&, 1.893 + restrict = areasel, 1.894 + join = areajoinsel 1.895 +); 1.896 + 1.897 +CREATE OPERATOR && ( 1.898 + leftarg = epoint, 1.899 + rightarg = ecircle, 1.900 + procedure = epoint_ecircle_overlap_proc, 1.901 + commutator = &&, 1.902 + restrict = areasel, 1.903 + join = areajoinsel 1.904 +); 1.905 + 1.906 +CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint) 1.907 + RETURNS boolean 1.908 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 1.909 + 1.910 +CREATE OPERATOR && ( 1.911 + leftarg = ecircle, 1.912 + rightarg = epoint, 1.913 + procedure = epoint_ecircle_overlap_commutator, 1.914 + commutator = &&, 1.915 + restrict = areasel, 1.916 + join = areajoinsel 1.917 +); 1.918 + 1.919 +CREATE OPERATOR && ( 1.920 + leftarg = epoint, 1.921 + rightarg = ecluster, 1.922 + procedure = epoint_ecluster_overlap_proc, 1.923 + commutator = &&, 1.924 + restrict = areasel, 1.925 + join = areajoinsel 1.926 +); 1.927 + 1.928 +CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint) 1.929 + RETURNS boolean 1.930 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 1.931 + 1.932 +CREATE OPERATOR && ( 1.933 + leftarg = ecluster, 1.934 + rightarg = epoint, 1.935 + procedure = epoint_ecluster_overlap_commutator, 1.936 + commutator = &&, 1.937 + restrict = areasel, 1.938 + join = areajoinsel 1.939 +); 1.940 + 1.941 +CREATE OPERATOR && ( 1.942 + leftarg = ebox, 1.943 + rightarg = ebox, 1.944 + procedure = ebox_overlap_proc, 1.945 + commutator = &&, 1.946 + restrict = areasel, 1.947 + join = areajoinsel 1.948 +); 1.949 + 1.950 +CREATE OPERATOR && ( 1.951 + leftarg = ecircle, 1.952 + rightarg = ecircle, 1.953 + procedure = ecircle_overlap_proc, 1.954 + commutator = &&, 1.955 + restrict = areasel, 1.956 + join = areajoinsel 1.957 +); 1.958 + 1.959 +CREATE OPERATOR && ( 1.960 + leftarg = ecircle, 1.961 + rightarg = ecluster, 1.962 + procedure = ecircle_ecluster_overlap_proc, 1.963 + commutator = &&, 1.964 + restrict = areasel, 1.965 + join = areajoinsel 1.966 +); 1.967 + 1.968 +CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle) 1.969 + RETURNS boolean 1.970 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 1.971 + 1.972 +CREATE OPERATOR && ( 1.973 + leftarg = ecluster, 1.974 + rightarg = ecircle, 1.975 + procedure = ecircle_ecluster_overlap_commutator, 1.976 + commutator = &&, 1.977 + restrict = areasel, 1.978 + join = areajoinsel 1.979 +); 1.980 + 1.981 +CREATE OPERATOR && ( 1.982 + leftarg = ecluster, 1.983 + rightarg = ecluster, 1.984 + procedure = ecluster_overlap_proc, 1.985 + commutator = &&, 1.986 + restrict = areasel, 1.987 + join = areajoinsel 1.988 +); 1.989 + 1.990 +CREATE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle) 1.991 + RETURNS boolean 1.992 + LANGUAGE sql IMMUTABLE 1.993 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2'; 1.994 + 1.995 +CREATE OPERATOR && ( 1.996 + leftarg = ebox, 1.997 + rightarg = ecircle, 1.998 + procedure = ebox_ecircle_overlap_castwrap, 1.999 + commutator = &&, 1.1000 + restrict = areasel, 1.1001 + join = areajoinsel 1.1002 +); 1.1003 + 1.1004 +CREATE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox) 1.1005 + RETURNS boolean 1.1006 + LANGUAGE sql IMMUTABLE 1.1007 + AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster'; 1.1008 + 1.1009 +CREATE OPERATOR && ( 1.1010 + leftarg = ecircle, 1.1011 + rightarg = ebox, 1.1012 + procedure = ebox_ecircle_overlap_castwrap, 1.1013 + commutator = &&, 1.1014 + restrict = areasel, 1.1015 + join = areajoinsel 1.1016 +); 1.1017 + 1.1018 +CREATE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster) 1.1019 + RETURNS boolean 1.1020 + LANGUAGE sql IMMUTABLE 1.1021 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2'; 1.1022 + 1.1023 +CREATE OPERATOR && ( 1.1024 + leftarg = ebox, 1.1025 + rightarg = ecluster, 1.1026 + procedure = ebox_ecluster_overlap_castwrap, 1.1027 + commutator = &&, 1.1028 + restrict = areasel, 1.1029 + join = areajoinsel 1.1030 +); 1.1031 + 1.1032 +CREATE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox) 1.1033 + RETURNS boolean 1.1034 + LANGUAGE sql IMMUTABLE 1.1035 + AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster'; 1.1036 + 1.1037 +CREATE OPERATOR && ( 1.1038 + leftarg = ecluster, 1.1039 + rightarg = ebox, 1.1040 + procedure = ebox_ecluster_overlap_castwrap, 1.1041 + commutator = &&, 1.1042 + restrict = areasel, 1.1043 + join = areajoinsel 1.1044 +); 1.1045 + 1.1046 +CREATE OPERATOR &&+ ( 1.1047 + leftarg = epoint, 1.1048 + rightarg = ecluster, 1.1049 + procedure = epoint_ecluster_may_overlap_proc, 1.1050 + commutator = &&+, 1.1051 + restrict = areasel, 1.1052 + join = areajoinsel 1.1053 +); 1.1054 + 1.1055 +CREATE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint) 1.1056 + RETURNS boolean 1.1057 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 1.1058 + 1.1059 +CREATE OPERATOR &&+ ( 1.1060 + leftarg = ecluster, 1.1061 + rightarg = epoint, 1.1062 + procedure = epoint_ecluster_may_overlap_commutator, 1.1063 + commutator = &&+, 1.1064 + restrict = areasel, 1.1065 + join = areajoinsel 1.1066 +); 1.1067 + 1.1068 +CREATE OPERATOR &&+ ( 1.1069 + leftarg = ebox, 1.1070 + rightarg = ecircle, 1.1071 + procedure = ebox_ecircle_may_overlap_proc, 1.1072 + commutator = &&+, 1.1073 + restrict = areasel, 1.1074 + join = areajoinsel 1.1075 +); 1.1076 + 1.1077 +CREATE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox) 1.1078 + RETURNS boolean 1.1079 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 1.1080 + 1.1081 +CREATE OPERATOR &&+ ( 1.1082 + leftarg = ecircle, 1.1083 + rightarg = ebox, 1.1084 + procedure = ebox_ecircle_may_overlap_commutator, 1.1085 + commutator = &&+, 1.1086 + restrict = areasel, 1.1087 + join = areajoinsel 1.1088 +); 1.1089 + 1.1090 +CREATE OPERATOR &&+ ( 1.1091 + leftarg = ebox, 1.1092 + rightarg = ecluster, 1.1093 + procedure = ebox_ecluster_may_overlap_proc, 1.1094 + commutator = &&+, 1.1095 + restrict = areasel, 1.1096 + join = areajoinsel 1.1097 +); 1.1098 + 1.1099 +CREATE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox) 1.1100 + RETURNS boolean 1.1101 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 1.1102 + 1.1103 +CREATE OPERATOR &&+ ( 1.1104 + leftarg = ecluster, 1.1105 + rightarg = ebox, 1.1106 + procedure = ebox_ecluster_may_overlap_commutator, 1.1107 + commutator = &&+, 1.1108 + restrict = areasel, 1.1109 + join = areajoinsel 1.1110 +); 1.1111 + 1.1112 +CREATE OPERATOR &&+ ( 1.1113 + leftarg = ecircle, 1.1114 + rightarg = ecluster, 1.1115 + procedure = ecircle_ecluster_may_overlap_proc, 1.1116 + commutator = &&+, 1.1117 + restrict = areasel, 1.1118 + join = areajoinsel 1.1119 +); 1.1120 + 1.1121 +CREATE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle) 1.1122 + RETURNS boolean 1.1123 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 1.1124 + 1.1125 +CREATE OPERATOR &&+ ( 1.1126 + leftarg = ecluster, 1.1127 + rightarg = ecircle, 1.1128 + procedure = ecircle_ecluster_may_overlap_commutator, 1.1129 + commutator = &&+, 1.1130 + restrict = areasel, 1.1131 + join = areajoinsel 1.1132 +); 1.1133 + 1.1134 +CREATE OPERATOR &&+ ( 1.1135 + leftarg = ecluster, 1.1136 + rightarg = ecluster, 1.1137 + procedure = ecluster_may_overlap_proc, 1.1138 + commutator = &&+, 1.1139 + restrict = areasel, 1.1140 + join = areajoinsel 1.1141 +); 1.1142 + 1.1143 +CREATE OPERATOR @> ( 1.1144 + leftarg = ebox, 1.1145 + rightarg = epoint, 1.1146 + procedure = epoint_ebox_overlap_commutator, 1.1147 + commutator = <@, 1.1148 + restrict = areasel, 1.1149 + join = areajoinsel 1.1150 +); 1.1151 + 1.1152 +CREATE OPERATOR <@ ( 1.1153 + leftarg = epoint, 1.1154 + rightarg = ebox, 1.1155 + procedure = epoint_ebox_overlap_proc, 1.1156 + commutator = @>, 1.1157 + restrict = areasel, 1.1158 + join = areajoinsel 1.1159 +); 1.1160 + 1.1161 +CREATE OPERATOR @> ( 1.1162 + leftarg = ecluster, 1.1163 + rightarg = epoint, 1.1164 + procedure = epoint_ecluster_overlap_commutator, 1.1165 + commutator = <@, 1.1166 + restrict = areasel, 1.1167 + join = areajoinsel 1.1168 +); 1.1169 + 1.1170 +CREATE OPERATOR <@ ( 1.1171 + leftarg = epoint, 1.1172 + rightarg = ecluster, 1.1173 + procedure = epoint_ecluster_overlap_proc, 1.1174 + commutator = @>, 1.1175 + restrict = areasel, 1.1176 + join = areajoinsel 1.1177 +); 1.1178 + 1.1179 +CREATE OPERATOR @> ( 1.1180 + leftarg = ecluster, 1.1181 + rightarg = ecluster, 1.1182 + procedure = ecluster_contains_proc, 1.1183 + commutator = <@, 1.1184 + restrict = areasel, 1.1185 + join = areajoinsel 1.1186 +); 1.1187 + 1.1188 +CREATE FUNCTION ecluster_contains_commutator(ecluster, ecluster) 1.1189 + RETURNS boolean 1.1190 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.@>) $1'; 1.1191 + 1.1192 +CREATE OPERATOR <@ ( 1.1193 + leftarg = ecluster, 1.1194 + rightarg = ecluster, 1.1195 + procedure = ecluster_contains_commutator, 1.1196 + commutator = @>, 1.1197 + restrict = areasel, 1.1198 + join = areajoinsel 1.1199 +); 1.1200 + 1.1201 +CREATE FUNCTION ebox_contains_castwrap(ebox, ebox) 1.1202 + RETURNS boolean 1.1203 + LANGUAGE sql IMMUTABLE AS $$ 1.1204 + SELECT 1.1205 + $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2::@extschema@.ecluster 1.1206 + $$; 1.1207 + 1.1208 +CREATE OPERATOR @> ( 1.1209 + leftarg = ebox, 1.1210 + rightarg = ebox, 1.1211 + procedure = ebox_contains_castwrap, 1.1212 + commutator = <@, 1.1213 + restrict = areasel, 1.1214 + join = areajoinsel 1.1215 +); 1.1216 + 1.1217 +CREATE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox) 1.1218 + RETURNS boolean 1.1219 + LANGUAGE sql IMMUTABLE AS $$ 1.1220 + SELECT 1.1221 + $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1::@extschema@.ecluster 1.1222 + $$; 1.1223 + 1.1224 +CREATE OPERATOR <@ ( 1.1225 + leftarg = ebox, 1.1226 + rightarg = ebox, 1.1227 + procedure = ebox_contains_swapped_castwrap, 1.1228 + commutator = @>, 1.1229 + restrict = areasel, 1.1230 + join = areajoinsel 1.1231 +); 1.1232 + 1.1233 +CREATE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster) 1.1234 + RETURNS boolean 1.1235 + LANGUAGE sql IMMUTABLE 1.1236 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2'; 1.1237 + 1.1238 +CREATE OPERATOR @> ( 1.1239 + leftarg = ebox, 1.1240 + rightarg = ecluster, 1.1241 + procedure = ebox_ecluster_contains_castwrap, 1.1242 + commutator = <@, 1.1243 + restrict = areasel, 1.1244 + join = areajoinsel 1.1245 +); 1.1246 + 1.1247 +CREATE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox) 1.1248 + RETURNS boolean 1.1249 + LANGUAGE sql IMMUTABLE 1.1250 + AS 'SELECT $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1'; 1.1251 + 1.1252 +CREATE OPERATOR <@ ( 1.1253 + leftarg = ecluster, 1.1254 + rightarg = ebox, 1.1255 + procedure = ebox_ecluster_contains_castwrap, 1.1256 + commutator = @>, 1.1257 + restrict = areasel, 1.1258 + join = areajoinsel 1.1259 +); 1.1260 + 1.1261 +CREATE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox) 1.1262 + RETURNS boolean 1.1263 + LANGUAGE sql IMMUTABLE 1.1264 + AS 'SELECT $1 OPERATOR(@extschema@.@>) $2::@extschema@.ecluster'; 1.1265 + 1.1266 +CREATE OPERATOR @> ( 1.1267 + leftarg = ecluster, 1.1268 + rightarg = ebox, 1.1269 + procedure = ecluster_ebox_contains_castwrap, 1.1270 + commutator = <@, 1.1271 + restrict = areasel, 1.1272 + join = areajoinsel 1.1273 +); 1.1274 + 1.1275 +CREATE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster) 1.1276 + RETURNS boolean 1.1277 + LANGUAGE sql IMMUTABLE 1.1278 + AS 'SELECT $2 OPERATOR(@extschema@.@>) $1::@extschema@.ecluster'; 1.1279 + 1.1280 +CREATE OPERATOR <@ ( 1.1281 + leftarg = ebox, 1.1282 + rightarg = ecluster, 1.1283 + procedure = ecluster_ebox_contains_castwrap, 1.1284 + commutator = @>, 1.1285 + restrict = areasel, 1.1286 + join = areajoinsel 1.1287 +); 1.1288 + 1.1289 +CREATE OPERATOR <-> ( 1.1290 + leftarg = epoint, 1.1291 + rightarg = epoint, 1.1292 + procedure = epoint_distance_proc, 1.1293 + commutator = <-> 1.1294 +); 1.1295 + 1.1296 +CREATE OPERATOR <-> ( 1.1297 + leftarg = epoint, 1.1298 + rightarg = ecircle, 1.1299 + procedure = epoint_ecircle_distance_proc, 1.1300 + commutator = <-> 1.1301 +); 1.1302 + 1.1303 +CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint) 1.1304 + RETURNS float8 1.1305 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 1.1306 + 1.1307 +CREATE OPERATOR <-> ( 1.1308 + leftarg = ecircle, 1.1309 + rightarg = epoint, 1.1310 + procedure = epoint_ecircle_distance_commutator, 1.1311 + commutator = <-> 1.1312 +); 1.1313 + 1.1314 +CREATE OPERATOR <-> ( 1.1315 + leftarg = epoint, 1.1316 + rightarg = ecluster, 1.1317 + procedure = epoint_ecluster_distance_proc, 1.1318 + commutator = <-> 1.1319 +); 1.1320 + 1.1321 +CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint) 1.1322 + RETURNS float8 1.1323 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 1.1324 + 1.1325 +CREATE OPERATOR <-> ( 1.1326 + leftarg = ecluster, 1.1327 + rightarg = epoint, 1.1328 + procedure = epoint_ecluster_distance_commutator, 1.1329 + commutator = <-> 1.1330 +); 1.1331 + 1.1332 +CREATE OPERATOR <-> ( 1.1333 + leftarg = ecircle, 1.1334 + rightarg = ecircle, 1.1335 + procedure = ecircle_distance_proc, 1.1336 + commutator = <-> 1.1337 +); 1.1338 + 1.1339 +CREATE OPERATOR <-> ( 1.1340 + leftarg = ecircle, 1.1341 + rightarg = ecluster, 1.1342 + procedure = ecircle_ecluster_distance_proc, 1.1343 + commutator = <-> 1.1344 +); 1.1345 + 1.1346 +CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle) 1.1347 + RETURNS float8 1.1348 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 1.1349 + 1.1350 +CREATE OPERATOR <-> ( 1.1351 + leftarg = ecluster, 1.1352 + rightarg = ecircle, 1.1353 + procedure = ecircle_ecluster_distance_commutator, 1.1354 + commutator = <-> 1.1355 +); 1.1356 + 1.1357 +CREATE OPERATOR <-> ( 1.1358 + leftarg = ecluster, 1.1359 + rightarg = ecluster, 1.1360 + procedure = ecluster_distance_proc, 1.1361 + commutator = <-> 1.1362 +); 1.1363 + 1.1364 +CREATE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox) 1.1365 + RETURNS float8 1.1366 + LANGUAGE sql IMMUTABLE 1.1367 + AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 1.1368 + 1.1369 +CREATE OPERATOR <-> ( 1.1370 + leftarg = epoint, 1.1371 + rightarg = ebox, 1.1372 + procedure = epoint_ebox_distance_castwrap, 1.1373 + commutator = <-> 1.1374 +); 1.1375 + 1.1376 +CREATE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint) 1.1377 + RETURNS float8 1.1378 + LANGUAGE sql IMMUTABLE 1.1379 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 1.1380 + 1.1381 +CREATE OPERATOR <-> ( 1.1382 + leftarg = ebox, 1.1383 + rightarg = epoint, 1.1384 + procedure = epoint_ebox_distance_castwrap, 1.1385 + commutator = <-> 1.1386 +); 1.1387 + 1.1388 +CREATE FUNCTION ebox_distance_castwrap(ebox, ebox) 1.1389 + RETURNS float8 1.1390 + LANGUAGE sql IMMUTABLE AS $$ 1.1391 + SELECT 1.1392 + $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2::@extschema@.ecluster 1.1393 + $$; 1.1394 + 1.1395 +CREATE OPERATOR <-> ( 1.1396 + leftarg = ebox, 1.1397 + rightarg = ebox, 1.1398 + procedure = ebox_distance_castwrap, 1.1399 + commutator = <-> 1.1400 +); 1.1401 + 1.1402 +CREATE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle) 1.1403 + RETURNS float8 1.1404 + LANGUAGE sql IMMUTABLE 1.1405 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 1.1406 + 1.1407 +CREATE OPERATOR <-> ( 1.1408 + leftarg = ebox, 1.1409 + rightarg = ecircle, 1.1410 + procedure = ebox_ecircle_distance_castwrap, 1.1411 + commutator = <-> 1.1412 +); 1.1413 + 1.1414 +CREATE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox) 1.1415 + RETURNS float8 1.1416 + LANGUAGE sql IMMUTABLE 1.1417 + AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 1.1418 + 1.1419 +CREATE OPERATOR <-> ( 1.1420 + leftarg = ecircle, 1.1421 + rightarg = ebox, 1.1422 + procedure = ebox_ecircle_distance_castwrap, 1.1423 + commutator = <-> 1.1424 +); 1.1425 + 1.1426 +CREATE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster) 1.1427 + RETURNS float8 1.1428 + LANGUAGE sql IMMUTABLE 1.1429 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 1.1430 + 1.1431 +CREATE OPERATOR <-> ( 1.1432 + leftarg = ebox, 1.1433 + rightarg = ecluster, 1.1434 + procedure = ebox_ecluster_distance_castwrap, 1.1435 + commutator = <-> 1.1436 +); 1.1437 + 1.1438 +CREATE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox) 1.1439 + RETURNS float8 1.1440 + LANGUAGE sql IMMUTABLE 1.1441 + AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 1.1442 + 1.1443 +CREATE OPERATOR <-> ( 1.1444 + leftarg = ecluster, 1.1445 + rightarg = ebox, 1.1446 + procedure = ebox_ecluster_distance_castwrap, 1.1447 + commutator = <-> 1.1448 +); 1.1449 + 1.1450 +CREATE OPERATOR <=> ( 1.1451 + leftarg = ecluster, 1.1452 + rightarg = epoint_with_sample_count, 1.1453 + procedure = fair_distance_operator_proc 1.1454 +); 1.1455 + 1.1456 + 1.1457 +---------------- 1.1458 +-- GiST index -- 1.1459 +---------------- 1.1460 + 1.1461 +CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 1.1462 + RETURNS boolean 1.1463 + LANGUAGE C STRICT 1.1464 + AS '$libdir/latlon-v0010', 'pgl_gist_consistent'; 1.1465 + 1.1466 +CREATE FUNCTION pgl_gist_union(internal, internal) 1.1467 + RETURNS internal 1.1468 + LANGUAGE C STRICT 1.1469 + AS '$libdir/latlon-v0010', 'pgl_gist_union'; 1.1470 + 1.1471 +CREATE FUNCTION pgl_gist_compress_epoint(internal) 1.1472 + RETURNS internal 1.1473 + LANGUAGE C STRICT 1.1474 + AS '$libdir/latlon-v0010', 'pgl_gist_compress_epoint'; 1.1475 + 1.1476 +CREATE FUNCTION pgl_gist_compress_ecircle(internal) 1.1477 + RETURNS internal 1.1478 + LANGUAGE C STRICT 1.1479 + AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecircle'; 1.1480 + 1.1481 +CREATE FUNCTION pgl_gist_compress_ecluster(internal) 1.1482 + RETURNS internal 1.1483 + LANGUAGE C STRICT 1.1484 + AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecluster'; 1.1485 + 1.1486 +CREATE FUNCTION pgl_gist_decompress(internal) 1.1487 + RETURNS internal 1.1488 + LANGUAGE C STRICT 1.1489 + AS '$libdir/latlon-v0010', 'pgl_gist_decompress'; 1.1490 + 1.1491 +CREATE FUNCTION pgl_gist_penalty(internal, internal, internal) 1.1492 + RETURNS internal 1.1493 + LANGUAGE C STRICT 1.1494 + AS '$libdir/latlon-v0010', 'pgl_gist_penalty'; 1.1495 + 1.1496 +CREATE FUNCTION pgl_gist_picksplit(internal, internal) 1.1497 + RETURNS internal 1.1498 + LANGUAGE C STRICT 1.1499 + AS '$libdir/latlon-v0010', 'pgl_gist_picksplit'; 1.1500 + 1.1501 +CREATE FUNCTION pgl_gist_same(internal, internal, internal) 1.1502 + RETURNS internal 1.1503 + LANGUAGE C STRICT 1.1504 + AS '$libdir/latlon-v0010', 'pgl_gist_same'; 1.1505 + 1.1506 +CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 1.1507 + RETURNS internal 1.1508 + LANGUAGE C STRICT 1.1509 + AS '$libdir/latlon-v0010', 'pgl_gist_distance'; 1.1510 + 1.1511 +CREATE OPERATOR CLASS epoint_ops 1.1512 + DEFAULT FOR TYPE epoint USING gist AS 1.1513 + OPERATOR 11 = , 1.1514 + OPERATOR 22 && (epoint, ebox), 1.1515 + OPERATOR 222 <@ (epoint, ebox), 1.1516 + OPERATOR 23 && (epoint, ecircle), 1.1517 + OPERATOR 24 && (epoint, ecluster), 1.1518 + OPERATOR 124 &&+ (epoint, ecluster), 1.1519 + OPERATOR 224 <@ (epoint, ecluster), 1.1520 + OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 1.1521 + OPERATOR 32 <-> (epoint, ebox) FOR ORDER BY float_ops, 1.1522 + OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 1.1523 + OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 1.1524 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 1.1525 + FUNCTION 2 pgl_gist_union(internal, internal), 1.1526 + FUNCTION 3 pgl_gist_compress_epoint(internal), 1.1527 + FUNCTION 4 pgl_gist_decompress(internal), 1.1528 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 1.1529 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 1.1530 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 1.1531 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 1.1532 + STORAGE ekey_point; 1.1533 + 1.1534 +CREATE OPERATOR CLASS ecircle_ops 1.1535 + DEFAULT FOR TYPE ecircle USING gist AS 1.1536 + OPERATOR 13 = , 1.1537 + OPERATOR 21 && (ecircle, epoint), 1.1538 + OPERATOR 22 && (ecircle, ebox), 1.1539 + OPERATOR 122 &&+ (ecircle, ebox), 1.1540 + OPERATOR 23 && (ecircle, ecircle), 1.1541 + OPERATOR 24 && (ecircle, ecluster), 1.1542 + OPERATOR 124 &&+ (ecircle, ecluster), 1.1543 + OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 1.1544 + OPERATOR 32 <-> (ecircle, ebox) FOR ORDER BY float_ops, 1.1545 + OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 1.1546 + OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 1.1547 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 1.1548 + FUNCTION 2 pgl_gist_union(internal, internal), 1.1549 + FUNCTION 3 pgl_gist_compress_ecircle(internal), 1.1550 + FUNCTION 4 pgl_gist_decompress(internal), 1.1551 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 1.1552 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 1.1553 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 1.1554 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 1.1555 + STORAGE ekey_area; 1.1556 + 1.1557 +CREATE OPERATOR CLASS ecluster_ops 1.1558 + DEFAULT FOR TYPE ecluster USING gist AS 1.1559 + OPERATOR 21 && (ecluster, epoint), 1.1560 + OPERATOR 121 &&+ (ecluster, epoint), 1.1561 + OPERATOR 221 @> (ecluster, epoint), 1.1562 + OPERATOR 22 && (ecluster, ebox), 1.1563 + OPERATOR 122 &&+ (ecluster, ebox), 1.1564 + OPERATOR 222 @> (ecluster, ebox), 1.1565 + OPERATOR 322 <@ (ecluster, ebox), 1.1566 + OPERATOR 23 && (ecluster, ecircle), 1.1567 + OPERATOR 123 &&+ (ecluster, ecircle), 1.1568 + OPERATOR 24 && (ecluster, ecluster), 1.1569 + OPERATOR 124 &&+ (ecluster, ecluster), 1.1570 + OPERATOR 224 @> (ecluster, ecluster), 1.1571 + OPERATOR 324 <@ (ecluster, ecluster), 1.1572 + OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops, 1.1573 + OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops, 1.1574 + OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops, 1.1575 + OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops, 1.1576 + OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops, 1.1577 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 1.1578 + FUNCTION 2 pgl_gist_union(internal, internal), 1.1579 + FUNCTION 3 pgl_gist_compress_ecluster(internal), 1.1580 + FUNCTION 4 pgl_gist_decompress(internal), 1.1581 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 1.1582 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 1.1583 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 1.1584 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 1.1585 + STORAGE ekey_area; 1.1586 + 1.1587 + 1.1588 +--------------------- 1.1589 +-- alias functions -- 1.1590 +--------------------- 1.1591 + 1.1592 +CREATE FUNCTION distance(epoint, epoint) 1.1593 + RETURNS float8 1.1594 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2'; 1.1595 + 1.1596 +CREATE FUNCTION distance(ecluster, epoint) 1.1597 + RETURNS float8 1.1598 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2'; 1.1599 + 1.1600 +CREATE FUNCTION distance_within(epoint, epoint, float8) 1.1601 + RETURNS boolean 1.1602 + LANGUAGE sql IMMUTABLE 1.1603 + AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)'; 1.1604 + 1.1605 +CREATE FUNCTION distance_within(ecluster, epoint, float8) 1.1606 + RETURNS boolean 1.1607 + LANGUAGE sql IMMUTABLE 1.1608 + AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)'; 1.1609 + 1.1610 +CREATE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) 1.1611 + RETURNS float8 1.1612 + LANGUAGE sql IMMUTABLE AS $$ 1.1613 + SELECT 1.1614 + $1 OPERATOR(@extschema@.<=>) @extschema@.epoint_with_sample_count($2, $3) 1.1615 + $$; 1.1616 + 1.1617 + 1.1618 +-------------------------------- 1.1619 +-- other data storage formats -- 1.1620 +-------------------------------- 1.1621 + 1.1622 +CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint') 1.1623 + RETURNS epoint 1.1624 + LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 1.1625 + DECLARE 1.1626 + "result" @extschema@.epoint; 1.1627 + BEGIN 1.1628 + IF $3 OPERATOR(pg_catalog.=) 'epoint_lonlat' THEN 1.1629 + -- avoid dynamic command execution for better performance 1.1630 + RETURN @extschema@.epoint($2, $1); 1.1631 + END IF; 1.1632 + IF 1.1633 + $3 OPERATOR(pg_catalog.=) 'epoint' OR 1.1634 + $3 OPERATOR(pg_catalog.=) 'epoint_latlon' 1.1635 + THEN 1.1636 + -- avoid dynamic command execution for better performance 1.1637 + RETURN @extschema@.epoint($1, $2); 1.1638 + END IF; 1.1639 + EXECUTE 1.1640 + 'SELECT ' OPERATOR(pg_catalog.||) $3 OPERATOR(pg_catalog.||) '($1, $2)' INTO STRICT "result" USING $1, $2; 1.1641 + RETURN "result"; 1.1642 + END; 1.1643 + $$; 1.1644 + 1.1645 +CREATE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat') 1.1646 + RETURNS SETOF jsonb 1.1647 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.1648 + SELECT "result" FROM 1.1649 + ( SELECT pg_catalog.jsonb_array_length($1) - 1 ) 1.1650 + AS "lastindex_row" ("lastindex") 1.1651 + CROSS JOIN LATERAL pg_catalog.jsonb_array_elements( 1.1652 + CASE WHEN 1.1653 + @extschema@.coords_to_epoint( 1.1654 + ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 0) 1.1655 + ::pg_catalog.float8, 1.1656 + ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 1) 1.1657 + ::pg_catalog.float8, 1.1658 + $2 1.1659 + ) OPERATOR(pg_catalog.=) @extschema@.coords_to_epoint( 1.1660 + ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 0) 1.1661 + ::pg_catalog.float8, 1.1662 + ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 1) 1.1663 + ::pg_catalog.float8, 1.1664 + $2 1.1665 + ) 1.1666 + THEN 1.1667 + $1 - "lastindex" 1.1668 + ELSE 1.1669 + $1 1.1670 + END 1.1671 + ) AS "result_row" ("result") 1.1672 + $$; 1.1673 + 1.1674 +CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat') 1.1675 + RETURNS epoint 1.1676 + LANGUAGE sql IMMUTABLE STRICT AS $$ 1.1677 + SELECT CASE 1.1678 + WHEN $1 OPERATOR(pg_catalog.->>) 'type' OPERATOR(pg_catalog.=) 'Point' THEN 1.1679 + @extschema@.coords_to_epoint( 1.1680 + ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0) 1.1681 + ::pg_catalog.float8, 1.1682 + ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1) 1.1683 + ::pg_catalog.float8, 1.1684 + $2 1.1685 + ) 1.1686 + WHEN $1->>'type' = 'Feature' THEN 1.1687 + @extschema@.GeoJSON_to_epoint($1 OPERATOR(pg_catalog.->) 'geometry', $2) 1.1688 + ELSE 1.1689 + NULL 1.1690 + END 1.1691 + $$; 1.1692 + 1.1693 +CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat') 1.1694 + RETURNS ecluster 1.1695 + LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 1.1696 + DECLARE 1.1697 + "tp" TEXT = $1 OPERATOR(pg_catalog.->>) 'type'; 1.1698 + BEGIN 1.1699 + IF "tp" = 'Point' THEN RETURN 1.1700 + @extschema@.coords_to_epoint( 1.1701 + ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0) 1.1702 + ::pg_catalog.float8, 1.1703 + ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1) 1.1704 + ::pg_catalog.float8, 1.1705 + $2 1.1706 + )::@extschema@.ecluster; 1.1707 + END IF; 1.1708 + raise notice 'DEBUG2'; 1.1709 + IF "tp" = 'MultiPoint' THEN RETURN 1.1710 + ( SELECT @extschema@.ecluster_create_multipoint(pg_catalog.array_agg( 1.1711 + @extschema@.coords_to_epoint( 1.1712 + ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 1.1713 + ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 1.1714 + $2 1.1715 + ) 1.1716 + )) 1.1717 + FROM pg_catalog.jsonb_array_elements( 1.1718 + $1 OPERATOR(pg_catalog.->) 'coordinates' 1.1719 + ) AS "coord" 1.1720 + ); 1.1721 + END IF; 1.1722 + IF "tp" = 'LineString' THEN RETURN 1.1723 + ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg( 1.1724 + @extschema@.coords_to_epoint( 1.1725 + ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 1.1726 + ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 1.1727 + $2 1.1728 + ) 1.1729 + )) 1.1730 + FROM pg_catalog.jsonb_array_elements( 1.1731 + $1 OPERATOR(pg_catalog.->) 'coordinates' 1.1732 + ) AS "coord" 1.1733 + ); 1.1734 + END IF; 1.1735 + IF "tp" = 'MultiLineString' THEN RETURN 1.1736 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 1.1737 + ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg( 1.1738 + @extschema@.coords_to_epoint( 1.1739 + ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 1.1740 + ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 1.1741 + $2 1.1742 + ) 1.1743 + )) 1.1744 + FROM pg_catalog.jsonb_array_elements("coord_array") AS "coord" 1.1745 + ) 1.1746 + )) 1.1747 + FROM pg_catalog.jsonb_array_elements( 1.1748 + $1 OPERATOR(pg_catalog.->) 'coordinates' 1.1749 + ) AS "coord_array" 1.1750 + ); 1.1751 + END IF; 1.1752 + IF "tp" = 'Polygon' THEN RETURN 1.1753 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 1.1754 + ( SELECT @extschema@.ecluster_create_polygon(pg_catalog.array_agg( 1.1755 + @extschema@.coords_to_epoint( 1.1756 + ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 1.1757 + ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 1.1758 + $2 1.1759 + ) 1.1760 + )) 1.1761 + FROM @extschema@.GeoJSON_LinearRing_vertices("coord_array", $2) 1.1762 + AS "coord" 1.1763 + ) 1.1764 + )) 1.1765 + FROM pg_catalog.jsonb_array_elements( 1.1766 + $1 OPERATOR(pg_catalog.->) 'coordinates' 1.1767 + ) AS "coord_array" 1.1768 + ); 1.1769 + END IF; 1.1770 + IF "tp" = 'MultiPolygon' THEN RETURN 1.1771 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 1.1772 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 1.1773 + ( SELECT @extschema@.ecluster_create_polygon( 1.1774 + pg_catalog.array_agg( 1.1775 + @extschema@.coords_to_epoint( 1.1776 + ("coord" OPERATOR(pg_catalog.->>) 0) 1.1777 + ::pg_catalog.float8, 1.1778 + ("coord" OPERATOR(pg_catalog.->>) 1) 1.1779 + ::pg_catalog.float8, 1.1780 + $2 1.1781 + ) 1.1782 + ) 1.1783 + ) 1.1784 + FROM @extschema@.GeoJSON_LinearRing_vertices( 1.1785 + "coord_array", $2 1.1786 + ) AS "coord" 1.1787 + ) 1.1788 + )) 1.1789 + FROM pg_catalog.jsonb_array_elements("coord_array_array") 1.1790 + AS "coord_array" 1.1791 + ) 1.1792 + )) 1.1793 + FROM jsonb_array_elements( 1.1794 + $1 OPERATOR(pg_catalog.->) 'coordinates' 1.1795 + ) AS "coord_array_array" 1.1796 + ); 1.1797 + END IF; 1.1798 + IF "tp" = 'GeometryCollection' THEN RETURN 1.1799 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 1.1800 + @extschema@.GeoJSON_to_ecluster("geometry", $2) 1.1801 + )) 1.1802 + FROM pg_catalog.jsonb_array_elements( 1.1803 + $1 OPERATOR(pg_catalog.->) 'geometries' 1.1804 + ) AS "geometry" 1.1805 + ); 1.1806 + END IF; 1.1807 + IF "tp" = 'Feature' THEN RETURN 1.1808 + @extschema@.GeoJSON_to_ecluster( 1.1809 + $1 OPERATOR(pg_catalog.->) 'geometry', $2 1.1810 + ); 1.1811 + END IF; 1.1812 + IF "tp" = 'FeatureCollection' THEN RETURN 1.1813 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 1.1814 + @extschema@.GeoJSON_to_ecluster("feature", $2) 1.1815 + )) 1.1816 + FROM pg_catalog.jsonb_array_elements( 1.1817 + $1 OPERATOR(pg_catalog.->) 'features' 1.1818 + ) AS "feature" 1.1819 + ); 1.1820 + END IF; 1.1821 + RETURN NULL; 1.1822 + END; 1.1823 + $$; 1.1824 +