pgLatLon
changeset 53:537df4c9de92
New version 0.12 with same C file (v0009)
author | jbe |
---|---|
date | Sun Dec 10 19:45:19 2017 +0100 (2017-12-10) |
parents | 133626ff7cb2 |
children | 253218d6662d |
files | GNUmakefile LICENSE README.html README.mkd latlon--0.10--0.11.sql latlon--0.11--0.12.sql latlon--0.11.sql latlon--0.12.sql latlon.control |
line diff
1.1 --- a/GNUmakefile Thu Nov 09 23:28:32 2017 +0100 1.2 +++ b/GNUmakefile Sun Dec 10 19:45:19 2017 +0100 1.3 @@ -1,5 +1,5 @@ 1.4 EXTENSION = latlon 1.5 -DATA = latlon--0.10--0.11.sql latlon--0.11.sql 1.6 +DATA = latlon--0.11--0.12.sql latlon--0.12.sql 1.7 MODULES = latlon-v0009 1.8 1.9 PG_CONFIG = pg_config
2.1 --- a/LICENSE Thu Nov 09 23:28:32 2017 +0100 2.2 +++ b/LICENSE Sun Dec 10 19:45:19 2017 +0100 2.3 @@ -1,4 +1,4 @@ 2.4 -Copyright (c) 2016 Public Software Group e. V., Berlin, Germany 2.5 +Copyright (c) 2016-2017 Public Software Group e. V., Berlin, Germany 2.6 2.7 Permission is hereby granted, free of charge, to any person obtaining a 2.8 copy of this software and associated documentation files (the "Software"),
3.1 --- a/README.html Thu Nov 09 23:28:32 2017 +0100 3.2 +++ b/README.html Sun Dec 10 19:45:19 2017 +0100 3.3 @@ -1,5 +1,5 @@ 3.4 -<html><head><title>pgLatLon v0.11 documentation</title></head><body> 3.5 -<h1>pgLatLon v0.11 documentation</h1> 3.6 +<html><head><title>pgLatLon v0.12 documentation</title></head><body> 3.7 +<h1>pgLatLon v0.12 documentation</h1> 3.8 3.9 <p>pgLatLon is a spatial database extension for the PostgreSQL object-relational 3.10 database management system providing geographic data types and spatial indexing
4.1 --- a/README.mkd Thu Nov 09 23:28:32 2017 +0100 4.2 +++ b/README.mkd Sun Dec 10 19:45:19 2017 +0100 4.3 @@ -1,4 +1,4 @@ 4.4 -pgLatLon v0.11 documentation 4.5 +pgLatLon v0.12 documentation 4.6 =========================== 4.7 4.8 pgLatLon is a spatial database extension for the PostgreSQL object-relational
7.1 --- a/latlon--0.11.sql Thu Nov 09 23:28:32 2017 +0100 7.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 7.3 @@ -1,1717 +0,0 @@ 7.4 - 7.5 ----------------------------------------- 7.6 --- forward declarations (shell types) -- 7.7 ----------------------------------------- 7.8 - 7.9 -CREATE TYPE ekey_point; 7.10 -CREATE TYPE ekey_area; 7.11 -CREATE TYPE epoint; 7.12 -CREATE TYPE epoint_with_sample_count; 7.13 -CREATE TYPE ebox; 7.14 -CREATE TYPE ecircle; 7.15 -CREATE TYPE ecluster; 7.16 - 7.17 - 7.18 ------------------------------------------------------------- 7.19 --- dummy input/output functions for dummy index key types -- 7.20 ------------------------------------------------------------- 7.21 - 7.22 -CREATE FUNCTION ekey_point_in_dummy(cstring) 7.23 - RETURNS ekey_point 7.24 - LANGUAGE C IMMUTABLE STRICT 7.25 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 7.26 - 7.27 -CREATE FUNCTION ekey_point_out_dummy(ekey_point) 7.28 - RETURNS cstring 7.29 - LANGUAGE C IMMUTABLE STRICT 7.30 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 7.31 - 7.32 -CREATE FUNCTION ekey_area_in_dummy(cstring) 7.33 - RETURNS ekey_area 7.34 - LANGUAGE C IMMUTABLE STRICT 7.35 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 7.36 - 7.37 -CREATE FUNCTION ekey_area_out_dummy(ekey_area) 7.38 - RETURNS cstring 7.39 - LANGUAGE C IMMUTABLE STRICT 7.40 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 7.41 - 7.42 - 7.43 --------------------------- 7.44 --- text input functions -- 7.45 --------------------------- 7.46 - 7.47 -CREATE FUNCTION epoint_in(cstring) 7.48 - RETURNS epoint 7.49 - LANGUAGE C IMMUTABLE STRICT 7.50 - AS '$libdir/latlon-v0009', 'pgl_epoint_in'; 7.51 - 7.52 -CREATE FUNCTION epoint_with_sample_count_in(cstring) 7.53 - RETURNS epoint_with_sample_count 7.54 - LANGUAGE C IMMUTABLE STRICT 7.55 - AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_in'; 7.56 - 7.57 -CREATE FUNCTION ebox_in(cstring) 7.58 - RETURNS ebox 7.59 - LANGUAGE C IMMUTABLE STRICT 7.60 - AS '$libdir/latlon-v0009', 'pgl_ebox_in'; 7.61 - 7.62 -CREATE FUNCTION ecircle_in(cstring) 7.63 - RETURNS ecircle 7.64 - LANGUAGE C IMMUTABLE STRICT 7.65 - AS '$libdir/latlon-v0009', 'pgl_ecircle_in'; 7.66 - 7.67 -CREATE FUNCTION ecluster_in(cstring) 7.68 - RETURNS ecluster 7.69 - LANGUAGE C IMMUTABLE STRICT 7.70 - AS '$libdir/latlon-v0009', 'pgl_ecluster_in'; 7.71 - 7.72 - 7.73 ---------------------------- 7.74 --- text output functions -- 7.75 ---------------------------- 7.76 - 7.77 -CREATE FUNCTION epoint_out(epoint) 7.78 - RETURNS cstring 7.79 - LANGUAGE C IMMUTABLE STRICT 7.80 - AS '$libdir/latlon-v0009', 'pgl_epoint_out'; 7.81 - 7.82 -CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) 7.83 - RETURNS cstring 7.84 - LANGUAGE C IMMUTABLE STRICT 7.85 - AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_out'; 7.86 - 7.87 -CREATE FUNCTION ebox_out(ebox) 7.88 - RETURNS cstring 7.89 - LANGUAGE C IMMUTABLE STRICT 7.90 - AS '$libdir/latlon-v0009', 'pgl_ebox_out'; 7.91 - 7.92 -CREATE FUNCTION ecircle_out(ecircle) 7.93 - RETURNS cstring 7.94 - LANGUAGE C IMMUTABLE STRICT 7.95 - AS '$libdir/latlon-v0009', 'pgl_ecircle_out'; 7.96 - 7.97 -CREATE FUNCTION ecluster_out(ecluster) 7.98 - RETURNS cstring 7.99 - LANGUAGE C IMMUTABLE STRICT 7.100 - AS '$libdir/latlon-v0009', 'pgl_ecluster_out'; 7.101 - 7.102 - 7.103 --------------------------- 7.104 --- binary I/O functions -- 7.105 --------------------------- 7.106 - 7.107 -CREATE FUNCTION epoint_recv(internal) 7.108 - RETURNS epoint 7.109 - LANGUAGE C IMMUTABLE STRICT 7.110 - AS '$libdir/latlon-v0009', 'pgl_epoint_recv'; 7.111 - 7.112 -CREATE FUNCTION ebox_recv(internal) 7.113 - RETURNS ebox 7.114 - LANGUAGE C IMMUTABLE STRICT 7.115 - AS '$libdir/latlon-v0009', 'pgl_ebox_recv'; 7.116 - 7.117 -CREATE FUNCTION ecircle_recv(internal) 7.118 - RETURNS ecircle 7.119 - LANGUAGE C IMMUTABLE STRICT 7.120 - AS '$libdir/latlon-v0009', 'pgl_ecircle_recv'; 7.121 - 7.122 -CREATE FUNCTION epoint_send(epoint) 7.123 - RETURNS bytea 7.124 - LANGUAGE C IMMUTABLE STRICT 7.125 - AS '$libdir/latlon-v0009', 'pgl_epoint_send'; 7.126 - 7.127 -CREATE FUNCTION ebox_send(ebox) 7.128 - RETURNS bytea 7.129 - LANGUAGE C IMMUTABLE STRICT 7.130 - AS '$libdir/latlon-v0009', 'pgl_ebox_send'; 7.131 - 7.132 -CREATE FUNCTION ecircle_send(ecircle) 7.133 - RETURNS bytea 7.134 - LANGUAGE C IMMUTABLE STRICT 7.135 - AS '$libdir/latlon-v0009', 'pgl_ecircle_send'; 7.136 - 7.137 - 7.138 ------------------------------------------------ 7.139 --- type definitions of dummy index key types -- 7.140 ------------------------------------------------ 7.141 - 7.142 -CREATE TYPE ekey_point ( 7.143 - internallength = 8, 7.144 - input = ekey_point_in_dummy, 7.145 - output = ekey_point_out_dummy, 7.146 - alignment = char ); 7.147 - 7.148 -CREATE TYPE ekey_area ( 7.149 - internallength = 9, 7.150 - input = ekey_area_in_dummy, 7.151 - output = ekey_area_out_dummy, 7.152 - alignment = char ); 7.153 - 7.154 - 7.155 ------------------------------------------- 7.156 --- definitions of geographic data types -- 7.157 ------------------------------------------- 7.158 - 7.159 -CREATE TYPE epoint ( 7.160 - internallength = 16, 7.161 - input = epoint_in, 7.162 - output = epoint_out, 7.163 - receive = epoint_recv, 7.164 - send = epoint_send, 7.165 - alignment = double ); 7.166 - 7.167 -CREATE TYPE epoint_with_sample_count ( 7.168 - internallength = 20, 7.169 - input = epoint_with_sample_count_in, 7.170 - output = epoint_with_sample_count_out, 7.171 - alignment = double ); 7.172 - 7.173 -CREATE TYPE ebox ( 7.174 - internallength = 32, 7.175 - input = ebox_in, 7.176 - output = ebox_out, 7.177 - receive = ebox_recv, 7.178 - send = ebox_send, 7.179 - alignment = double ); 7.180 - 7.181 -CREATE TYPE ecircle ( 7.182 - internallength = 24, 7.183 - input = ecircle_in, 7.184 - output = ecircle_out, 7.185 - receive = ecircle_recv, 7.186 - send = ecircle_send, 7.187 - alignment = double ); 7.188 - 7.189 -CREATE TYPE ecluster ( 7.190 - internallength = VARIABLE, 7.191 - input = ecluster_in, 7.192 - output = ecluster_out, 7.193 - alignment = double, 7.194 - storage = external ); 7.195 - 7.196 - 7.197 --------------------- 7.198 --- B-tree support -- 7.199 --------------------- 7.200 - 7.201 --- begin of B-tree support for epoint 7.202 - 7.203 -CREATE FUNCTION epoint_btree_lt(epoint, epoint) 7.204 - RETURNS boolean 7.205 - LANGUAGE C IMMUTABLE STRICT 7.206 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_lt'; 7.207 - 7.208 -CREATE FUNCTION epoint_btree_le(epoint, epoint) 7.209 - RETURNS boolean 7.210 - LANGUAGE C IMMUTABLE STRICT 7.211 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_le'; 7.212 - 7.213 -CREATE FUNCTION epoint_btree_eq(epoint, epoint) 7.214 - RETURNS boolean 7.215 - LANGUAGE C IMMUTABLE STRICT 7.216 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_eq'; 7.217 - 7.218 -CREATE FUNCTION epoint_btree_ne(epoint, epoint) 7.219 - RETURNS boolean 7.220 - LANGUAGE C IMMUTABLE STRICT 7.221 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ne'; 7.222 - 7.223 -CREATE FUNCTION epoint_btree_ge(epoint, epoint) 7.224 - RETURNS boolean 7.225 - LANGUAGE C IMMUTABLE STRICT 7.226 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ge'; 7.227 - 7.228 -CREATE FUNCTION epoint_btree_gt(epoint, epoint) 7.229 - RETURNS boolean 7.230 - LANGUAGE C IMMUTABLE STRICT 7.231 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_gt'; 7.232 - 7.233 -CREATE OPERATOR <<< ( 7.234 - leftarg = epoint, 7.235 - rightarg = epoint, 7.236 - procedure = epoint_btree_lt, 7.237 - commutator = >>>, 7.238 - negator = >>>=, 7.239 - restrict = scalarltsel, 7.240 - join = scalarltjoinsel 7.241 -); 7.242 - 7.243 -CREATE OPERATOR <<<= ( 7.244 - leftarg = epoint, 7.245 - rightarg = epoint, 7.246 - procedure = epoint_btree_le, 7.247 - commutator = >>>=, 7.248 - negator = >>>, 7.249 - restrict = scalarltsel, 7.250 - join = scalarltjoinsel 7.251 -); 7.252 - 7.253 -CREATE OPERATOR = ( 7.254 - leftarg = epoint, 7.255 - rightarg = epoint, 7.256 - procedure = epoint_btree_eq, 7.257 - commutator = =, 7.258 - negator = <>, 7.259 - restrict = eqsel, 7.260 - join = eqjoinsel, 7.261 - merges 7.262 -); 7.263 - 7.264 -CREATE OPERATOR <> ( 7.265 - leftarg = epoint, 7.266 - rightarg = epoint, 7.267 - procedure = epoint_btree_eq, 7.268 - commutator = <>, 7.269 - negator = =, 7.270 - restrict = neqsel, 7.271 - join = neqjoinsel 7.272 -); 7.273 - 7.274 -CREATE OPERATOR >>>= ( 7.275 - leftarg = epoint, 7.276 - rightarg = epoint, 7.277 - procedure = epoint_btree_ge, 7.278 - commutator = <<<=, 7.279 - negator = <<<, 7.280 - restrict = scalargtsel, 7.281 - join = scalargtjoinsel 7.282 -); 7.283 - 7.284 -CREATE OPERATOR >>> ( 7.285 - leftarg = epoint, 7.286 - rightarg = epoint, 7.287 - procedure = epoint_btree_gt, 7.288 - commutator = <<<, 7.289 - negator = <<<=, 7.290 - restrict = scalargtsel, 7.291 - join = scalargtjoinsel 7.292 -); 7.293 - 7.294 -CREATE FUNCTION epoint_btree_cmp(epoint, epoint) 7.295 - RETURNS int4 7.296 - LANGUAGE C IMMUTABLE STRICT 7.297 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_cmp'; 7.298 - 7.299 -CREATE OPERATOR CLASS epoint_btree_ops 7.300 - DEFAULT FOR TYPE epoint USING btree AS 7.301 - OPERATOR 1 <<< , 7.302 - OPERATOR 2 <<<= , 7.303 - OPERATOR 3 = , 7.304 - OPERATOR 4 >>>= , 7.305 - OPERATOR 5 >>> , 7.306 - FUNCTION 1 epoint_btree_cmp(epoint, epoint); 7.307 - 7.308 --- end of B-tree support for epoint 7.309 - 7.310 --- begin of B-tree support for ebox 7.311 - 7.312 -CREATE FUNCTION ebox_btree_lt(ebox, ebox) 7.313 - RETURNS boolean 7.314 - LANGUAGE C IMMUTABLE STRICT 7.315 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_lt'; 7.316 - 7.317 -CREATE FUNCTION ebox_btree_le(ebox, ebox) 7.318 - RETURNS boolean 7.319 - LANGUAGE C IMMUTABLE STRICT 7.320 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_le'; 7.321 - 7.322 -CREATE FUNCTION ebox_btree_eq(ebox, ebox) 7.323 - RETURNS boolean 7.324 - LANGUAGE C IMMUTABLE STRICT 7.325 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_eq'; 7.326 - 7.327 -CREATE FUNCTION ebox_btree_ne(ebox, ebox) 7.328 - RETURNS boolean 7.329 - LANGUAGE C IMMUTABLE STRICT 7.330 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ne'; 7.331 - 7.332 -CREATE FUNCTION ebox_btree_ge(ebox, ebox) 7.333 - RETURNS boolean 7.334 - LANGUAGE C IMMUTABLE STRICT 7.335 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ge'; 7.336 - 7.337 -CREATE FUNCTION ebox_btree_gt(ebox, ebox) 7.338 - RETURNS boolean 7.339 - LANGUAGE C IMMUTABLE STRICT 7.340 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_gt'; 7.341 - 7.342 -CREATE OPERATOR <<< ( 7.343 - leftarg = ebox, 7.344 - rightarg = ebox, 7.345 - procedure = ebox_btree_lt, 7.346 - commutator = >>>, 7.347 - negator = >>>=, 7.348 - restrict = scalarltsel, 7.349 - join = scalarltjoinsel 7.350 -); 7.351 - 7.352 -CREATE OPERATOR <<<= ( 7.353 - leftarg = ebox, 7.354 - rightarg = ebox, 7.355 - procedure = ebox_btree_le, 7.356 - commutator = >>>=, 7.357 - negator = >>>, 7.358 - restrict = scalarltsel, 7.359 - join = scalarltjoinsel 7.360 -); 7.361 - 7.362 -CREATE OPERATOR = ( 7.363 - leftarg = ebox, 7.364 - rightarg = ebox, 7.365 - procedure = ebox_btree_eq, 7.366 - commutator = =, 7.367 - negator = <>, 7.368 - restrict = eqsel, 7.369 - join = eqjoinsel, 7.370 - merges 7.371 -); 7.372 - 7.373 -CREATE OPERATOR <> ( 7.374 - leftarg = ebox, 7.375 - rightarg = ebox, 7.376 - procedure = ebox_btree_eq, 7.377 - commutator = <>, 7.378 - negator = =, 7.379 - restrict = neqsel, 7.380 - join = neqjoinsel 7.381 -); 7.382 - 7.383 -CREATE OPERATOR >>>= ( 7.384 - leftarg = ebox, 7.385 - rightarg = ebox, 7.386 - procedure = ebox_btree_ge, 7.387 - commutator = <<<=, 7.388 - negator = <<<, 7.389 - restrict = scalargtsel, 7.390 - join = scalargtjoinsel 7.391 -); 7.392 - 7.393 -CREATE OPERATOR >>> ( 7.394 - leftarg = ebox, 7.395 - rightarg = ebox, 7.396 - procedure = ebox_btree_gt, 7.397 - commutator = <<<, 7.398 - negator = <<<=, 7.399 - restrict = scalargtsel, 7.400 - join = scalargtjoinsel 7.401 -); 7.402 - 7.403 -CREATE FUNCTION ebox_btree_cmp(ebox, ebox) 7.404 - RETURNS int4 7.405 - LANGUAGE C IMMUTABLE STRICT 7.406 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_cmp'; 7.407 - 7.408 -CREATE OPERATOR CLASS ebox_btree_ops 7.409 - DEFAULT FOR TYPE ebox USING btree AS 7.410 - OPERATOR 1 <<< , 7.411 - OPERATOR 2 <<<= , 7.412 - OPERATOR 3 = , 7.413 - OPERATOR 4 >>>= , 7.414 - OPERATOR 5 >>> , 7.415 - FUNCTION 1 ebox_btree_cmp(ebox, ebox); 7.416 - 7.417 --- end of B-tree support for ebox 7.418 - 7.419 --- begin of B-tree support for ecircle 7.420 - 7.421 -CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle) 7.422 - RETURNS boolean 7.423 - LANGUAGE C IMMUTABLE STRICT 7.424 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_lt'; 7.425 - 7.426 -CREATE FUNCTION ecircle_btree_le(ecircle, ecircle) 7.427 - RETURNS boolean 7.428 - LANGUAGE C IMMUTABLE STRICT 7.429 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_le'; 7.430 - 7.431 -CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle) 7.432 - RETURNS boolean 7.433 - LANGUAGE C IMMUTABLE STRICT 7.434 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_eq'; 7.435 - 7.436 -CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle) 7.437 - RETURNS boolean 7.438 - LANGUAGE C IMMUTABLE STRICT 7.439 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ne'; 7.440 - 7.441 -CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle) 7.442 - RETURNS boolean 7.443 - LANGUAGE C IMMUTABLE STRICT 7.444 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ge'; 7.445 - 7.446 -CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle) 7.447 - RETURNS boolean 7.448 - LANGUAGE C IMMUTABLE STRICT 7.449 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_gt'; 7.450 - 7.451 -CREATE OPERATOR <<< ( 7.452 - leftarg = ecircle, 7.453 - rightarg = ecircle, 7.454 - procedure = ecircle_btree_lt, 7.455 - commutator = >>>, 7.456 - negator = >>>=, 7.457 - restrict = scalarltsel, 7.458 - join = scalarltjoinsel 7.459 -); 7.460 - 7.461 -CREATE OPERATOR <<<= ( 7.462 - leftarg = ecircle, 7.463 - rightarg = ecircle, 7.464 - procedure = ecircle_btree_le, 7.465 - commutator = >>>=, 7.466 - negator = >>>, 7.467 - restrict = scalarltsel, 7.468 - join = scalarltjoinsel 7.469 -); 7.470 - 7.471 -CREATE OPERATOR = ( 7.472 - leftarg = ecircle, 7.473 - rightarg = ecircle, 7.474 - procedure = ecircle_btree_eq, 7.475 - commutator = =, 7.476 - negator = <>, 7.477 - restrict = eqsel, 7.478 - join = eqjoinsel, 7.479 - merges 7.480 -); 7.481 - 7.482 -CREATE OPERATOR <> ( 7.483 - leftarg = ecircle, 7.484 - rightarg = ecircle, 7.485 - procedure = ecircle_btree_eq, 7.486 - commutator = <>, 7.487 - negator = =, 7.488 - restrict = neqsel, 7.489 - join = neqjoinsel 7.490 -); 7.491 - 7.492 -CREATE OPERATOR >>>= ( 7.493 - leftarg = ecircle, 7.494 - rightarg = ecircle, 7.495 - procedure = ecircle_btree_ge, 7.496 - commutator = <<<=, 7.497 - negator = <<<, 7.498 - restrict = scalargtsel, 7.499 - join = scalargtjoinsel 7.500 -); 7.501 - 7.502 -CREATE OPERATOR >>> ( 7.503 - leftarg = ecircle, 7.504 - rightarg = ecircle, 7.505 - procedure = ecircle_btree_gt, 7.506 - commutator = <<<, 7.507 - negator = <<<=, 7.508 - restrict = scalargtsel, 7.509 - join = scalargtjoinsel 7.510 -); 7.511 - 7.512 -CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 7.513 - RETURNS int4 7.514 - LANGUAGE C IMMUTABLE STRICT 7.515 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_cmp'; 7.516 - 7.517 -CREATE OPERATOR CLASS ecircle_btree_ops 7.518 - DEFAULT FOR TYPE ecircle USING btree AS 7.519 - OPERATOR 1 <<< , 7.520 - OPERATOR 2 <<<= , 7.521 - OPERATOR 3 = , 7.522 - OPERATOR 4 >>>= , 7.523 - OPERATOR 5 >>> , 7.524 - FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle); 7.525 - 7.526 --- end of B-tree support for ecircle 7.527 - 7.528 - 7.529 ----------------- 7.530 --- type casts -- 7.531 ----------------- 7.532 - 7.533 -CREATE FUNCTION cast_epoint_to_ebox(epoint) 7.534 - RETURNS ebox 7.535 - LANGUAGE C IMMUTABLE STRICT 7.536 - AS '$libdir/latlon-v0009', 'pgl_epoint_to_ebox'; 7.537 - 7.538 -CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint); 7.539 - 7.540 -CREATE FUNCTION cast_epoint_to_ecircle(epoint) 7.541 - RETURNS ecircle 7.542 - LANGUAGE C IMMUTABLE STRICT 7.543 - AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecircle'; 7.544 - 7.545 -CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint); 7.546 - 7.547 -CREATE FUNCTION cast_epoint_to_ecluster(epoint) 7.548 - RETURNS ecluster 7.549 - LANGUAGE C IMMUTABLE STRICT 7.550 - AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecluster'; 7.551 - 7.552 -CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint); 7.553 - 7.554 -CREATE FUNCTION cast_ebox_to_ecluster(ebox) 7.555 - RETURNS ecluster 7.556 - LANGUAGE C IMMUTABLE STRICT 7.557 - AS '$libdir/latlon-v0009', 'pgl_ebox_to_ecluster'; 7.558 - 7.559 -CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox); 7.560 - 7.561 - 7.562 ---------------------------- 7.563 --- constructor functions -- 7.564 ---------------------------- 7.565 - 7.566 -CREATE FUNCTION epoint(float8, float8) 7.567 - RETURNS epoint 7.568 - LANGUAGE C IMMUTABLE STRICT 7.569 - AS '$libdir/latlon-v0009', 'pgl_create_epoint'; 7.570 - 7.571 -CREATE FUNCTION epoint_latlon(float8, float8) 7.572 - RETURNS epoint 7.573 - LANGUAGE SQL IMMUTABLE STRICT AS $$ 7.574 - SELECT epoint($1, $2) 7.575 - $$; 7.576 - 7.577 -CREATE FUNCTION epoint_lonlat(float8, float8) 7.578 - RETURNS epoint 7.579 - LANGUAGE SQL IMMUTABLE STRICT AS $$ 7.580 - SELECT epoint($2, $1) 7.581 - $$; 7.582 - 7.583 -CREATE FUNCTION epoint_with_sample_count(epoint, int4) 7.584 - RETURNS epoint_with_sample_count 7.585 - LANGUAGE C IMMUTABLE STRICT 7.586 - AS '$libdir/latlon-v0009', 'pgl_create_epoint_with_sample_count'; 7.587 - 7.588 -CREATE FUNCTION empty_ebox() 7.589 - RETURNS ebox 7.590 - LANGUAGE C IMMUTABLE STRICT 7.591 - AS '$libdir/latlon-v0009', 'pgl_create_empty_ebox'; 7.592 - 7.593 -CREATE FUNCTION ebox(float8, float8, float8, float8) 7.594 - RETURNS ebox 7.595 - LANGUAGE C IMMUTABLE STRICT 7.596 - AS '$libdir/latlon-v0009', 'pgl_create_ebox'; 7.597 - 7.598 -CREATE FUNCTION ebox(epoint, epoint) 7.599 - RETURNS ebox 7.600 - LANGUAGE C IMMUTABLE STRICT 7.601 - AS '$libdir/latlon-v0009', 'pgl_create_ebox_from_epoints'; 7.602 - 7.603 -CREATE FUNCTION ecircle(float8, float8, float8) 7.604 - RETURNS ecircle 7.605 - LANGUAGE C IMMUTABLE STRICT 7.606 - AS '$libdir/latlon-v0009', 'pgl_create_ecircle'; 7.607 - 7.608 -CREATE FUNCTION ecircle(epoint, float8) 7.609 - RETURNS ecircle 7.610 - LANGUAGE C IMMUTABLE STRICT 7.611 - AS '$libdir/latlon-v0009', 'pgl_create_ecircle_from_epoint'; 7.612 - 7.613 -CREATE FUNCTION ecluster_concat(ecluster[]) 7.614 - RETURNS ecluster 7.615 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.616 - SELECT array_to_string($1, ' ')::ecluster 7.617 - $$; 7.618 - 7.619 -CREATE FUNCTION ecluster_concat(ecluster, ecluster) 7.620 - RETURNS ecluster 7.621 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.622 - SELECT ($1::text || ' ' || $2::text)::ecluster 7.623 - $$; 7.624 - 7.625 -CREATE FUNCTION ecluster_create_multipoint(epoint[]) 7.626 - RETURNS ecluster 7.627 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.628 - SELECT 7.629 - array_to_string(array_agg('point (' || unnest || ')'), ' ')::ecluster 7.630 - FROM unnest($1) 7.631 - $$; 7.632 - 7.633 -CREATE FUNCTION ecluster_create_path(epoint[]) 7.634 - RETURNS ecluster 7.635 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.636 - SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 7.637 - ('path (' || array_to_string($1, ' ') || ')')::ecluster 7.638 - END 7.639 - FROM array_to_string($1, ' ') AS "str" 7.640 - $$; 7.641 - 7.642 -CREATE FUNCTION ecluster_create_outline(epoint[]) 7.643 - RETURNS ecluster 7.644 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.645 - SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 7.646 - ('outline (' || array_to_string($1, ' ') || ')')::ecluster 7.647 - END 7.648 - FROM array_to_string($1, ' ') AS "str" 7.649 - $$; 7.650 - 7.651 -CREATE FUNCTION ecluster_create_polygon(epoint[]) 7.652 - RETURNS ecluster 7.653 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.654 - SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 7.655 - ('polygon (' || array_to_string($1, ' ') || ')')::ecluster 7.656 - END 7.657 - FROM array_to_string($1, ' ') AS "str" 7.658 - $$; 7.659 - 7.660 - 7.661 ----------------------- 7.662 --- getter functions -- 7.663 ----------------------- 7.664 - 7.665 -CREATE FUNCTION latitude(epoint) 7.666 - RETURNS float8 7.667 - LANGUAGE C IMMUTABLE STRICT 7.668 - AS '$libdir/latlon-v0009', 'pgl_epoint_lat'; 7.669 - 7.670 -CREATE FUNCTION longitude(epoint) 7.671 - RETURNS float8 7.672 - LANGUAGE C IMMUTABLE STRICT 7.673 - AS '$libdir/latlon-v0009', 'pgl_epoint_lon'; 7.674 - 7.675 -CREATE FUNCTION min_latitude(ebox) 7.676 - RETURNS float8 7.677 - LANGUAGE C IMMUTABLE STRICT 7.678 - AS '$libdir/latlon-v0009', 'pgl_ebox_lat_min'; 7.679 - 7.680 -CREATE FUNCTION max_latitude(ebox) 7.681 - RETURNS float8 7.682 - LANGUAGE C IMMUTABLE STRICT 7.683 - AS '$libdir/latlon-v0009', 'pgl_ebox_lat_max'; 7.684 - 7.685 -CREATE FUNCTION min_longitude(ebox) 7.686 - RETURNS float8 7.687 - LANGUAGE C IMMUTABLE STRICT 7.688 - AS '$libdir/latlon-v0009', 'pgl_ebox_lon_min'; 7.689 - 7.690 -CREATE FUNCTION max_longitude(ebox) 7.691 - RETURNS float8 7.692 - LANGUAGE C IMMUTABLE STRICT 7.693 - AS '$libdir/latlon-v0009', 'pgl_ebox_lon_max'; 7.694 - 7.695 -CREATE FUNCTION center(ecircle) 7.696 - RETURNS epoint 7.697 - LANGUAGE C IMMUTABLE STRICT 7.698 - AS '$libdir/latlon-v0009', 'pgl_ecircle_center'; 7.699 - 7.700 -CREATE FUNCTION radius(ecircle) 7.701 - RETURNS float8 7.702 - LANGUAGE C IMMUTABLE STRICT 7.703 - AS '$libdir/latlon-v0009', 'pgl_ecircle_radius'; 7.704 - 7.705 -CREATE FUNCTION ecluster_extract_points(ecluster) 7.706 - RETURNS SETOF epoint 7.707 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.708 - SELECT "match"[2]::epoint 7.709 - FROM regexp_matches($1::text, e'(^| )point \\(([^)]+)\\)', 'g') AS "match" 7.710 - $$; 7.711 - 7.712 -CREATE FUNCTION ecluster_extract_paths(ecluster) 7.713 - RETURNS SETOF epoint[] 7.714 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.715 - SELECT ( 7.716 - SELECT array_agg("m2"[1]::epoint) 7.717 - FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 7.718 - ) 7.719 - FROM regexp_matches($1::text, e'(^| )path \\(([^)]+)\\)', 'g') AS "m1" 7.720 - $$; 7.721 - 7.722 -CREATE FUNCTION ecluster_extract_outlines(ecluster) 7.723 - RETURNS SETOF epoint[] 7.724 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.725 - SELECT ( 7.726 - SELECT array_agg("m2"[1]::epoint) 7.727 - FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 7.728 - ) 7.729 - FROM regexp_matches($1::text, e'(^| )outline \\(([^)]+)\\)', 'g') AS "m1" 7.730 - $$; 7.731 - 7.732 -CREATE FUNCTION ecluster_extract_polygons(ecluster) 7.733 - RETURNS SETOF epoint[] 7.734 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.735 - SELECT ( 7.736 - SELECT array_agg("m2"[1]::epoint) 7.737 - FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 7.738 - ) 7.739 - FROM regexp_matches($1::text, e'(^| )polygon \\(([^)]+)\\)', 'g') AS "m1" 7.740 - $$; 7.741 - 7.742 - 7.743 ---------------- 7.744 --- operators -- 7.745 ---------------- 7.746 - 7.747 -CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 7.748 - RETURNS boolean 7.749 - LANGUAGE C IMMUTABLE STRICT 7.750 - AS '$libdir/latlon-v0009', 'pgl_epoint_ebox_overlap'; 7.751 - 7.752 -CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 7.753 - RETURNS boolean 7.754 - LANGUAGE C IMMUTABLE STRICT 7.755 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_overlap'; 7.756 - 7.757 -CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 7.758 - RETURNS boolean 7.759 - LANGUAGE C IMMUTABLE STRICT 7.760 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_overlap'; 7.761 - 7.762 -CREATE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 7.763 - RETURNS boolean 7.764 - LANGUAGE C IMMUTABLE STRICT 7.765 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_may_overlap'; 7.766 - 7.767 -CREATE FUNCTION ebox_overlap_proc(ebox, ebox) 7.768 - RETURNS boolean 7.769 - LANGUAGE C IMMUTABLE STRICT 7.770 - AS '$libdir/latlon-v0009', 'pgl_ebox_overlap'; 7.771 - 7.772 -CREATE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 7.773 - RETURNS boolean 7.774 - LANGUAGE C IMMUTABLE STRICT 7.775 - AS '$libdir/latlon-v0009', 'pgl_ebox_ecircle_may_overlap'; 7.776 - 7.777 -CREATE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 7.778 - RETURNS boolean 7.779 - LANGUAGE C IMMUTABLE STRICT 7.780 - AS '$libdir/latlon-v0009', 'pgl_ebox_ecluster_may_overlap'; 7.781 - 7.782 -CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 7.783 - RETURNS boolean 7.784 - LANGUAGE C IMMUTABLE STRICT 7.785 - AS '$libdir/latlon-v0009', 'pgl_ecircle_overlap'; 7.786 - 7.787 -CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 7.788 - RETURNS boolean 7.789 - LANGUAGE C IMMUTABLE STRICT 7.790 - AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_overlap'; 7.791 - 7.792 -CREATE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 7.793 - RETURNS boolean 7.794 - LANGUAGE C IMMUTABLE STRICT 7.795 - AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_may_overlap'; 7.796 - 7.797 -CREATE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 7.798 - RETURNS boolean 7.799 - LANGUAGE C IMMUTABLE STRICT 7.800 - AS '$libdir/latlon-v0009', 'pgl_ecluster_overlap'; 7.801 - 7.802 -CREATE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 7.803 - RETURNS boolean 7.804 - LANGUAGE C IMMUTABLE STRICT 7.805 - AS '$libdir/latlon-v0009', 'pgl_ecluster_may_overlap'; 7.806 - 7.807 -CREATE FUNCTION ecluster_contains_proc(ecluster, ecluster) 7.808 - RETURNS boolean 7.809 - LANGUAGE C IMMUTABLE STRICT 7.810 - AS '$libdir/latlon-v0009', 'pgl_ecluster_contains'; 7.811 - 7.812 -CREATE FUNCTION epoint_distance_proc(epoint, epoint) 7.813 - RETURNS float8 7.814 - LANGUAGE C IMMUTABLE STRICT 7.815 - AS '$libdir/latlon-v0009', 'pgl_epoint_distance'; 7.816 - 7.817 -CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 7.818 - RETURNS float8 7.819 - LANGUAGE C IMMUTABLE STRICT 7.820 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_distance'; 7.821 - 7.822 -CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 7.823 - RETURNS float8 7.824 - LANGUAGE C IMMUTABLE STRICT 7.825 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_distance'; 7.826 - 7.827 -CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle) 7.828 - RETURNS float8 7.829 - LANGUAGE C IMMUTABLE STRICT 7.830 - AS '$libdir/latlon-v0009', 'pgl_ecircle_distance'; 7.831 - 7.832 -CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 7.833 - RETURNS float8 7.834 - LANGUAGE C IMMUTABLE STRICT 7.835 - AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_distance'; 7.836 - 7.837 -CREATE FUNCTION ecluster_distance_proc(ecluster, ecluster) 7.838 - RETURNS float8 7.839 - LANGUAGE C IMMUTABLE STRICT 7.840 - AS '$libdir/latlon-v0009', 'pgl_ecluster_distance'; 7.841 - 7.842 -CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) 7.843 - RETURNS float8 7.844 - LANGUAGE C IMMUTABLE STRICT 7.845 - AS '$libdir/latlon-v0009', 'pgl_ecluster_epoint_sc_fair_distance'; 7.846 - 7.847 -CREATE OPERATOR && ( 7.848 - leftarg = epoint, 7.849 - rightarg = ebox, 7.850 - procedure = epoint_ebox_overlap_proc, 7.851 - commutator = &&, 7.852 - restrict = areasel, 7.853 - join = areajoinsel 7.854 -); 7.855 - 7.856 -CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint) 7.857 - RETURNS boolean 7.858 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 7.859 - 7.860 -CREATE OPERATOR && ( 7.861 - leftarg = ebox, 7.862 - rightarg = epoint, 7.863 - procedure = epoint_ebox_overlap_commutator, 7.864 - commutator = &&, 7.865 - restrict = areasel, 7.866 - join = areajoinsel 7.867 -); 7.868 - 7.869 -CREATE OPERATOR && ( 7.870 - leftarg = epoint, 7.871 - rightarg = ecircle, 7.872 - procedure = epoint_ecircle_overlap_proc, 7.873 - commutator = &&, 7.874 - restrict = areasel, 7.875 - join = areajoinsel 7.876 -); 7.877 - 7.878 -CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint) 7.879 - RETURNS boolean 7.880 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 7.881 - 7.882 -CREATE OPERATOR && ( 7.883 - leftarg = ecircle, 7.884 - rightarg = epoint, 7.885 - procedure = epoint_ecircle_overlap_commutator, 7.886 - commutator = &&, 7.887 - restrict = areasel, 7.888 - join = areajoinsel 7.889 -); 7.890 - 7.891 -CREATE OPERATOR && ( 7.892 - leftarg = epoint, 7.893 - rightarg = ecluster, 7.894 - procedure = epoint_ecluster_overlap_proc, 7.895 - commutator = &&, 7.896 - restrict = areasel, 7.897 - join = areajoinsel 7.898 -); 7.899 - 7.900 -CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint) 7.901 - RETURNS boolean 7.902 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 7.903 - 7.904 -CREATE OPERATOR && ( 7.905 - leftarg = ecluster, 7.906 - rightarg = epoint, 7.907 - procedure = epoint_ecluster_overlap_commutator, 7.908 - commutator = &&, 7.909 - restrict = areasel, 7.910 - join = areajoinsel 7.911 -); 7.912 - 7.913 -CREATE OPERATOR && ( 7.914 - leftarg = ebox, 7.915 - rightarg = ebox, 7.916 - procedure = ebox_overlap_proc, 7.917 - commutator = &&, 7.918 - restrict = areasel, 7.919 - join = areajoinsel 7.920 -); 7.921 - 7.922 -CREATE OPERATOR && ( 7.923 - leftarg = ecircle, 7.924 - rightarg = ecircle, 7.925 - procedure = ecircle_overlap_proc, 7.926 - commutator = &&, 7.927 - restrict = areasel, 7.928 - join = areajoinsel 7.929 -); 7.930 - 7.931 -CREATE OPERATOR && ( 7.932 - leftarg = ecircle, 7.933 - rightarg = ecluster, 7.934 - procedure = ecircle_ecluster_overlap_proc, 7.935 - commutator = &&, 7.936 - restrict = areasel, 7.937 - join = areajoinsel 7.938 -); 7.939 - 7.940 -CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle) 7.941 - RETURNS boolean 7.942 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 7.943 - 7.944 -CREATE OPERATOR && ( 7.945 - leftarg = ecluster, 7.946 - rightarg = ecircle, 7.947 - procedure = ecircle_ecluster_overlap_commutator, 7.948 - commutator = &&, 7.949 - restrict = areasel, 7.950 - join = areajoinsel 7.951 -); 7.952 - 7.953 -CREATE OPERATOR && ( 7.954 - leftarg = ecluster, 7.955 - rightarg = ecluster, 7.956 - procedure = ecluster_overlap_proc, 7.957 - commutator = &&, 7.958 - restrict = areasel, 7.959 - join = areajoinsel 7.960 -); 7.961 - 7.962 -CREATE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle) 7.963 - RETURNS boolean 7.964 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2'; 7.965 - 7.966 -CREATE OPERATOR && ( 7.967 - leftarg = ebox, 7.968 - rightarg = ecircle, 7.969 - procedure = ebox_ecircle_overlap_castwrap, 7.970 - commutator = &&, 7.971 - restrict = areasel, 7.972 - join = areajoinsel 7.973 -); 7.974 - 7.975 -CREATE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox) 7.976 - RETURNS boolean 7.977 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster'; 7.978 - 7.979 -CREATE OPERATOR && ( 7.980 - leftarg = ecircle, 7.981 - rightarg = ebox, 7.982 - procedure = ebox_ecircle_overlap_castwrap, 7.983 - commutator = &&, 7.984 - restrict = areasel, 7.985 - join = areajoinsel 7.986 -); 7.987 - 7.988 -CREATE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster) 7.989 - RETURNS boolean 7.990 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2'; 7.991 - 7.992 -CREATE OPERATOR && ( 7.993 - leftarg = ebox, 7.994 - rightarg = ecluster, 7.995 - procedure = ebox_ecluster_overlap_castwrap, 7.996 - commutator = &&, 7.997 - restrict = areasel, 7.998 - join = areajoinsel 7.999 -); 7.1000 - 7.1001 -CREATE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox) 7.1002 - RETURNS boolean 7.1003 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster'; 7.1004 - 7.1005 -CREATE OPERATOR && ( 7.1006 - leftarg = ecluster, 7.1007 - rightarg = ebox, 7.1008 - procedure = ebox_ecluster_overlap_castwrap, 7.1009 - commutator = &&, 7.1010 - restrict = areasel, 7.1011 - join = areajoinsel 7.1012 -); 7.1013 - 7.1014 -CREATE OPERATOR &&+ ( 7.1015 - leftarg = epoint, 7.1016 - rightarg = ecluster, 7.1017 - procedure = epoint_ecluster_may_overlap_proc, 7.1018 - commutator = &&+, 7.1019 - restrict = areasel, 7.1020 - join = areajoinsel 7.1021 -); 7.1022 - 7.1023 -CREATE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint) 7.1024 - RETURNS boolean 7.1025 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 7.1026 - 7.1027 -CREATE OPERATOR &&+ ( 7.1028 - leftarg = ecluster, 7.1029 - rightarg = epoint, 7.1030 - procedure = epoint_ecluster_may_overlap_commutator, 7.1031 - commutator = &&+, 7.1032 - restrict = areasel, 7.1033 - join = areajoinsel 7.1034 -); 7.1035 - 7.1036 -CREATE OPERATOR &&+ ( 7.1037 - leftarg = ebox, 7.1038 - rightarg = ecircle, 7.1039 - procedure = ebox_ecircle_may_overlap_proc, 7.1040 - commutator = &&+, 7.1041 - restrict = areasel, 7.1042 - join = areajoinsel 7.1043 -); 7.1044 - 7.1045 -CREATE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox) 7.1046 - RETURNS boolean 7.1047 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 7.1048 - 7.1049 -CREATE OPERATOR &&+ ( 7.1050 - leftarg = ecircle, 7.1051 - rightarg = ebox, 7.1052 - procedure = ebox_ecircle_may_overlap_commutator, 7.1053 - commutator = &&+, 7.1054 - restrict = areasel, 7.1055 - join = areajoinsel 7.1056 -); 7.1057 - 7.1058 -CREATE OPERATOR &&+ ( 7.1059 - leftarg = ebox, 7.1060 - rightarg = ecluster, 7.1061 - procedure = ebox_ecluster_may_overlap_proc, 7.1062 - commutator = &&+, 7.1063 - restrict = areasel, 7.1064 - join = areajoinsel 7.1065 -); 7.1066 - 7.1067 -CREATE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox) 7.1068 - RETURNS boolean 7.1069 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 7.1070 - 7.1071 -CREATE OPERATOR &&+ ( 7.1072 - leftarg = ecluster, 7.1073 - rightarg = ebox, 7.1074 - procedure = ebox_ecluster_may_overlap_commutator, 7.1075 - commutator = &&+, 7.1076 - restrict = areasel, 7.1077 - join = areajoinsel 7.1078 -); 7.1079 - 7.1080 -CREATE OPERATOR &&+ ( 7.1081 - leftarg = ecircle, 7.1082 - rightarg = ecluster, 7.1083 - procedure = ecircle_ecluster_may_overlap_proc, 7.1084 - commutator = &&+, 7.1085 - restrict = areasel, 7.1086 - join = areajoinsel 7.1087 -); 7.1088 - 7.1089 -CREATE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle) 7.1090 - RETURNS boolean 7.1091 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 7.1092 - 7.1093 -CREATE OPERATOR &&+ ( 7.1094 - leftarg = ecluster, 7.1095 - rightarg = ecircle, 7.1096 - procedure = ecircle_ecluster_may_overlap_commutator, 7.1097 - commutator = &&+, 7.1098 - restrict = areasel, 7.1099 - join = areajoinsel 7.1100 -); 7.1101 - 7.1102 -CREATE OPERATOR &&+ ( 7.1103 - leftarg = ecluster, 7.1104 - rightarg = ecluster, 7.1105 - procedure = ecluster_may_overlap_proc, 7.1106 - commutator = &&+, 7.1107 - restrict = areasel, 7.1108 - join = areajoinsel 7.1109 -); 7.1110 - 7.1111 -CREATE OPERATOR @> ( 7.1112 - leftarg = ebox, 7.1113 - rightarg = epoint, 7.1114 - procedure = epoint_ebox_overlap_commutator, 7.1115 - commutator = <@, 7.1116 - restrict = areasel, 7.1117 - join = areajoinsel 7.1118 -); 7.1119 - 7.1120 -CREATE OPERATOR <@ ( 7.1121 - leftarg = epoint, 7.1122 - rightarg = ebox, 7.1123 - procedure = epoint_ebox_overlap_proc, 7.1124 - commutator = @>, 7.1125 - restrict = areasel, 7.1126 - join = areajoinsel 7.1127 -); 7.1128 - 7.1129 -CREATE OPERATOR @> ( 7.1130 - leftarg = ecluster, 7.1131 - rightarg = epoint, 7.1132 - procedure = epoint_ecluster_overlap_commutator, 7.1133 - commutator = <@, 7.1134 - restrict = areasel, 7.1135 - join = areajoinsel 7.1136 -); 7.1137 - 7.1138 -CREATE OPERATOR <@ ( 7.1139 - leftarg = epoint, 7.1140 - rightarg = ecluster, 7.1141 - procedure = epoint_ecluster_overlap_proc, 7.1142 - commutator = <@, 7.1143 - restrict = areasel, 7.1144 - join = areajoinsel 7.1145 -); 7.1146 - 7.1147 -CREATE OPERATOR @> ( 7.1148 - leftarg = ecluster, 7.1149 - rightarg = ecluster, 7.1150 - procedure = ecluster_contains_proc, 7.1151 - commutator = <@, 7.1152 - restrict = areasel, 7.1153 - join = areajoinsel 7.1154 -); 7.1155 - 7.1156 -CREATE FUNCTION ecluster_contains_commutator(ecluster, ecluster) 7.1157 - RETURNS boolean 7.1158 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1'; 7.1159 - 7.1160 -CREATE OPERATOR <@ ( 7.1161 - leftarg = ecluster, 7.1162 - rightarg = ecluster, 7.1163 - procedure = ecluster_contains_commutator, 7.1164 - commutator = @>, 7.1165 - restrict = areasel, 7.1166 - join = areajoinsel 7.1167 -); 7.1168 - 7.1169 -CREATE FUNCTION ebox_contains_castwrap(ebox, ebox) 7.1170 - RETURNS boolean 7.1171 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2::ecluster'; 7.1172 - 7.1173 -CREATE OPERATOR @> ( 7.1174 - leftarg = ebox, 7.1175 - rightarg = ebox, 7.1176 - procedure = ebox_contains_castwrap, 7.1177 - commutator = <@, 7.1178 - restrict = areasel, 7.1179 - join = areajoinsel 7.1180 -); 7.1181 - 7.1182 -CREATE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox) 7.1183 - RETURNS boolean 7.1184 - LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1::ecluster'; 7.1185 - 7.1186 -CREATE OPERATOR <@ ( 7.1187 - leftarg = ebox, 7.1188 - rightarg = ebox, 7.1189 - procedure = ebox_contains_swapped_castwrap, 7.1190 - commutator = @>, 7.1191 - restrict = areasel, 7.1192 - join = areajoinsel 7.1193 -); 7.1194 - 7.1195 -CREATE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster) 7.1196 - RETURNS boolean 7.1197 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2'; 7.1198 - 7.1199 -CREATE OPERATOR @> ( 7.1200 - leftarg = ebox, 7.1201 - rightarg = ecluster, 7.1202 - procedure = ebox_ecluster_contains_castwrap, 7.1203 - commutator = <@, 7.1204 - restrict = areasel, 7.1205 - join = areajoinsel 7.1206 -); 7.1207 - 7.1208 -CREATE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox) 7.1209 - RETURNS boolean 7.1210 - LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1'; 7.1211 - 7.1212 -CREATE OPERATOR <@ ( 7.1213 - leftarg = ecluster, 7.1214 - rightarg = ebox, 7.1215 - procedure = ebox_ecluster_contains_castwrap, 7.1216 - commutator = @>, 7.1217 - restrict = areasel, 7.1218 - join = areajoinsel 7.1219 -); 7.1220 - 7.1221 -CREATE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox) 7.1222 - RETURNS boolean 7.1223 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 @> $2::ecluster'; 7.1224 - 7.1225 -CREATE OPERATOR @> ( 7.1226 - leftarg = ecluster, 7.1227 - rightarg = ebox, 7.1228 - procedure = ecluster_ebox_contains_castwrap, 7.1229 - commutator = <@, 7.1230 - restrict = areasel, 7.1231 - join = areajoinsel 7.1232 -); 7.1233 - 7.1234 -CREATE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster) 7.1235 - RETURNS boolean 7.1236 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1::ecluster'; 7.1237 - 7.1238 -CREATE OPERATOR <@ ( 7.1239 - leftarg = ebox, 7.1240 - rightarg = ecluster, 7.1241 - procedure = ecluster_ebox_contains_castwrap, 7.1242 - commutator = @>, 7.1243 - restrict = areasel, 7.1244 - join = areajoinsel 7.1245 -); 7.1246 - 7.1247 -CREATE OPERATOR <-> ( 7.1248 - leftarg = epoint, 7.1249 - rightarg = epoint, 7.1250 - procedure = epoint_distance_proc, 7.1251 - commutator = <-> 7.1252 -); 7.1253 - 7.1254 -CREATE OPERATOR <-> ( 7.1255 - leftarg = epoint, 7.1256 - rightarg = ecircle, 7.1257 - procedure = epoint_ecircle_distance_proc, 7.1258 - commutator = <-> 7.1259 -); 7.1260 - 7.1261 -CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint) 7.1262 - RETURNS float8 7.1263 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 7.1264 - 7.1265 -CREATE OPERATOR <-> ( 7.1266 - leftarg = ecircle, 7.1267 - rightarg = epoint, 7.1268 - procedure = epoint_ecircle_distance_commutator, 7.1269 - commutator = <-> 7.1270 -); 7.1271 - 7.1272 -CREATE OPERATOR <-> ( 7.1273 - leftarg = epoint, 7.1274 - rightarg = ecluster, 7.1275 - procedure = epoint_ecluster_distance_proc, 7.1276 - commutator = <-> 7.1277 -); 7.1278 - 7.1279 -CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint) 7.1280 - RETURNS float8 7.1281 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 7.1282 - 7.1283 -CREATE OPERATOR <-> ( 7.1284 - leftarg = ecluster, 7.1285 - rightarg = epoint, 7.1286 - procedure = epoint_ecluster_distance_commutator, 7.1287 - commutator = <-> 7.1288 -); 7.1289 - 7.1290 -CREATE OPERATOR <-> ( 7.1291 - leftarg = ecircle, 7.1292 - rightarg = ecircle, 7.1293 - procedure = ecircle_distance_proc, 7.1294 - commutator = <-> 7.1295 -); 7.1296 - 7.1297 -CREATE OPERATOR <-> ( 7.1298 - leftarg = ecircle, 7.1299 - rightarg = ecluster, 7.1300 - procedure = ecircle_ecluster_distance_proc, 7.1301 - commutator = <-> 7.1302 -); 7.1303 - 7.1304 -CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle) 7.1305 - RETURNS float8 7.1306 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 7.1307 - 7.1308 -CREATE OPERATOR <-> ( 7.1309 - leftarg = ecluster, 7.1310 - rightarg = ecircle, 7.1311 - procedure = ecircle_ecluster_distance_commutator, 7.1312 - commutator = <-> 7.1313 -); 7.1314 - 7.1315 -CREATE OPERATOR <-> ( 7.1316 - leftarg = ecluster, 7.1317 - rightarg = ecluster, 7.1318 - procedure = ecluster_distance_proc, 7.1319 - commutator = <-> 7.1320 -); 7.1321 - 7.1322 -CREATE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox) 7.1323 - RETURNS float8 7.1324 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 7.1325 - 7.1326 -CREATE OPERATOR <-> ( 7.1327 - leftarg = epoint, 7.1328 - rightarg = ebox, 7.1329 - procedure = epoint_ebox_distance_castwrap, 7.1330 - commutator = <-> 7.1331 -); 7.1332 - 7.1333 -CREATE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint) 7.1334 - RETURNS float8 7.1335 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 7.1336 - 7.1337 -CREATE OPERATOR <-> ( 7.1338 - leftarg = ebox, 7.1339 - rightarg = epoint, 7.1340 - procedure = epoint_ebox_distance_castwrap, 7.1341 - commutator = <-> 7.1342 -); 7.1343 - 7.1344 -CREATE FUNCTION ebox_distance_castwrap(ebox, ebox) 7.1345 - RETURNS float8 7.1346 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2::ecluster'; 7.1347 - 7.1348 -CREATE OPERATOR <-> ( 7.1349 - leftarg = ebox, 7.1350 - rightarg = ebox, 7.1351 - procedure = ebox_distance_castwrap, 7.1352 - commutator = <-> 7.1353 -); 7.1354 - 7.1355 -CREATE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle) 7.1356 - RETURNS float8 7.1357 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 7.1358 - 7.1359 -CREATE OPERATOR <-> ( 7.1360 - leftarg = ebox, 7.1361 - rightarg = ecircle, 7.1362 - procedure = ebox_ecircle_distance_castwrap, 7.1363 - commutator = <-> 7.1364 -); 7.1365 - 7.1366 -CREATE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox) 7.1367 - RETURNS float8 7.1368 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 7.1369 - 7.1370 -CREATE OPERATOR <-> ( 7.1371 - leftarg = ecircle, 7.1372 - rightarg = ebox, 7.1373 - procedure = ebox_ecircle_distance_castwrap, 7.1374 - commutator = <-> 7.1375 -); 7.1376 - 7.1377 -CREATE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster) 7.1378 - RETURNS float8 7.1379 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 7.1380 - 7.1381 -CREATE OPERATOR <-> ( 7.1382 - leftarg = ebox, 7.1383 - rightarg = ecluster, 7.1384 - procedure = ebox_ecluster_distance_castwrap, 7.1385 - commutator = <-> 7.1386 -); 7.1387 - 7.1388 -CREATE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox) 7.1389 - RETURNS float8 7.1390 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 7.1391 - 7.1392 -CREATE OPERATOR <-> ( 7.1393 - leftarg = ecluster, 7.1394 - rightarg = ebox, 7.1395 - procedure = ebox_ecluster_distance_castwrap, 7.1396 - commutator = <-> 7.1397 -); 7.1398 - 7.1399 -CREATE OPERATOR <=> ( 7.1400 - leftarg = ecluster, 7.1401 - rightarg = epoint_with_sample_count, 7.1402 - procedure = fair_distance_operator_proc 7.1403 -); 7.1404 - 7.1405 - 7.1406 ----------------- 7.1407 --- GiST index -- 7.1408 ----------------- 7.1409 - 7.1410 -CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 7.1411 - RETURNS boolean 7.1412 - LANGUAGE C STRICT 7.1413 - AS '$libdir/latlon-v0009', 'pgl_gist_consistent'; 7.1414 - 7.1415 -CREATE FUNCTION pgl_gist_union(internal, internal) 7.1416 - RETURNS internal 7.1417 - LANGUAGE C STRICT 7.1418 - AS '$libdir/latlon-v0009', 'pgl_gist_union'; 7.1419 - 7.1420 -CREATE FUNCTION pgl_gist_compress_epoint(internal) 7.1421 - RETURNS internal 7.1422 - LANGUAGE C STRICT 7.1423 - AS '$libdir/latlon-v0009', 'pgl_gist_compress_epoint'; 7.1424 - 7.1425 -CREATE FUNCTION pgl_gist_compress_ecircle(internal) 7.1426 - RETURNS internal 7.1427 - LANGUAGE C STRICT 7.1428 - AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecircle'; 7.1429 - 7.1430 -CREATE FUNCTION pgl_gist_compress_ecluster(internal) 7.1431 - RETURNS internal 7.1432 - LANGUAGE C STRICT 7.1433 - AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecluster'; 7.1434 - 7.1435 -CREATE FUNCTION pgl_gist_decompress(internal) 7.1436 - RETURNS internal 7.1437 - LANGUAGE C STRICT 7.1438 - AS '$libdir/latlon-v0009', 'pgl_gist_decompress'; 7.1439 - 7.1440 -CREATE FUNCTION pgl_gist_penalty(internal, internal, internal) 7.1441 - RETURNS internal 7.1442 - LANGUAGE C STRICT 7.1443 - AS '$libdir/latlon-v0009', 'pgl_gist_penalty'; 7.1444 - 7.1445 -CREATE FUNCTION pgl_gist_picksplit(internal, internal) 7.1446 - RETURNS internal 7.1447 - LANGUAGE C STRICT 7.1448 - AS '$libdir/latlon-v0009', 'pgl_gist_picksplit'; 7.1449 - 7.1450 -CREATE FUNCTION pgl_gist_same(internal, internal, internal) 7.1451 - RETURNS internal 7.1452 - LANGUAGE C STRICT 7.1453 - AS '$libdir/latlon-v0009', 'pgl_gist_same'; 7.1454 - 7.1455 -CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 7.1456 - RETURNS internal 7.1457 - LANGUAGE C STRICT 7.1458 - AS '$libdir/latlon-v0009', 'pgl_gist_distance'; 7.1459 - 7.1460 -CREATE OPERATOR CLASS epoint_ops 7.1461 - DEFAULT FOR TYPE epoint USING gist AS 7.1462 - OPERATOR 11 = , 7.1463 - OPERATOR 22 && (epoint, ebox), 7.1464 - OPERATOR 222 <@ (epoint, ebox), 7.1465 - OPERATOR 23 && (epoint, ecircle), 7.1466 - OPERATOR 24 && (epoint, ecluster), 7.1467 - OPERATOR 124 &&+ (epoint, ecluster), 7.1468 - OPERATOR 224 <@ (epoint, ecluster), 7.1469 - OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 7.1470 - OPERATOR 32 <-> (epoint, ebox) FOR ORDER BY float_ops, 7.1471 - OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 7.1472 - OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 7.1473 - FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 7.1474 - FUNCTION 2 pgl_gist_union(internal, internal), 7.1475 - FUNCTION 3 pgl_gist_compress_epoint(internal), 7.1476 - FUNCTION 4 pgl_gist_decompress(internal), 7.1477 - FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 7.1478 - FUNCTION 6 pgl_gist_picksplit(internal, internal), 7.1479 - FUNCTION 7 pgl_gist_same(internal, internal, internal), 7.1480 - FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 7.1481 - STORAGE ekey_point; 7.1482 - 7.1483 -CREATE OPERATOR CLASS ecircle_ops 7.1484 - DEFAULT FOR TYPE ecircle USING gist AS 7.1485 - OPERATOR 13 = , 7.1486 - OPERATOR 21 && (ecircle, epoint), 7.1487 - OPERATOR 22 && (ecircle, ebox), 7.1488 - OPERATOR 122 &&+ (ecircle, ebox), 7.1489 - OPERATOR 23 && (ecircle, ecircle), 7.1490 - OPERATOR 24 && (ecircle, ecluster), 7.1491 - OPERATOR 124 &&+ (ecircle, ecluster), 7.1492 - OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 7.1493 - OPERATOR 32 <-> (ecircle, ebox) FOR ORDER BY float_ops, 7.1494 - OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 7.1495 - OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 7.1496 - FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 7.1497 - FUNCTION 2 pgl_gist_union(internal, internal), 7.1498 - FUNCTION 3 pgl_gist_compress_ecircle(internal), 7.1499 - FUNCTION 4 pgl_gist_decompress(internal), 7.1500 - FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 7.1501 - FUNCTION 6 pgl_gist_picksplit(internal, internal), 7.1502 - FUNCTION 7 pgl_gist_same(internal, internal, internal), 7.1503 - FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 7.1504 - STORAGE ekey_area; 7.1505 - 7.1506 -CREATE OPERATOR CLASS ecluster_ops 7.1507 - DEFAULT FOR TYPE ecluster USING gist AS 7.1508 - OPERATOR 21 && (ecluster, epoint), 7.1509 - OPERATOR 121 &&+ (ecluster, epoint), 7.1510 - OPERATOR 221 @> (ecluster, epoint), 7.1511 - OPERATOR 22 && (ecluster, ebox), 7.1512 - OPERATOR 122 &&+ (ecluster, ebox), 7.1513 - OPERATOR 222 @> (ecluster, ebox), 7.1514 - OPERATOR 322 <@ (ecluster, ebox), 7.1515 - OPERATOR 23 && (ecluster, ecircle), 7.1516 - OPERATOR 123 &&+ (ecluster, ecircle), 7.1517 - OPERATOR 24 && (ecluster, ecluster), 7.1518 - OPERATOR 124 &&+ (ecluster, ecluster), 7.1519 - OPERATOR 224 @> (ecluster, ecluster), 7.1520 - OPERATOR 324 <@ (ecluster, ecluster), 7.1521 - OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops, 7.1522 - OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops, 7.1523 - OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops, 7.1524 - OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops, 7.1525 - OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops, 7.1526 - FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 7.1527 - FUNCTION 2 pgl_gist_union(internal, internal), 7.1528 - FUNCTION 3 pgl_gist_compress_ecluster(internal), 7.1529 - FUNCTION 4 pgl_gist_decompress(internal), 7.1530 - FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 7.1531 - FUNCTION 6 pgl_gist_picksplit(internal, internal), 7.1532 - FUNCTION 7 pgl_gist_same(internal, internal, internal), 7.1533 - FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 7.1534 - STORAGE ekey_area; 7.1535 - 7.1536 - 7.1537 ---------------------- 7.1538 --- alias functions -- 7.1539 ---------------------- 7.1540 - 7.1541 -CREATE FUNCTION distance(epoint, epoint) 7.1542 - RETURNS float8 7.1543 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2'; 7.1544 - 7.1545 -CREATE FUNCTION distance(ecluster, epoint) 7.1546 - RETURNS float8 7.1547 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2'; 7.1548 - 7.1549 -CREATE FUNCTION distance_within(epoint, epoint, float8) 7.1550 - RETURNS boolean 7.1551 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)'; 7.1552 - 7.1553 -CREATE FUNCTION distance_within(ecluster, epoint, float8) 7.1554 - RETURNS boolean 7.1555 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)'; 7.1556 - 7.1557 -CREATE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) 7.1558 - RETURNS float8 7.1559 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <=> epoint_with_sample_count($2, $3)'; 7.1560 - 7.1561 - 7.1562 --------------------------------- 7.1563 --- other data storage formats -- 7.1564 --------------------------------- 7.1565 - 7.1566 -CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint') 7.1567 - RETURNS epoint 7.1568 - LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 7.1569 - DECLARE 7.1570 - "result" epoint; 7.1571 - BEGIN 7.1572 - IF $3 = 'epoint_lonlat' THEN 7.1573 - -- avoid dynamic command execution for better performance 7.1574 - RETURN epoint($2, $1); 7.1575 - END IF; 7.1576 - IF $3 = 'epoint' OR $3 = 'epoint_latlon' THEN 7.1577 - -- avoid dynamic command execution for better performance 7.1578 - RETURN epoint($1, $2); 7.1579 - END IF; 7.1580 - EXECUTE 'SELECT ' || $3 || '($1, $2)' INTO STRICT "result" USING $1, $2; 7.1581 - RETURN "result"; 7.1582 - END; 7.1583 - $$; 7.1584 - 7.1585 -CREATE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat') 7.1586 - RETURNS SETOF jsonb 7.1587 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.1588 - SELECT "result" FROM 7.1589 - ( SELECT jsonb_array_length($1) - 1 ) AS "lastindex_row" ("lastindex") 7.1590 - CROSS JOIN LATERAL jsonb_array_elements( 7.1591 - CASE WHEN 7.1592 - coords_to_epoint( 7.1593 - ($1->0->>0)::float8, 7.1594 - ($1->0->>1)::float8, 7.1595 - $2 7.1596 - ) = coords_to_epoint( 7.1597 - ($1->"lastindex"->>0)::float8, 7.1598 - ($1->"lastindex"->>1)::float8, 7.1599 - $2 7.1600 - ) 7.1601 - THEN 7.1602 - $1 - "lastindex" 7.1603 - ELSE 7.1604 - $1 7.1605 - END 7.1606 - ) AS "result_row" ("result") 7.1607 - $$; 7.1608 - 7.1609 -CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat') 7.1610 - RETURNS epoint 7.1611 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.1612 - SELECT CASE 7.1613 - WHEN $1->>'type' = 'Point' THEN 7.1614 - coords_to_epoint( 7.1615 - ($1->'coordinates'->>0)::float8, 7.1616 - ($1->'coordinates'->>1)::float8, 7.1617 - $2 7.1618 - ) 7.1619 - WHEN $1->>'type' = 'Feature' THEN 7.1620 - GeoJSON_to_epoint($1->'geometry', $2) 7.1621 - ELSE 7.1622 - NULL 7.1623 - END 7.1624 - $$; 7.1625 - 7.1626 -CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat') 7.1627 - RETURNS ecluster 7.1628 - LANGUAGE sql IMMUTABLE STRICT AS $$ 7.1629 - SELECT CASE $1->>'type' 7.1630 - WHEN 'Point' THEN 7.1631 - coords_to_epoint( 7.1632 - ($1->'coordinates'->>0)::float8, 7.1633 - ($1->'coordinates'->>1)::float8, 7.1634 - $2 7.1635 - )::ecluster 7.1636 - WHEN 'MultiPoint' THEN 7.1637 - ( SELECT ecluster_create_multipoint(array_agg( 7.1638 - coords_to_epoint( 7.1639 - ("coord"->>0)::float8, 7.1640 - ("coord"->>1)::float8, 7.1641 - $2 7.1642 - ) 7.1643 - )) 7.1644 - FROM jsonb_array_elements($1->'coordinates') AS "coord" 7.1645 - ) 7.1646 - WHEN 'LineString' THEN 7.1647 - ( SELECT ecluster_create_path(array_agg( 7.1648 - coords_to_epoint( 7.1649 - ("coord"->>0)::float8, 7.1650 - ("coord"->>1)::float8, 7.1651 - $2 7.1652 - ) 7.1653 - )) 7.1654 - FROM jsonb_array_elements($1->'coordinates') AS "coord" 7.1655 - ) 7.1656 - WHEN 'MultiLineString' THEN 7.1657 - ( SELECT ecluster_concat(array_agg( 7.1658 - ( SELECT ecluster_create_path(array_agg( 7.1659 - coords_to_epoint( 7.1660 - ("coord"->>0)::float8, 7.1661 - ("coord"->>1)::float8, 7.1662 - $2 7.1663 - ) 7.1664 - )) 7.1665 - FROM jsonb_array_elements("coord_array") AS "coord" 7.1666 - ) 7.1667 - )) 7.1668 - FROM jsonb_array_elements($1->'coordinates') AS "coord_array" 7.1669 - ) 7.1670 - WHEN 'Polygon' THEN 7.1671 - ( SELECT ecluster_concat(array_agg( 7.1672 - ( SELECT ecluster_create_polygon(array_agg( 7.1673 - coords_to_epoint( 7.1674 - ("coord"->>0)::float8, 7.1675 - ("coord"->>1)::float8, 7.1676 - $2 7.1677 - ) 7.1678 - )) 7.1679 - FROM GeoJSON_LinearRing_vertices("coord_array", $2) AS "coord" 7.1680 - ) 7.1681 - )) 7.1682 - FROM jsonb_array_elements($1->'coordinates') AS "coord_array" 7.1683 - ) 7.1684 - WHEN 'MultiPolygon' THEN 7.1685 - ( SELECT ecluster_concat(array_agg( 7.1686 - ( SELECT ecluster_concat(array_agg( 7.1687 - ( SELECT ecluster_create_polygon(array_agg( 7.1688 - coords_to_epoint( 7.1689 - ("coord"->>0)::float8, 7.1690 - ("coord"->>1)::float8, 7.1691 - $2 7.1692 - ) 7.1693 - )) 7.1694 - FROM GeoJSON_LinearRing_vertices("coord_array", $2) AS "coord" 7.1695 - ) 7.1696 - )) 7.1697 - FROM jsonb_array_elements("coord_array_array") AS "coord_array" 7.1698 - ) 7.1699 - )) 7.1700 - FROM jsonb_array_elements($1->'coordinates') AS "coord_array_array" 7.1701 - ) 7.1702 - WHEN 'GeometryCollection' THEN 7.1703 - ( SELECT ecluster_concat(array_agg( 7.1704 - GeoJSON_to_ecluster("geometry", $2) 7.1705 - )) 7.1706 - FROM jsonb_array_elements($1->'geometries') AS "geometry" 7.1707 - ) 7.1708 - WHEN 'Feature' THEN 7.1709 - GeoJSON_to_ecluster($1->'geometry', $2) 7.1710 - WHEN 'FeatureCollection' THEN 7.1711 - ( SELECT ecluster_concat(array_agg( 7.1712 - GeoJSON_to_ecluster("feature", $2) 7.1713 - )) 7.1714 - FROM jsonb_array_elements($1->'features') AS "feature" 7.1715 - ) 7.1716 - ELSE 7.1717 - NULL 7.1718 - END 7.1719 - $$; 7.1720 -
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/latlon--0.12.sql Sun Dec 10 19:45:19 2017 +0100 8.3 @@ -0,0 +1,1717 @@ 8.4 + 8.5 +---------------------------------------- 8.6 +-- forward declarations (shell types) -- 8.7 +---------------------------------------- 8.8 + 8.9 +CREATE TYPE ekey_point; 8.10 +CREATE TYPE ekey_area; 8.11 +CREATE TYPE epoint; 8.12 +CREATE TYPE epoint_with_sample_count; 8.13 +CREATE TYPE ebox; 8.14 +CREATE TYPE ecircle; 8.15 +CREATE TYPE ecluster; 8.16 + 8.17 + 8.18 +------------------------------------------------------------ 8.19 +-- dummy input/output functions for dummy index key types -- 8.20 +------------------------------------------------------------ 8.21 + 8.22 +CREATE FUNCTION ekey_point_in_dummy(cstring) 8.23 + RETURNS ekey_point 8.24 + LANGUAGE C IMMUTABLE STRICT 8.25 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 8.26 + 8.27 +CREATE FUNCTION ekey_point_out_dummy(ekey_point) 8.28 + RETURNS cstring 8.29 + LANGUAGE C IMMUTABLE STRICT 8.30 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 8.31 + 8.32 +CREATE FUNCTION ekey_area_in_dummy(cstring) 8.33 + RETURNS ekey_area 8.34 + LANGUAGE C IMMUTABLE STRICT 8.35 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 8.36 + 8.37 +CREATE FUNCTION ekey_area_out_dummy(ekey_area) 8.38 + RETURNS cstring 8.39 + LANGUAGE C IMMUTABLE STRICT 8.40 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 8.41 + 8.42 + 8.43 +-------------------------- 8.44 +-- text input functions -- 8.45 +-------------------------- 8.46 + 8.47 +CREATE FUNCTION epoint_in(cstring) 8.48 + RETURNS epoint 8.49 + LANGUAGE C IMMUTABLE STRICT 8.50 + AS '$libdir/latlon-v0009', 'pgl_epoint_in'; 8.51 + 8.52 +CREATE FUNCTION epoint_with_sample_count_in(cstring) 8.53 + RETURNS epoint_with_sample_count 8.54 + LANGUAGE C IMMUTABLE STRICT 8.55 + AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_in'; 8.56 + 8.57 +CREATE FUNCTION ebox_in(cstring) 8.58 + RETURNS ebox 8.59 + LANGUAGE C IMMUTABLE STRICT 8.60 + AS '$libdir/latlon-v0009', 'pgl_ebox_in'; 8.61 + 8.62 +CREATE FUNCTION ecircle_in(cstring) 8.63 + RETURNS ecircle 8.64 + LANGUAGE C IMMUTABLE STRICT 8.65 + AS '$libdir/latlon-v0009', 'pgl_ecircle_in'; 8.66 + 8.67 +CREATE FUNCTION ecluster_in(cstring) 8.68 + RETURNS ecluster 8.69 + LANGUAGE C IMMUTABLE STRICT 8.70 + AS '$libdir/latlon-v0009', 'pgl_ecluster_in'; 8.71 + 8.72 + 8.73 +--------------------------- 8.74 +-- text output functions -- 8.75 +--------------------------- 8.76 + 8.77 +CREATE FUNCTION epoint_out(epoint) 8.78 + RETURNS cstring 8.79 + LANGUAGE C IMMUTABLE STRICT 8.80 + AS '$libdir/latlon-v0009', 'pgl_epoint_out'; 8.81 + 8.82 +CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) 8.83 + RETURNS cstring 8.84 + LANGUAGE C IMMUTABLE STRICT 8.85 + AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_out'; 8.86 + 8.87 +CREATE FUNCTION ebox_out(ebox) 8.88 + RETURNS cstring 8.89 + LANGUAGE C IMMUTABLE STRICT 8.90 + AS '$libdir/latlon-v0009', 'pgl_ebox_out'; 8.91 + 8.92 +CREATE FUNCTION ecircle_out(ecircle) 8.93 + RETURNS cstring 8.94 + LANGUAGE C IMMUTABLE STRICT 8.95 + AS '$libdir/latlon-v0009', 'pgl_ecircle_out'; 8.96 + 8.97 +CREATE FUNCTION ecluster_out(ecluster) 8.98 + RETURNS cstring 8.99 + LANGUAGE C IMMUTABLE STRICT 8.100 + AS '$libdir/latlon-v0009', 'pgl_ecluster_out'; 8.101 + 8.102 + 8.103 +-------------------------- 8.104 +-- binary I/O functions -- 8.105 +-------------------------- 8.106 + 8.107 +CREATE FUNCTION epoint_recv(internal) 8.108 + RETURNS epoint 8.109 + LANGUAGE C IMMUTABLE STRICT 8.110 + AS '$libdir/latlon-v0009', 'pgl_epoint_recv'; 8.111 + 8.112 +CREATE FUNCTION ebox_recv(internal) 8.113 + RETURNS ebox 8.114 + LANGUAGE C IMMUTABLE STRICT 8.115 + AS '$libdir/latlon-v0009', 'pgl_ebox_recv'; 8.116 + 8.117 +CREATE FUNCTION ecircle_recv(internal) 8.118 + RETURNS ecircle 8.119 + LANGUAGE C IMMUTABLE STRICT 8.120 + AS '$libdir/latlon-v0009', 'pgl_ecircle_recv'; 8.121 + 8.122 +CREATE FUNCTION epoint_send(epoint) 8.123 + RETURNS bytea 8.124 + LANGUAGE C IMMUTABLE STRICT 8.125 + AS '$libdir/latlon-v0009', 'pgl_epoint_send'; 8.126 + 8.127 +CREATE FUNCTION ebox_send(ebox) 8.128 + RETURNS bytea 8.129 + LANGUAGE C IMMUTABLE STRICT 8.130 + AS '$libdir/latlon-v0009', 'pgl_ebox_send'; 8.131 + 8.132 +CREATE FUNCTION ecircle_send(ecircle) 8.133 + RETURNS bytea 8.134 + LANGUAGE C IMMUTABLE STRICT 8.135 + AS '$libdir/latlon-v0009', 'pgl_ecircle_send'; 8.136 + 8.137 + 8.138 +----------------------------------------------- 8.139 +-- type definitions of dummy index key types -- 8.140 +----------------------------------------------- 8.141 + 8.142 +CREATE TYPE ekey_point ( 8.143 + internallength = 8, 8.144 + input = ekey_point_in_dummy, 8.145 + output = ekey_point_out_dummy, 8.146 + alignment = char ); 8.147 + 8.148 +CREATE TYPE ekey_area ( 8.149 + internallength = 9, 8.150 + input = ekey_area_in_dummy, 8.151 + output = ekey_area_out_dummy, 8.152 + alignment = char ); 8.153 + 8.154 + 8.155 +------------------------------------------ 8.156 +-- definitions of geographic data types -- 8.157 +------------------------------------------ 8.158 + 8.159 +CREATE TYPE epoint ( 8.160 + internallength = 16, 8.161 + input = epoint_in, 8.162 + output = epoint_out, 8.163 + receive = epoint_recv, 8.164 + send = epoint_send, 8.165 + alignment = double ); 8.166 + 8.167 +CREATE TYPE epoint_with_sample_count ( 8.168 + internallength = 20, 8.169 + input = epoint_with_sample_count_in, 8.170 + output = epoint_with_sample_count_out, 8.171 + alignment = double ); 8.172 + 8.173 +CREATE TYPE ebox ( 8.174 + internallength = 32, 8.175 + input = ebox_in, 8.176 + output = ebox_out, 8.177 + receive = ebox_recv, 8.178 + send = ebox_send, 8.179 + alignment = double ); 8.180 + 8.181 +CREATE TYPE ecircle ( 8.182 + internallength = 24, 8.183 + input = ecircle_in, 8.184 + output = ecircle_out, 8.185 + receive = ecircle_recv, 8.186 + send = ecircle_send, 8.187 + alignment = double ); 8.188 + 8.189 +CREATE TYPE ecluster ( 8.190 + internallength = VARIABLE, 8.191 + input = ecluster_in, 8.192 + output = ecluster_out, 8.193 + alignment = double, 8.194 + storage = external ); 8.195 + 8.196 + 8.197 +-------------------- 8.198 +-- B-tree support -- 8.199 +-------------------- 8.200 + 8.201 +-- begin of B-tree support for epoint 8.202 + 8.203 +CREATE FUNCTION epoint_btree_lt(epoint, epoint) 8.204 + RETURNS boolean 8.205 + LANGUAGE C IMMUTABLE STRICT 8.206 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_lt'; 8.207 + 8.208 +CREATE FUNCTION epoint_btree_le(epoint, epoint) 8.209 + RETURNS boolean 8.210 + LANGUAGE C IMMUTABLE STRICT 8.211 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_le'; 8.212 + 8.213 +CREATE FUNCTION epoint_btree_eq(epoint, epoint) 8.214 + RETURNS boolean 8.215 + LANGUAGE C IMMUTABLE STRICT 8.216 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_eq'; 8.217 + 8.218 +CREATE FUNCTION epoint_btree_ne(epoint, epoint) 8.219 + RETURNS boolean 8.220 + LANGUAGE C IMMUTABLE STRICT 8.221 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ne'; 8.222 + 8.223 +CREATE FUNCTION epoint_btree_ge(epoint, epoint) 8.224 + RETURNS boolean 8.225 + LANGUAGE C IMMUTABLE STRICT 8.226 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ge'; 8.227 + 8.228 +CREATE FUNCTION epoint_btree_gt(epoint, epoint) 8.229 + RETURNS boolean 8.230 + LANGUAGE C IMMUTABLE STRICT 8.231 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_gt'; 8.232 + 8.233 +CREATE OPERATOR <<< ( 8.234 + leftarg = epoint, 8.235 + rightarg = epoint, 8.236 + procedure = epoint_btree_lt, 8.237 + commutator = >>>, 8.238 + negator = >>>=, 8.239 + restrict = scalarltsel, 8.240 + join = scalarltjoinsel 8.241 +); 8.242 + 8.243 +CREATE OPERATOR <<<= ( 8.244 + leftarg = epoint, 8.245 + rightarg = epoint, 8.246 + procedure = epoint_btree_le, 8.247 + commutator = >>>=, 8.248 + negator = >>>, 8.249 + restrict = scalarltsel, 8.250 + join = scalarltjoinsel 8.251 +); 8.252 + 8.253 +CREATE OPERATOR = ( 8.254 + leftarg = epoint, 8.255 + rightarg = epoint, 8.256 + procedure = epoint_btree_eq, 8.257 + commutator = =, 8.258 + negator = <>, 8.259 + restrict = eqsel, 8.260 + join = eqjoinsel, 8.261 + merges 8.262 +); 8.263 + 8.264 +CREATE OPERATOR <> ( 8.265 + leftarg = epoint, 8.266 + rightarg = epoint, 8.267 + procedure = epoint_btree_eq, 8.268 + commutator = <>, 8.269 + negator = =, 8.270 + restrict = neqsel, 8.271 + join = neqjoinsel 8.272 +); 8.273 + 8.274 +CREATE OPERATOR >>>= ( 8.275 + leftarg = epoint, 8.276 + rightarg = epoint, 8.277 + procedure = epoint_btree_ge, 8.278 + commutator = <<<=, 8.279 + negator = <<<, 8.280 + restrict = scalargtsel, 8.281 + join = scalargtjoinsel 8.282 +); 8.283 + 8.284 +CREATE OPERATOR >>> ( 8.285 + leftarg = epoint, 8.286 + rightarg = epoint, 8.287 + procedure = epoint_btree_gt, 8.288 + commutator = <<<, 8.289 + negator = <<<=, 8.290 + restrict = scalargtsel, 8.291 + join = scalargtjoinsel 8.292 +); 8.293 + 8.294 +CREATE FUNCTION epoint_btree_cmp(epoint, epoint) 8.295 + RETURNS int4 8.296 + LANGUAGE C IMMUTABLE STRICT 8.297 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_cmp'; 8.298 + 8.299 +CREATE OPERATOR CLASS epoint_btree_ops 8.300 + DEFAULT FOR TYPE epoint USING btree AS 8.301 + OPERATOR 1 <<< , 8.302 + OPERATOR 2 <<<= , 8.303 + OPERATOR 3 = , 8.304 + OPERATOR 4 >>>= , 8.305 + OPERATOR 5 >>> , 8.306 + FUNCTION 1 epoint_btree_cmp(epoint, epoint); 8.307 + 8.308 +-- end of B-tree support for epoint 8.309 + 8.310 +-- begin of B-tree support for ebox 8.311 + 8.312 +CREATE FUNCTION ebox_btree_lt(ebox, ebox) 8.313 + RETURNS boolean 8.314 + LANGUAGE C IMMUTABLE STRICT 8.315 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_lt'; 8.316 + 8.317 +CREATE FUNCTION ebox_btree_le(ebox, ebox) 8.318 + RETURNS boolean 8.319 + LANGUAGE C IMMUTABLE STRICT 8.320 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_le'; 8.321 + 8.322 +CREATE FUNCTION ebox_btree_eq(ebox, ebox) 8.323 + RETURNS boolean 8.324 + LANGUAGE C IMMUTABLE STRICT 8.325 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_eq'; 8.326 + 8.327 +CREATE FUNCTION ebox_btree_ne(ebox, ebox) 8.328 + RETURNS boolean 8.329 + LANGUAGE C IMMUTABLE STRICT 8.330 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ne'; 8.331 + 8.332 +CREATE FUNCTION ebox_btree_ge(ebox, ebox) 8.333 + RETURNS boolean 8.334 + LANGUAGE C IMMUTABLE STRICT 8.335 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ge'; 8.336 + 8.337 +CREATE FUNCTION ebox_btree_gt(ebox, ebox) 8.338 + RETURNS boolean 8.339 + LANGUAGE C IMMUTABLE STRICT 8.340 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_gt'; 8.341 + 8.342 +CREATE OPERATOR <<< ( 8.343 + leftarg = ebox, 8.344 + rightarg = ebox, 8.345 + procedure = ebox_btree_lt, 8.346 + commutator = >>>, 8.347 + negator = >>>=, 8.348 + restrict = scalarltsel, 8.349 + join = scalarltjoinsel 8.350 +); 8.351 + 8.352 +CREATE OPERATOR <<<= ( 8.353 + leftarg = ebox, 8.354 + rightarg = ebox, 8.355 + procedure = ebox_btree_le, 8.356 + commutator = >>>=, 8.357 + negator = >>>, 8.358 + restrict = scalarltsel, 8.359 + join = scalarltjoinsel 8.360 +); 8.361 + 8.362 +CREATE OPERATOR = ( 8.363 + leftarg = ebox, 8.364 + rightarg = ebox, 8.365 + procedure = ebox_btree_eq, 8.366 + commutator = =, 8.367 + negator = <>, 8.368 + restrict = eqsel, 8.369 + join = eqjoinsel, 8.370 + merges 8.371 +); 8.372 + 8.373 +CREATE OPERATOR <> ( 8.374 + leftarg = ebox, 8.375 + rightarg = ebox, 8.376 + procedure = ebox_btree_eq, 8.377 + commutator = <>, 8.378 + negator = =, 8.379 + restrict = neqsel, 8.380 + join = neqjoinsel 8.381 +); 8.382 + 8.383 +CREATE OPERATOR >>>= ( 8.384 + leftarg = ebox, 8.385 + rightarg = ebox, 8.386 + procedure = ebox_btree_ge, 8.387 + commutator = <<<=, 8.388 + negator = <<<, 8.389 + restrict = scalargtsel, 8.390 + join = scalargtjoinsel 8.391 +); 8.392 + 8.393 +CREATE OPERATOR >>> ( 8.394 + leftarg = ebox, 8.395 + rightarg = ebox, 8.396 + procedure = ebox_btree_gt, 8.397 + commutator = <<<, 8.398 + negator = <<<=, 8.399 + restrict = scalargtsel, 8.400 + join = scalargtjoinsel 8.401 +); 8.402 + 8.403 +CREATE FUNCTION ebox_btree_cmp(ebox, ebox) 8.404 + RETURNS int4 8.405 + LANGUAGE C IMMUTABLE STRICT 8.406 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_cmp'; 8.407 + 8.408 +CREATE OPERATOR CLASS ebox_btree_ops 8.409 + DEFAULT FOR TYPE ebox USING btree AS 8.410 + OPERATOR 1 <<< , 8.411 + OPERATOR 2 <<<= , 8.412 + OPERATOR 3 = , 8.413 + OPERATOR 4 >>>= , 8.414 + OPERATOR 5 >>> , 8.415 + FUNCTION 1 ebox_btree_cmp(ebox, ebox); 8.416 + 8.417 +-- end of B-tree support for ebox 8.418 + 8.419 +-- begin of B-tree support for ecircle 8.420 + 8.421 +CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle) 8.422 + RETURNS boolean 8.423 + LANGUAGE C IMMUTABLE STRICT 8.424 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_lt'; 8.425 + 8.426 +CREATE FUNCTION ecircle_btree_le(ecircle, ecircle) 8.427 + RETURNS boolean 8.428 + LANGUAGE C IMMUTABLE STRICT 8.429 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_le'; 8.430 + 8.431 +CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle) 8.432 + RETURNS boolean 8.433 + LANGUAGE C IMMUTABLE STRICT 8.434 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_eq'; 8.435 + 8.436 +CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle) 8.437 + RETURNS boolean 8.438 + LANGUAGE C IMMUTABLE STRICT 8.439 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ne'; 8.440 + 8.441 +CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle) 8.442 + RETURNS boolean 8.443 + LANGUAGE C IMMUTABLE STRICT 8.444 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ge'; 8.445 + 8.446 +CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle) 8.447 + RETURNS boolean 8.448 + LANGUAGE C IMMUTABLE STRICT 8.449 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_gt'; 8.450 + 8.451 +CREATE OPERATOR <<< ( 8.452 + leftarg = ecircle, 8.453 + rightarg = ecircle, 8.454 + procedure = ecircle_btree_lt, 8.455 + commutator = >>>, 8.456 + negator = >>>=, 8.457 + restrict = scalarltsel, 8.458 + join = scalarltjoinsel 8.459 +); 8.460 + 8.461 +CREATE OPERATOR <<<= ( 8.462 + leftarg = ecircle, 8.463 + rightarg = ecircle, 8.464 + procedure = ecircle_btree_le, 8.465 + commutator = >>>=, 8.466 + negator = >>>, 8.467 + restrict = scalarltsel, 8.468 + join = scalarltjoinsel 8.469 +); 8.470 + 8.471 +CREATE OPERATOR = ( 8.472 + leftarg = ecircle, 8.473 + rightarg = ecircle, 8.474 + procedure = ecircle_btree_eq, 8.475 + commutator = =, 8.476 + negator = <>, 8.477 + restrict = eqsel, 8.478 + join = eqjoinsel, 8.479 + merges 8.480 +); 8.481 + 8.482 +CREATE OPERATOR <> ( 8.483 + leftarg = ecircle, 8.484 + rightarg = ecircle, 8.485 + procedure = ecircle_btree_eq, 8.486 + commutator = <>, 8.487 + negator = =, 8.488 + restrict = neqsel, 8.489 + join = neqjoinsel 8.490 +); 8.491 + 8.492 +CREATE OPERATOR >>>= ( 8.493 + leftarg = ecircle, 8.494 + rightarg = ecircle, 8.495 + procedure = ecircle_btree_ge, 8.496 + commutator = <<<=, 8.497 + negator = <<<, 8.498 + restrict = scalargtsel, 8.499 + join = scalargtjoinsel 8.500 +); 8.501 + 8.502 +CREATE OPERATOR >>> ( 8.503 + leftarg = ecircle, 8.504 + rightarg = ecircle, 8.505 + procedure = ecircle_btree_gt, 8.506 + commutator = <<<, 8.507 + negator = <<<=, 8.508 + restrict = scalargtsel, 8.509 + join = scalargtjoinsel 8.510 +); 8.511 + 8.512 +CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 8.513 + RETURNS int4 8.514 + LANGUAGE C IMMUTABLE STRICT 8.515 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_cmp'; 8.516 + 8.517 +CREATE OPERATOR CLASS ecircle_btree_ops 8.518 + DEFAULT FOR TYPE ecircle USING btree AS 8.519 + OPERATOR 1 <<< , 8.520 + OPERATOR 2 <<<= , 8.521 + OPERATOR 3 = , 8.522 + OPERATOR 4 >>>= , 8.523 + OPERATOR 5 >>> , 8.524 + FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle); 8.525 + 8.526 +-- end of B-tree support for ecircle 8.527 + 8.528 + 8.529 +---------------- 8.530 +-- type casts -- 8.531 +---------------- 8.532 + 8.533 +CREATE FUNCTION cast_epoint_to_ebox(epoint) 8.534 + RETURNS ebox 8.535 + LANGUAGE C IMMUTABLE STRICT 8.536 + AS '$libdir/latlon-v0009', 'pgl_epoint_to_ebox'; 8.537 + 8.538 +CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint); 8.539 + 8.540 +CREATE FUNCTION cast_epoint_to_ecircle(epoint) 8.541 + RETURNS ecircle 8.542 + LANGUAGE C IMMUTABLE STRICT 8.543 + AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecircle'; 8.544 + 8.545 +CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint); 8.546 + 8.547 +CREATE FUNCTION cast_epoint_to_ecluster(epoint) 8.548 + RETURNS ecluster 8.549 + LANGUAGE C IMMUTABLE STRICT 8.550 + AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecluster'; 8.551 + 8.552 +CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint); 8.553 + 8.554 +CREATE FUNCTION cast_ebox_to_ecluster(ebox) 8.555 + RETURNS ecluster 8.556 + LANGUAGE C IMMUTABLE STRICT 8.557 + AS '$libdir/latlon-v0009', 'pgl_ebox_to_ecluster'; 8.558 + 8.559 +CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox); 8.560 + 8.561 + 8.562 +--------------------------- 8.563 +-- constructor functions -- 8.564 +--------------------------- 8.565 + 8.566 +CREATE FUNCTION epoint(float8, float8) 8.567 + RETURNS epoint 8.568 + LANGUAGE C IMMUTABLE STRICT 8.569 + AS '$libdir/latlon-v0009', 'pgl_create_epoint'; 8.570 + 8.571 +CREATE FUNCTION epoint_latlon(float8, float8) 8.572 + RETURNS epoint 8.573 + LANGUAGE SQL IMMUTABLE STRICT AS $$ 8.574 + SELECT epoint($1, $2) 8.575 + $$; 8.576 + 8.577 +CREATE FUNCTION epoint_lonlat(float8, float8) 8.578 + RETURNS epoint 8.579 + LANGUAGE SQL IMMUTABLE STRICT AS $$ 8.580 + SELECT epoint($2, $1) 8.581 + $$; 8.582 + 8.583 +CREATE FUNCTION epoint_with_sample_count(epoint, int4) 8.584 + RETURNS epoint_with_sample_count 8.585 + LANGUAGE C IMMUTABLE STRICT 8.586 + AS '$libdir/latlon-v0009', 'pgl_create_epoint_with_sample_count'; 8.587 + 8.588 +CREATE FUNCTION empty_ebox() 8.589 + RETURNS ebox 8.590 + LANGUAGE C IMMUTABLE STRICT 8.591 + AS '$libdir/latlon-v0009', 'pgl_create_empty_ebox'; 8.592 + 8.593 +CREATE FUNCTION ebox(float8, float8, float8, float8) 8.594 + RETURNS ebox 8.595 + LANGUAGE C IMMUTABLE STRICT 8.596 + AS '$libdir/latlon-v0009', 'pgl_create_ebox'; 8.597 + 8.598 +CREATE FUNCTION ebox(epoint, epoint) 8.599 + RETURNS ebox 8.600 + LANGUAGE C IMMUTABLE STRICT 8.601 + AS '$libdir/latlon-v0009', 'pgl_create_ebox_from_epoints'; 8.602 + 8.603 +CREATE FUNCTION ecircle(float8, float8, float8) 8.604 + RETURNS ecircle 8.605 + LANGUAGE C IMMUTABLE STRICT 8.606 + AS '$libdir/latlon-v0009', 'pgl_create_ecircle'; 8.607 + 8.608 +CREATE FUNCTION ecircle(epoint, float8) 8.609 + RETURNS ecircle 8.610 + LANGUAGE C IMMUTABLE STRICT 8.611 + AS '$libdir/latlon-v0009', 'pgl_create_ecircle_from_epoint'; 8.612 + 8.613 +CREATE FUNCTION ecluster_concat(ecluster[]) 8.614 + RETURNS ecluster 8.615 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.616 + SELECT array_to_string($1, ' ')::ecluster 8.617 + $$; 8.618 + 8.619 +CREATE FUNCTION ecluster_concat(ecluster, ecluster) 8.620 + RETURNS ecluster 8.621 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.622 + SELECT ($1::text || ' ' || $2::text)::ecluster 8.623 + $$; 8.624 + 8.625 +CREATE FUNCTION ecluster_create_multipoint(epoint[]) 8.626 + RETURNS ecluster 8.627 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.628 + SELECT 8.629 + array_to_string(array_agg('point (' || unnest || ')'), ' ')::ecluster 8.630 + FROM unnest($1) 8.631 + $$; 8.632 + 8.633 +CREATE FUNCTION ecluster_create_path(epoint[]) 8.634 + RETURNS ecluster 8.635 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.636 + SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 8.637 + ('path (' || array_to_string($1, ' ') || ')')::ecluster 8.638 + END 8.639 + FROM array_to_string($1, ' ') AS "str" 8.640 + $$; 8.641 + 8.642 +CREATE FUNCTION ecluster_create_outline(epoint[]) 8.643 + RETURNS ecluster 8.644 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.645 + SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 8.646 + ('outline (' || array_to_string($1, ' ') || ')')::ecluster 8.647 + END 8.648 + FROM array_to_string($1, ' ') AS "str" 8.649 + $$; 8.650 + 8.651 +CREATE FUNCTION ecluster_create_polygon(epoint[]) 8.652 + RETURNS ecluster 8.653 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.654 + SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 8.655 + ('polygon (' || array_to_string($1, ' ') || ')')::ecluster 8.656 + END 8.657 + FROM array_to_string($1, ' ') AS "str" 8.658 + $$; 8.659 + 8.660 + 8.661 +---------------------- 8.662 +-- getter functions -- 8.663 +---------------------- 8.664 + 8.665 +CREATE FUNCTION latitude(epoint) 8.666 + RETURNS float8 8.667 + LANGUAGE C IMMUTABLE STRICT 8.668 + AS '$libdir/latlon-v0009', 'pgl_epoint_lat'; 8.669 + 8.670 +CREATE FUNCTION longitude(epoint) 8.671 + RETURNS float8 8.672 + LANGUAGE C IMMUTABLE STRICT 8.673 + AS '$libdir/latlon-v0009', 'pgl_epoint_lon'; 8.674 + 8.675 +CREATE FUNCTION min_latitude(ebox) 8.676 + RETURNS float8 8.677 + LANGUAGE C IMMUTABLE STRICT 8.678 + AS '$libdir/latlon-v0009', 'pgl_ebox_lat_min'; 8.679 + 8.680 +CREATE FUNCTION max_latitude(ebox) 8.681 + RETURNS float8 8.682 + LANGUAGE C IMMUTABLE STRICT 8.683 + AS '$libdir/latlon-v0009', 'pgl_ebox_lat_max'; 8.684 + 8.685 +CREATE FUNCTION min_longitude(ebox) 8.686 + RETURNS float8 8.687 + LANGUAGE C IMMUTABLE STRICT 8.688 + AS '$libdir/latlon-v0009', 'pgl_ebox_lon_min'; 8.689 + 8.690 +CREATE FUNCTION max_longitude(ebox) 8.691 + RETURNS float8 8.692 + LANGUAGE C IMMUTABLE STRICT 8.693 + AS '$libdir/latlon-v0009', 'pgl_ebox_lon_max'; 8.694 + 8.695 +CREATE FUNCTION center(ecircle) 8.696 + RETURNS epoint 8.697 + LANGUAGE C IMMUTABLE STRICT 8.698 + AS '$libdir/latlon-v0009', 'pgl_ecircle_center'; 8.699 + 8.700 +CREATE FUNCTION radius(ecircle) 8.701 + RETURNS float8 8.702 + LANGUAGE C IMMUTABLE STRICT 8.703 + AS '$libdir/latlon-v0009', 'pgl_ecircle_radius'; 8.704 + 8.705 +CREATE FUNCTION ecluster_extract_points(ecluster) 8.706 + RETURNS SETOF epoint 8.707 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.708 + SELECT "match"[2]::epoint 8.709 + FROM regexp_matches($1::text, e'(^| )point \\(([^)]+)\\)', 'g') AS "match" 8.710 + $$; 8.711 + 8.712 +CREATE FUNCTION ecluster_extract_paths(ecluster) 8.713 + RETURNS SETOF epoint[] 8.714 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.715 + SELECT ( 8.716 + SELECT array_agg("m2"[1]::epoint) 8.717 + FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 8.718 + ) 8.719 + FROM regexp_matches($1::text, e'(^| )path \\(([^)]+)\\)', 'g') AS "m1" 8.720 + $$; 8.721 + 8.722 +CREATE FUNCTION ecluster_extract_outlines(ecluster) 8.723 + RETURNS SETOF epoint[] 8.724 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.725 + SELECT ( 8.726 + SELECT array_agg("m2"[1]::epoint) 8.727 + FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 8.728 + ) 8.729 + FROM regexp_matches($1::text, e'(^| )outline \\(([^)]+)\\)', 'g') AS "m1" 8.730 + $$; 8.731 + 8.732 +CREATE FUNCTION ecluster_extract_polygons(ecluster) 8.733 + RETURNS SETOF epoint[] 8.734 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.735 + SELECT ( 8.736 + SELECT array_agg("m2"[1]::epoint) 8.737 + FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 8.738 + ) 8.739 + FROM regexp_matches($1::text, e'(^| )polygon \\(([^)]+)\\)', 'g') AS "m1" 8.740 + $$; 8.741 + 8.742 + 8.743 +--------------- 8.744 +-- operators -- 8.745 +--------------- 8.746 + 8.747 +CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 8.748 + RETURNS boolean 8.749 + LANGUAGE C IMMUTABLE STRICT 8.750 + AS '$libdir/latlon-v0009', 'pgl_epoint_ebox_overlap'; 8.751 + 8.752 +CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 8.753 + RETURNS boolean 8.754 + LANGUAGE C IMMUTABLE STRICT 8.755 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_overlap'; 8.756 + 8.757 +CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 8.758 + RETURNS boolean 8.759 + LANGUAGE C IMMUTABLE STRICT 8.760 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_overlap'; 8.761 + 8.762 +CREATE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 8.763 + RETURNS boolean 8.764 + LANGUAGE C IMMUTABLE STRICT 8.765 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_may_overlap'; 8.766 + 8.767 +CREATE FUNCTION ebox_overlap_proc(ebox, ebox) 8.768 + RETURNS boolean 8.769 + LANGUAGE C IMMUTABLE STRICT 8.770 + AS '$libdir/latlon-v0009', 'pgl_ebox_overlap'; 8.771 + 8.772 +CREATE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 8.773 + RETURNS boolean 8.774 + LANGUAGE C IMMUTABLE STRICT 8.775 + AS '$libdir/latlon-v0009', 'pgl_ebox_ecircle_may_overlap'; 8.776 + 8.777 +CREATE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 8.778 + RETURNS boolean 8.779 + LANGUAGE C IMMUTABLE STRICT 8.780 + AS '$libdir/latlon-v0009', 'pgl_ebox_ecluster_may_overlap'; 8.781 + 8.782 +CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 8.783 + RETURNS boolean 8.784 + LANGUAGE C IMMUTABLE STRICT 8.785 + AS '$libdir/latlon-v0009', 'pgl_ecircle_overlap'; 8.786 + 8.787 +CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 8.788 + RETURNS boolean 8.789 + LANGUAGE C IMMUTABLE STRICT 8.790 + AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_overlap'; 8.791 + 8.792 +CREATE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 8.793 + RETURNS boolean 8.794 + LANGUAGE C IMMUTABLE STRICT 8.795 + AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_may_overlap'; 8.796 + 8.797 +CREATE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 8.798 + RETURNS boolean 8.799 + LANGUAGE C IMMUTABLE STRICT 8.800 + AS '$libdir/latlon-v0009', 'pgl_ecluster_overlap'; 8.801 + 8.802 +CREATE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 8.803 + RETURNS boolean 8.804 + LANGUAGE C IMMUTABLE STRICT 8.805 + AS '$libdir/latlon-v0009', 'pgl_ecluster_may_overlap'; 8.806 + 8.807 +CREATE FUNCTION ecluster_contains_proc(ecluster, ecluster) 8.808 + RETURNS boolean 8.809 + LANGUAGE C IMMUTABLE STRICT 8.810 + AS '$libdir/latlon-v0009', 'pgl_ecluster_contains'; 8.811 + 8.812 +CREATE FUNCTION epoint_distance_proc(epoint, epoint) 8.813 + RETURNS float8 8.814 + LANGUAGE C IMMUTABLE STRICT 8.815 + AS '$libdir/latlon-v0009', 'pgl_epoint_distance'; 8.816 + 8.817 +CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 8.818 + RETURNS float8 8.819 + LANGUAGE C IMMUTABLE STRICT 8.820 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_distance'; 8.821 + 8.822 +CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 8.823 + RETURNS float8 8.824 + LANGUAGE C IMMUTABLE STRICT 8.825 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_distance'; 8.826 + 8.827 +CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle) 8.828 + RETURNS float8 8.829 + LANGUAGE C IMMUTABLE STRICT 8.830 + AS '$libdir/latlon-v0009', 'pgl_ecircle_distance'; 8.831 + 8.832 +CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 8.833 + RETURNS float8 8.834 + LANGUAGE C IMMUTABLE STRICT 8.835 + AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_distance'; 8.836 + 8.837 +CREATE FUNCTION ecluster_distance_proc(ecluster, ecluster) 8.838 + RETURNS float8 8.839 + LANGUAGE C IMMUTABLE STRICT 8.840 + AS '$libdir/latlon-v0009', 'pgl_ecluster_distance'; 8.841 + 8.842 +CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) 8.843 + RETURNS float8 8.844 + LANGUAGE C IMMUTABLE STRICT 8.845 + AS '$libdir/latlon-v0009', 'pgl_ecluster_epoint_sc_fair_distance'; 8.846 + 8.847 +CREATE OPERATOR && ( 8.848 + leftarg = epoint, 8.849 + rightarg = ebox, 8.850 + procedure = epoint_ebox_overlap_proc, 8.851 + commutator = &&, 8.852 + restrict = areasel, 8.853 + join = areajoinsel 8.854 +); 8.855 + 8.856 +CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint) 8.857 + RETURNS boolean 8.858 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 8.859 + 8.860 +CREATE OPERATOR && ( 8.861 + leftarg = ebox, 8.862 + rightarg = epoint, 8.863 + procedure = epoint_ebox_overlap_commutator, 8.864 + commutator = &&, 8.865 + restrict = areasel, 8.866 + join = areajoinsel 8.867 +); 8.868 + 8.869 +CREATE OPERATOR && ( 8.870 + leftarg = epoint, 8.871 + rightarg = ecircle, 8.872 + procedure = epoint_ecircle_overlap_proc, 8.873 + commutator = &&, 8.874 + restrict = areasel, 8.875 + join = areajoinsel 8.876 +); 8.877 + 8.878 +CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint) 8.879 + RETURNS boolean 8.880 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 8.881 + 8.882 +CREATE OPERATOR && ( 8.883 + leftarg = ecircle, 8.884 + rightarg = epoint, 8.885 + procedure = epoint_ecircle_overlap_commutator, 8.886 + commutator = &&, 8.887 + restrict = areasel, 8.888 + join = areajoinsel 8.889 +); 8.890 + 8.891 +CREATE OPERATOR && ( 8.892 + leftarg = epoint, 8.893 + rightarg = ecluster, 8.894 + procedure = epoint_ecluster_overlap_proc, 8.895 + commutator = &&, 8.896 + restrict = areasel, 8.897 + join = areajoinsel 8.898 +); 8.899 + 8.900 +CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint) 8.901 + RETURNS boolean 8.902 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 8.903 + 8.904 +CREATE OPERATOR && ( 8.905 + leftarg = ecluster, 8.906 + rightarg = epoint, 8.907 + procedure = epoint_ecluster_overlap_commutator, 8.908 + commutator = &&, 8.909 + restrict = areasel, 8.910 + join = areajoinsel 8.911 +); 8.912 + 8.913 +CREATE OPERATOR && ( 8.914 + leftarg = ebox, 8.915 + rightarg = ebox, 8.916 + procedure = ebox_overlap_proc, 8.917 + commutator = &&, 8.918 + restrict = areasel, 8.919 + join = areajoinsel 8.920 +); 8.921 + 8.922 +CREATE OPERATOR && ( 8.923 + leftarg = ecircle, 8.924 + rightarg = ecircle, 8.925 + procedure = ecircle_overlap_proc, 8.926 + commutator = &&, 8.927 + restrict = areasel, 8.928 + join = areajoinsel 8.929 +); 8.930 + 8.931 +CREATE OPERATOR && ( 8.932 + leftarg = ecircle, 8.933 + rightarg = ecluster, 8.934 + procedure = ecircle_ecluster_overlap_proc, 8.935 + commutator = &&, 8.936 + restrict = areasel, 8.937 + join = areajoinsel 8.938 +); 8.939 + 8.940 +CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle) 8.941 + RETURNS boolean 8.942 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 8.943 + 8.944 +CREATE OPERATOR && ( 8.945 + leftarg = ecluster, 8.946 + rightarg = ecircle, 8.947 + procedure = ecircle_ecluster_overlap_commutator, 8.948 + commutator = &&, 8.949 + restrict = areasel, 8.950 + join = areajoinsel 8.951 +); 8.952 + 8.953 +CREATE OPERATOR && ( 8.954 + leftarg = ecluster, 8.955 + rightarg = ecluster, 8.956 + procedure = ecluster_overlap_proc, 8.957 + commutator = &&, 8.958 + restrict = areasel, 8.959 + join = areajoinsel 8.960 +); 8.961 + 8.962 +CREATE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle) 8.963 + RETURNS boolean 8.964 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2'; 8.965 + 8.966 +CREATE OPERATOR && ( 8.967 + leftarg = ebox, 8.968 + rightarg = ecircle, 8.969 + procedure = ebox_ecircle_overlap_castwrap, 8.970 + commutator = &&, 8.971 + restrict = areasel, 8.972 + join = areajoinsel 8.973 +); 8.974 + 8.975 +CREATE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox) 8.976 + RETURNS boolean 8.977 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster'; 8.978 + 8.979 +CREATE OPERATOR && ( 8.980 + leftarg = ecircle, 8.981 + rightarg = ebox, 8.982 + procedure = ebox_ecircle_overlap_castwrap, 8.983 + commutator = &&, 8.984 + restrict = areasel, 8.985 + join = areajoinsel 8.986 +); 8.987 + 8.988 +CREATE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster) 8.989 + RETURNS boolean 8.990 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2'; 8.991 + 8.992 +CREATE OPERATOR && ( 8.993 + leftarg = ebox, 8.994 + rightarg = ecluster, 8.995 + procedure = ebox_ecluster_overlap_castwrap, 8.996 + commutator = &&, 8.997 + restrict = areasel, 8.998 + join = areajoinsel 8.999 +); 8.1000 + 8.1001 +CREATE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox) 8.1002 + RETURNS boolean 8.1003 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster'; 8.1004 + 8.1005 +CREATE OPERATOR && ( 8.1006 + leftarg = ecluster, 8.1007 + rightarg = ebox, 8.1008 + procedure = ebox_ecluster_overlap_castwrap, 8.1009 + commutator = &&, 8.1010 + restrict = areasel, 8.1011 + join = areajoinsel 8.1012 +); 8.1013 + 8.1014 +CREATE OPERATOR &&+ ( 8.1015 + leftarg = epoint, 8.1016 + rightarg = ecluster, 8.1017 + procedure = epoint_ecluster_may_overlap_proc, 8.1018 + commutator = &&+, 8.1019 + restrict = areasel, 8.1020 + join = areajoinsel 8.1021 +); 8.1022 + 8.1023 +CREATE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint) 8.1024 + RETURNS boolean 8.1025 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 8.1026 + 8.1027 +CREATE OPERATOR &&+ ( 8.1028 + leftarg = ecluster, 8.1029 + rightarg = epoint, 8.1030 + procedure = epoint_ecluster_may_overlap_commutator, 8.1031 + commutator = &&+, 8.1032 + restrict = areasel, 8.1033 + join = areajoinsel 8.1034 +); 8.1035 + 8.1036 +CREATE OPERATOR &&+ ( 8.1037 + leftarg = ebox, 8.1038 + rightarg = ecircle, 8.1039 + procedure = ebox_ecircle_may_overlap_proc, 8.1040 + commutator = &&+, 8.1041 + restrict = areasel, 8.1042 + join = areajoinsel 8.1043 +); 8.1044 + 8.1045 +CREATE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox) 8.1046 + RETURNS boolean 8.1047 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 8.1048 + 8.1049 +CREATE OPERATOR &&+ ( 8.1050 + leftarg = ecircle, 8.1051 + rightarg = ebox, 8.1052 + procedure = ebox_ecircle_may_overlap_commutator, 8.1053 + commutator = &&+, 8.1054 + restrict = areasel, 8.1055 + join = areajoinsel 8.1056 +); 8.1057 + 8.1058 +CREATE OPERATOR &&+ ( 8.1059 + leftarg = ebox, 8.1060 + rightarg = ecluster, 8.1061 + procedure = ebox_ecluster_may_overlap_proc, 8.1062 + commutator = &&+, 8.1063 + restrict = areasel, 8.1064 + join = areajoinsel 8.1065 +); 8.1066 + 8.1067 +CREATE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox) 8.1068 + RETURNS boolean 8.1069 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 8.1070 + 8.1071 +CREATE OPERATOR &&+ ( 8.1072 + leftarg = ecluster, 8.1073 + rightarg = ebox, 8.1074 + procedure = ebox_ecluster_may_overlap_commutator, 8.1075 + commutator = &&+, 8.1076 + restrict = areasel, 8.1077 + join = areajoinsel 8.1078 +); 8.1079 + 8.1080 +CREATE OPERATOR &&+ ( 8.1081 + leftarg = ecircle, 8.1082 + rightarg = ecluster, 8.1083 + procedure = ecircle_ecluster_may_overlap_proc, 8.1084 + commutator = &&+, 8.1085 + restrict = areasel, 8.1086 + join = areajoinsel 8.1087 +); 8.1088 + 8.1089 +CREATE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle) 8.1090 + RETURNS boolean 8.1091 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 8.1092 + 8.1093 +CREATE OPERATOR &&+ ( 8.1094 + leftarg = ecluster, 8.1095 + rightarg = ecircle, 8.1096 + procedure = ecircle_ecluster_may_overlap_commutator, 8.1097 + commutator = &&+, 8.1098 + restrict = areasel, 8.1099 + join = areajoinsel 8.1100 +); 8.1101 + 8.1102 +CREATE OPERATOR &&+ ( 8.1103 + leftarg = ecluster, 8.1104 + rightarg = ecluster, 8.1105 + procedure = ecluster_may_overlap_proc, 8.1106 + commutator = &&+, 8.1107 + restrict = areasel, 8.1108 + join = areajoinsel 8.1109 +); 8.1110 + 8.1111 +CREATE OPERATOR @> ( 8.1112 + leftarg = ebox, 8.1113 + rightarg = epoint, 8.1114 + procedure = epoint_ebox_overlap_commutator, 8.1115 + commutator = <@, 8.1116 + restrict = areasel, 8.1117 + join = areajoinsel 8.1118 +); 8.1119 + 8.1120 +CREATE OPERATOR <@ ( 8.1121 + leftarg = epoint, 8.1122 + rightarg = ebox, 8.1123 + procedure = epoint_ebox_overlap_proc, 8.1124 + commutator = @>, 8.1125 + restrict = areasel, 8.1126 + join = areajoinsel 8.1127 +); 8.1128 + 8.1129 +CREATE OPERATOR @> ( 8.1130 + leftarg = ecluster, 8.1131 + rightarg = epoint, 8.1132 + procedure = epoint_ecluster_overlap_commutator, 8.1133 + commutator = <@, 8.1134 + restrict = areasel, 8.1135 + join = areajoinsel 8.1136 +); 8.1137 + 8.1138 +CREATE OPERATOR <@ ( 8.1139 + leftarg = epoint, 8.1140 + rightarg = ecluster, 8.1141 + procedure = epoint_ecluster_overlap_proc, 8.1142 + commutator = <@, 8.1143 + restrict = areasel, 8.1144 + join = areajoinsel 8.1145 +); 8.1146 + 8.1147 +CREATE OPERATOR @> ( 8.1148 + leftarg = ecluster, 8.1149 + rightarg = ecluster, 8.1150 + procedure = ecluster_contains_proc, 8.1151 + commutator = <@, 8.1152 + restrict = areasel, 8.1153 + join = areajoinsel 8.1154 +); 8.1155 + 8.1156 +CREATE FUNCTION ecluster_contains_commutator(ecluster, ecluster) 8.1157 + RETURNS boolean 8.1158 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1'; 8.1159 + 8.1160 +CREATE OPERATOR <@ ( 8.1161 + leftarg = ecluster, 8.1162 + rightarg = ecluster, 8.1163 + procedure = ecluster_contains_commutator, 8.1164 + commutator = @>, 8.1165 + restrict = areasel, 8.1166 + join = areajoinsel 8.1167 +); 8.1168 + 8.1169 +CREATE FUNCTION ebox_contains_castwrap(ebox, ebox) 8.1170 + RETURNS boolean 8.1171 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2::ecluster'; 8.1172 + 8.1173 +CREATE OPERATOR @> ( 8.1174 + leftarg = ebox, 8.1175 + rightarg = ebox, 8.1176 + procedure = ebox_contains_castwrap, 8.1177 + commutator = <@, 8.1178 + restrict = areasel, 8.1179 + join = areajoinsel 8.1180 +); 8.1181 + 8.1182 +CREATE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox) 8.1183 + RETURNS boolean 8.1184 + LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1::ecluster'; 8.1185 + 8.1186 +CREATE OPERATOR <@ ( 8.1187 + leftarg = ebox, 8.1188 + rightarg = ebox, 8.1189 + procedure = ebox_contains_swapped_castwrap, 8.1190 + commutator = @>, 8.1191 + restrict = areasel, 8.1192 + join = areajoinsel 8.1193 +); 8.1194 + 8.1195 +CREATE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster) 8.1196 + RETURNS boolean 8.1197 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2'; 8.1198 + 8.1199 +CREATE OPERATOR @> ( 8.1200 + leftarg = ebox, 8.1201 + rightarg = ecluster, 8.1202 + procedure = ebox_ecluster_contains_castwrap, 8.1203 + commutator = <@, 8.1204 + restrict = areasel, 8.1205 + join = areajoinsel 8.1206 +); 8.1207 + 8.1208 +CREATE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox) 8.1209 + RETURNS boolean 8.1210 + LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1'; 8.1211 + 8.1212 +CREATE OPERATOR <@ ( 8.1213 + leftarg = ecluster, 8.1214 + rightarg = ebox, 8.1215 + procedure = ebox_ecluster_contains_castwrap, 8.1216 + commutator = @>, 8.1217 + restrict = areasel, 8.1218 + join = areajoinsel 8.1219 +); 8.1220 + 8.1221 +CREATE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox) 8.1222 + RETURNS boolean 8.1223 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 @> $2::ecluster'; 8.1224 + 8.1225 +CREATE OPERATOR @> ( 8.1226 + leftarg = ecluster, 8.1227 + rightarg = ebox, 8.1228 + procedure = ecluster_ebox_contains_castwrap, 8.1229 + commutator = <@, 8.1230 + restrict = areasel, 8.1231 + join = areajoinsel 8.1232 +); 8.1233 + 8.1234 +CREATE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster) 8.1235 + RETURNS boolean 8.1236 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1::ecluster'; 8.1237 + 8.1238 +CREATE OPERATOR <@ ( 8.1239 + leftarg = ebox, 8.1240 + rightarg = ecluster, 8.1241 + procedure = ecluster_ebox_contains_castwrap, 8.1242 + commutator = @>, 8.1243 + restrict = areasel, 8.1244 + join = areajoinsel 8.1245 +); 8.1246 + 8.1247 +CREATE OPERATOR <-> ( 8.1248 + leftarg = epoint, 8.1249 + rightarg = epoint, 8.1250 + procedure = epoint_distance_proc, 8.1251 + commutator = <-> 8.1252 +); 8.1253 + 8.1254 +CREATE OPERATOR <-> ( 8.1255 + leftarg = epoint, 8.1256 + rightarg = ecircle, 8.1257 + procedure = epoint_ecircle_distance_proc, 8.1258 + commutator = <-> 8.1259 +); 8.1260 + 8.1261 +CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint) 8.1262 + RETURNS float8 8.1263 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 8.1264 + 8.1265 +CREATE OPERATOR <-> ( 8.1266 + leftarg = ecircle, 8.1267 + rightarg = epoint, 8.1268 + procedure = epoint_ecircle_distance_commutator, 8.1269 + commutator = <-> 8.1270 +); 8.1271 + 8.1272 +CREATE OPERATOR <-> ( 8.1273 + leftarg = epoint, 8.1274 + rightarg = ecluster, 8.1275 + procedure = epoint_ecluster_distance_proc, 8.1276 + commutator = <-> 8.1277 +); 8.1278 + 8.1279 +CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint) 8.1280 + RETURNS float8 8.1281 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 8.1282 + 8.1283 +CREATE OPERATOR <-> ( 8.1284 + leftarg = ecluster, 8.1285 + rightarg = epoint, 8.1286 + procedure = epoint_ecluster_distance_commutator, 8.1287 + commutator = <-> 8.1288 +); 8.1289 + 8.1290 +CREATE OPERATOR <-> ( 8.1291 + leftarg = ecircle, 8.1292 + rightarg = ecircle, 8.1293 + procedure = ecircle_distance_proc, 8.1294 + commutator = <-> 8.1295 +); 8.1296 + 8.1297 +CREATE OPERATOR <-> ( 8.1298 + leftarg = ecircle, 8.1299 + rightarg = ecluster, 8.1300 + procedure = ecircle_ecluster_distance_proc, 8.1301 + commutator = <-> 8.1302 +); 8.1303 + 8.1304 +CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle) 8.1305 + RETURNS float8 8.1306 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 8.1307 + 8.1308 +CREATE OPERATOR <-> ( 8.1309 + leftarg = ecluster, 8.1310 + rightarg = ecircle, 8.1311 + procedure = ecircle_ecluster_distance_commutator, 8.1312 + commutator = <-> 8.1313 +); 8.1314 + 8.1315 +CREATE OPERATOR <-> ( 8.1316 + leftarg = ecluster, 8.1317 + rightarg = ecluster, 8.1318 + procedure = ecluster_distance_proc, 8.1319 + commutator = <-> 8.1320 +); 8.1321 + 8.1322 +CREATE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox) 8.1323 + RETURNS float8 8.1324 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 8.1325 + 8.1326 +CREATE OPERATOR <-> ( 8.1327 + leftarg = epoint, 8.1328 + rightarg = ebox, 8.1329 + procedure = epoint_ebox_distance_castwrap, 8.1330 + commutator = <-> 8.1331 +); 8.1332 + 8.1333 +CREATE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint) 8.1334 + RETURNS float8 8.1335 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 8.1336 + 8.1337 +CREATE OPERATOR <-> ( 8.1338 + leftarg = ebox, 8.1339 + rightarg = epoint, 8.1340 + procedure = epoint_ebox_distance_castwrap, 8.1341 + commutator = <-> 8.1342 +); 8.1343 + 8.1344 +CREATE FUNCTION ebox_distance_castwrap(ebox, ebox) 8.1345 + RETURNS float8 8.1346 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2::ecluster'; 8.1347 + 8.1348 +CREATE OPERATOR <-> ( 8.1349 + leftarg = ebox, 8.1350 + rightarg = ebox, 8.1351 + procedure = ebox_distance_castwrap, 8.1352 + commutator = <-> 8.1353 +); 8.1354 + 8.1355 +CREATE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle) 8.1356 + RETURNS float8 8.1357 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 8.1358 + 8.1359 +CREATE OPERATOR <-> ( 8.1360 + leftarg = ebox, 8.1361 + rightarg = ecircle, 8.1362 + procedure = ebox_ecircle_distance_castwrap, 8.1363 + commutator = <-> 8.1364 +); 8.1365 + 8.1366 +CREATE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox) 8.1367 + RETURNS float8 8.1368 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 8.1369 + 8.1370 +CREATE OPERATOR <-> ( 8.1371 + leftarg = ecircle, 8.1372 + rightarg = ebox, 8.1373 + procedure = ebox_ecircle_distance_castwrap, 8.1374 + commutator = <-> 8.1375 +); 8.1376 + 8.1377 +CREATE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster) 8.1378 + RETURNS float8 8.1379 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 8.1380 + 8.1381 +CREATE OPERATOR <-> ( 8.1382 + leftarg = ebox, 8.1383 + rightarg = ecluster, 8.1384 + procedure = ebox_ecluster_distance_castwrap, 8.1385 + commutator = <-> 8.1386 +); 8.1387 + 8.1388 +CREATE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox) 8.1389 + RETURNS float8 8.1390 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 8.1391 + 8.1392 +CREATE OPERATOR <-> ( 8.1393 + leftarg = ecluster, 8.1394 + rightarg = ebox, 8.1395 + procedure = ebox_ecluster_distance_castwrap, 8.1396 + commutator = <-> 8.1397 +); 8.1398 + 8.1399 +CREATE OPERATOR <=> ( 8.1400 + leftarg = ecluster, 8.1401 + rightarg = epoint_with_sample_count, 8.1402 + procedure = fair_distance_operator_proc 8.1403 +); 8.1404 + 8.1405 + 8.1406 +---------------- 8.1407 +-- GiST index -- 8.1408 +---------------- 8.1409 + 8.1410 +CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 8.1411 + RETURNS boolean 8.1412 + LANGUAGE C STRICT 8.1413 + AS '$libdir/latlon-v0009', 'pgl_gist_consistent'; 8.1414 + 8.1415 +CREATE FUNCTION pgl_gist_union(internal, internal) 8.1416 + RETURNS internal 8.1417 + LANGUAGE C STRICT 8.1418 + AS '$libdir/latlon-v0009', 'pgl_gist_union'; 8.1419 + 8.1420 +CREATE FUNCTION pgl_gist_compress_epoint(internal) 8.1421 + RETURNS internal 8.1422 + LANGUAGE C STRICT 8.1423 + AS '$libdir/latlon-v0009', 'pgl_gist_compress_epoint'; 8.1424 + 8.1425 +CREATE FUNCTION pgl_gist_compress_ecircle(internal) 8.1426 + RETURNS internal 8.1427 + LANGUAGE C STRICT 8.1428 + AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecircle'; 8.1429 + 8.1430 +CREATE FUNCTION pgl_gist_compress_ecluster(internal) 8.1431 + RETURNS internal 8.1432 + LANGUAGE C STRICT 8.1433 + AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecluster'; 8.1434 + 8.1435 +CREATE FUNCTION pgl_gist_decompress(internal) 8.1436 + RETURNS internal 8.1437 + LANGUAGE C STRICT 8.1438 + AS '$libdir/latlon-v0009', 'pgl_gist_decompress'; 8.1439 + 8.1440 +CREATE FUNCTION pgl_gist_penalty(internal, internal, internal) 8.1441 + RETURNS internal 8.1442 + LANGUAGE C STRICT 8.1443 + AS '$libdir/latlon-v0009', 'pgl_gist_penalty'; 8.1444 + 8.1445 +CREATE FUNCTION pgl_gist_picksplit(internal, internal) 8.1446 + RETURNS internal 8.1447 + LANGUAGE C STRICT 8.1448 + AS '$libdir/latlon-v0009', 'pgl_gist_picksplit'; 8.1449 + 8.1450 +CREATE FUNCTION pgl_gist_same(internal, internal, internal) 8.1451 + RETURNS internal 8.1452 + LANGUAGE C STRICT 8.1453 + AS '$libdir/latlon-v0009', 'pgl_gist_same'; 8.1454 + 8.1455 +CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 8.1456 + RETURNS internal 8.1457 + LANGUAGE C STRICT 8.1458 + AS '$libdir/latlon-v0009', 'pgl_gist_distance'; 8.1459 + 8.1460 +CREATE OPERATOR CLASS epoint_ops 8.1461 + DEFAULT FOR TYPE epoint USING gist AS 8.1462 + OPERATOR 11 = , 8.1463 + OPERATOR 22 && (epoint, ebox), 8.1464 + OPERATOR 222 <@ (epoint, ebox), 8.1465 + OPERATOR 23 && (epoint, ecircle), 8.1466 + OPERATOR 24 && (epoint, ecluster), 8.1467 + OPERATOR 124 &&+ (epoint, ecluster), 8.1468 + OPERATOR 224 <@ (epoint, ecluster), 8.1469 + OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 8.1470 + OPERATOR 32 <-> (epoint, ebox) FOR ORDER BY float_ops, 8.1471 + OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 8.1472 + OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 8.1473 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 8.1474 + FUNCTION 2 pgl_gist_union(internal, internal), 8.1475 + FUNCTION 3 pgl_gist_compress_epoint(internal), 8.1476 + FUNCTION 4 pgl_gist_decompress(internal), 8.1477 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 8.1478 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 8.1479 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 8.1480 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 8.1481 + STORAGE ekey_point; 8.1482 + 8.1483 +CREATE OPERATOR CLASS ecircle_ops 8.1484 + DEFAULT FOR TYPE ecircle USING gist AS 8.1485 + OPERATOR 13 = , 8.1486 + OPERATOR 21 && (ecircle, epoint), 8.1487 + OPERATOR 22 && (ecircle, ebox), 8.1488 + OPERATOR 122 &&+ (ecircle, ebox), 8.1489 + OPERATOR 23 && (ecircle, ecircle), 8.1490 + OPERATOR 24 && (ecircle, ecluster), 8.1491 + OPERATOR 124 &&+ (ecircle, ecluster), 8.1492 + OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 8.1493 + OPERATOR 32 <-> (ecircle, ebox) FOR ORDER BY float_ops, 8.1494 + OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 8.1495 + OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 8.1496 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 8.1497 + FUNCTION 2 pgl_gist_union(internal, internal), 8.1498 + FUNCTION 3 pgl_gist_compress_ecircle(internal), 8.1499 + FUNCTION 4 pgl_gist_decompress(internal), 8.1500 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 8.1501 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 8.1502 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 8.1503 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 8.1504 + STORAGE ekey_area; 8.1505 + 8.1506 +CREATE OPERATOR CLASS ecluster_ops 8.1507 + DEFAULT FOR TYPE ecluster USING gist AS 8.1508 + OPERATOR 21 && (ecluster, epoint), 8.1509 + OPERATOR 121 &&+ (ecluster, epoint), 8.1510 + OPERATOR 221 @> (ecluster, epoint), 8.1511 + OPERATOR 22 && (ecluster, ebox), 8.1512 + OPERATOR 122 &&+ (ecluster, ebox), 8.1513 + OPERATOR 222 @> (ecluster, ebox), 8.1514 + OPERATOR 322 <@ (ecluster, ebox), 8.1515 + OPERATOR 23 && (ecluster, ecircle), 8.1516 + OPERATOR 123 &&+ (ecluster, ecircle), 8.1517 + OPERATOR 24 && (ecluster, ecluster), 8.1518 + OPERATOR 124 &&+ (ecluster, ecluster), 8.1519 + OPERATOR 224 @> (ecluster, ecluster), 8.1520 + OPERATOR 324 <@ (ecluster, ecluster), 8.1521 + OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops, 8.1522 + OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops, 8.1523 + OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops, 8.1524 + OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops, 8.1525 + OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops, 8.1526 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 8.1527 + FUNCTION 2 pgl_gist_union(internal, internal), 8.1528 + FUNCTION 3 pgl_gist_compress_ecluster(internal), 8.1529 + FUNCTION 4 pgl_gist_decompress(internal), 8.1530 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 8.1531 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 8.1532 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 8.1533 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 8.1534 + STORAGE ekey_area; 8.1535 + 8.1536 + 8.1537 +--------------------- 8.1538 +-- alias functions -- 8.1539 +--------------------- 8.1540 + 8.1541 +CREATE FUNCTION distance(epoint, epoint) 8.1542 + RETURNS float8 8.1543 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2'; 8.1544 + 8.1545 +CREATE FUNCTION distance(ecluster, epoint) 8.1546 + RETURNS float8 8.1547 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2'; 8.1548 + 8.1549 +CREATE FUNCTION distance_within(epoint, epoint, float8) 8.1550 + RETURNS boolean 8.1551 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)'; 8.1552 + 8.1553 +CREATE FUNCTION distance_within(ecluster, epoint, float8) 8.1554 + RETURNS boolean 8.1555 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)'; 8.1556 + 8.1557 +CREATE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) 8.1558 + RETURNS float8 8.1559 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <=> epoint_with_sample_count($2, $3)'; 8.1560 + 8.1561 + 8.1562 +-------------------------------- 8.1563 +-- other data storage formats -- 8.1564 +-------------------------------- 8.1565 + 8.1566 +CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint') 8.1567 + RETURNS epoint 8.1568 + LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 8.1569 + DECLARE 8.1570 + "result" epoint; 8.1571 + BEGIN 8.1572 + IF $3 = 'epoint_lonlat' THEN 8.1573 + -- avoid dynamic command execution for better performance 8.1574 + RETURN epoint($2, $1); 8.1575 + END IF; 8.1576 + IF $3 = 'epoint' OR $3 = 'epoint_latlon' THEN 8.1577 + -- avoid dynamic command execution for better performance 8.1578 + RETURN epoint($1, $2); 8.1579 + END IF; 8.1580 + EXECUTE 'SELECT ' || $3 || '($1, $2)' INTO STRICT "result" USING $1, $2; 8.1581 + RETURN "result"; 8.1582 + END; 8.1583 + $$; 8.1584 + 8.1585 +CREATE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat') 8.1586 + RETURNS SETOF jsonb 8.1587 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.1588 + SELECT "result" FROM 8.1589 + ( SELECT jsonb_array_length($1) - 1 ) AS "lastindex_row" ("lastindex") 8.1590 + CROSS JOIN LATERAL jsonb_array_elements( 8.1591 + CASE WHEN 8.1592 + coords_to_epoint( 8.1593 + ($1->0->>0)::float8, 8.1594 + ($1->0->>1)::float8, 8.1595 + $2 8.1596 + ) = coords_to_epoint( 8.1597 + ($1->"lastindex"->>0)::float8, 8.1598 + ($1->"lastindex"->>1)::float8, 8.1599 + $2 8.1600 + ) 8.1601 + THEN 8.1602 + $1 - "lastindex" 8.1603 + ELSE 8.1604 + $1 8.1605 + END 8.1606 + ) AS "result_row" ("result") 8.1607 + $$; 8.1608 + 8.1609 +CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat') 8.1610 + RETURNS epoint 8.1611 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.1612 + SELECT CASE 8.1613 + WHEN $1->>'type' = 'Point' THEN 8.1614 + coords_to_epoint( 8.1615 + ($1->'coordinates'->>0)::float8, 8.1616 + ($1->'coordinates'->>1)::float8, 8.1617 + $2 8.1618 + ) 8.1619 + WHEN $1->>'type' = 'Feature' THEN 8.1620 + GeoJSON_to_epoint($1->'geometry', $2) 8.1621 + ELSE 8.1622 + NULL 8.1623 + END 8.1624 + $$; 8.1625 + 8.1626 +CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat') 8.1627 + RETURNS ecluster 8.1628 + LANGUAGE sql IMMUTABLE STRICT AS $$ 8.1629 + SELECT CASE $1->>'type' 8.1630 + WHEN 'Point' THEN 8.1631 + coords_to_epoint( 8.1632 + ($1->'coordinates'->>0)::float8, 8.1633 + ($1->'coordinates'->>1)::float8, 8.1634 + $2 8.1635 + )::ecluster 8.1636 + WHEN 'MultiPoint' THEN 8.1637 + ( SELECT ecluster_create_multipoint(array_agg( 8.1638 + coords_to_epoint( 8.1639 + ("coord"->>0)::float8, 8.1640 + ("coord"->>1)::float8, 8.1641 + $2 8.1642 + ) 8.1643 + )) 8.1644 + FROM jsonb_array_elements($1->'coordinates') AS "coord" 8.1645 + ) 8.1646 + WHEN 'LineString' THEN 8.1647 + ( SELECT ecluster_create_path(array_agg( 8.1648 + coords_to_epoint( 8.1649 + ("coord"->>0)::float8, 8.1650 + ("coord"->>1)::float8, 8.1651 + $2 8.1652 + ) 8.1653 + )) 8.1654 + FROM jsonb_array_elements($1->'coordinates') AS "coord" 8.1655 + ) 8.1656 + WHEN 'MultiLineString' THEN 8.1657 + ( SELECT ecluster_concat(array_agg( 8.1658 + ( SELECT ecluster_create_path(array_agg( 8.1659 + coords_to_epoint( 8.1660 + ("coord"->>0)::float8, 8.1661 + ("coord"->>1)::float8, 8.1662 + $2 8.1663 + ) 8.1664 + )) 8.1665 + FROM jsonb_array_elements("coord_array") AS "coord" 8.1666 + ) 8.1667 + )) 8.1668 + FROM jsonb_array_elements($1->'coordinates') AS "coord_array" 8.1669 + ) 8.1670 + WHEN 'Polygon' THEN 8.1671 + ( SELECT ecluster_concat(array_agg( 8.1672 + ( SELECT ecluster_create_polygon(array_agg( 8.1673 + coords_to_epoint( 8.1674 + ("coord"->>0)::float8, 8.1675 + ("coord"->>1)::float8, 8.1676 + $2 8.1677 + ) 8.1678 + )) 8.1679 + FROM GeoJSON_LinearRing_vertices("coord_array", $2) AS "coord" 8.1680 + ) 8.1681 + )) 8.1682 + FROM jsonb_array_elements($1->'coordinates') AS "coord_array" 8.1683 + ) 8.1684 + WHEN 'MultiPolygon' THEN 8.1685 + ( SELECT ecluster_concat(array_agg( 8.1686 + ( SELECT ecluster_concat(array_agg( 8.1687 + ( SELECT ecluster_create_polygon(array_agg( 8.1688 + coords_to_epoint( 8.1689 + ("coord"->>0)::float8, 8.1690 + ("coord"->>1)::float8, 8.1691 + $2 8.1692 + ) 8.1693 + )) 8.1694 + FROM GeoJSON_LinearRing_vertices("coord_array", $2) AS "coord" 8.1695 + ) 8.1696 + )) 8.1697 + FROM jsonb_array_elements("coord_array_array") AS "coord_array" 8.1698 + ) 8.1699 + )) 8.1700 + FROM jsonb_array_elements($1->'coordinates') AS "coord_array_array" 8.1701 + ) 8.1702 + WHEN 'GeometryCollection' THEN 8.1703 + ( SELECT ecluster_concat(array_agg( 8.1704 + GeoJSON_to_ecluster("geometry", $2) 8.1705 + )) 8.1706 + FROM jsonb_array_elements($1->'geometries') AS "geometry" 8.1707 + ) 8.1708 + WHEN 'Feature' THEN 8.1709 + GeoJSON_to_ecluster($1->'geometry', $2) 8.1710 + WHEN 'FeatureCollection' THEN 8.1711 + ( SELECT ecluster_concat(array_agg( 8.1712 + GeoJSON_to_ecluster("feature", $2) 8.1713 + )) 8.1714 + FROM jsonb_array_elements($1->'features') AS "feature" 8.1715 + ) 8.1716 + ELSE 8.1717 + NULL 8.1718 + END 8.1719 + $$; 8.1720 +