pgLatLon
changeset 83:037e28f426e7 v0.16
Set version to 0.16
| author | jbe |
|---|---|
| date | Thu Oct 23 15:31:50 2025 +0200 (38 hours ago) |
| parents | 8a08dc69de98 |
| children | 8453a4a84555 |
| files | GNUmakefile README.html README.md latlon--0.14--0.15.sql latlon--0.15--0.16.sql latlon--0.15.sql latlon--0.16.sql latlon.control |
line diff
1.1 --- a/GNUmakefile Thu Oct 23 15:19:13 2025 +0200 1.2 +++ b/GNUmakefile Thu Oct 23 15:31:50 2025 +0200 1.3 @@ -1,5 +1,5 @@ 1.4 EXTENSION = latlon 1.5 -DATA = latlon--0.14--0.15.sql latlon--0.15.sql 1.6 +DATA = latlon--0.15--0.16.sql latlon--0.16.sql 1.7 MODULES = latlon-v0010 1.8 1.9 PG_CONFIG = pg_config
2.1 --- a/README.html Thu Oct 23 15:19:13 2025 +0200 2.2 +++ b/README.html Thu Oct 23 15:31:50 2025 +0200 2.3 @@ -1,5 +1,5 @@ 2.4 -<html><head><title>pgLatLon v0.15 documentation</title></head><body> 2.5 -<h1>pgLatLon v0.15 documentation</h1> 2.6 +<html><head><title>pgLatLon v0.16 documentation</title></head><body> 2.7 +<h1>pgLatLon v0.16 documentation</h1> 2.8 <p>pgLatLon is a spatial database extension for the PostgreSQL object-relational 2.9 database management system providing geographic data types and spatial indexing 2.10 for the WGS-84 spheroid.</p>
3.1 --- a/README.md Thu Oct 23 15:19:13 2025 +0200 3.2 +++ b/README.md Thu Oct 23 15:31:50 2025 +0200 3.3 @@ -1,4 +1,4 @@ 3.4 -pgLatLon v0.15 documentation 3.5 +pgLatLon v0.16 documentation 3.6 ============================ 3.7 3.8 pgLatLon is a spatial database extension for the PostgreSQL object-relational
4.1 --- a/latlon--0.14--0.15.sql Thu Oct 23 15:19:13 2025 +0200 4.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 4.3 @@ -1,1016 +0,0 @@ 4.4 -SET LOCAL search_path TO @extschema@; 4.5 - 4.6 - 4.7 ------------------------------------------------------------- 4.8 --- dummy input/output functions for dummy index key types -- 4.9 ------------------------------------------------------------- 4.10 - 4.11 -CREATE OR REPLACE FUNCTION ekey_point_in_dummy(cstring) 4.12 - RETURNS ekey_point 4.13 - LANGUAGE C IMMUTABLE STRICT 4.14 - AS '$libdir/latlon-v0010', 'pgl_notimpl'; 4.15 - 4.16 -CREATE OR REPLACE FUNCTION ekey_point_out_dummy(ekey_point) 4.17 - RETURNS cstring 4.18 - LANGUAGE C IMMUTABLE STRICT 4.19 - AS '$libdir/latlon-v0010', 'pgl_notimpl'; 4.20 - 4.21 -CREATE OR REPLACE FUNCTION ekey_area_in_dummy(cstring) 4.22 - RETURNS ekey_area 4.23 - LANGUAGE C IMMUTABLE STRICT 4.24 - AS '$libdir/latlon-v0010', 'pgl_notimpl'; 4.25 - 4.26 -CREATE OR REPLACE FUNCTION ekey_area_out_dummy(ekey_area) 4.27 - RETURNS cstring 4.28 - LANGUAGE C IMMUTABLE STRICT 4.29 - AS '$libdir/latlon-v0010', 'pgl_notimpl'; 4.30 - 4.31 - 4.32 --------------------------- 4.33 --- text input functions -- 4.34 --------------------------- 4.35 - 4.36 -CREATE OR REPLACE FUNCTION epoint_in(cstring) 4.37 - RETURNS epoint 4.38 - LANGUAGE C IMMUTABLE STRICT 4.39 - AS '$libdir/latlon-v0010', 'pgl_epoint_in'; 4.40 - 4.41 -CREATE OR REPLACE FUNCTION epoint_with_sample_count_in(cstring) 4.42 - RETURNS epoint_with_sample_count 4.43 - LANGUAGE C IMMUTABLE STRICT 4.44 - AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_in'; 4.45 - 4.46 -CREATE OR REPLACE FUNCTION ebox_in(cstring) 4.47 - RETURNS ebox 4.48 - LANGUAGE C IMMUTABLE STRICT 4.49 - AS '$libdir/latlon-v0010', 'pgl_ebox_in'; 4.50 - 4.51 -CREATE OR REPLACE FUNCTION ecircle_in(cstring) 4.52 - RETURNS ecircle 4.53 - LANGUAGE C IMMUTABLE STRICT 4.54 - AS '$libdir/latlon-v0010', 'pgl_ecircle_in'; 4.55 - 4.56 -CREATE OR REPLACE FUNCTION ecluster_in(cstring) 4.57 - RETURNS ecluster 4.58 - LANGUAGE C IMMUTABLE STRICT 4.59 - AS '$libdir/latlon-v0010', 'pgl_ecluster_in'; 4.60 - 4.61 - 4.62 ---------------------------- 4.63 --- text output functions -- 4.64 ---------------------------- 4.65 - 4.66 -CREATE OR REPLACE FUNCTION epoint_out(epoint) 4.67 - RETURNS cstring 4.68 - LANGUAGE C IMMUTABLE STRICT 4.69 - AS '$libdir/latlon-v0010', 'pgl_epoint_out'; 4.70 - 4.71 -CREATE OR REPLACE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) 4.72 - RETURNS cstring 4.73 - LANGUAGE C IMMUTABLE STRICT 4.74 - AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_out'; 4.75 - 4.76 -CREATE OR REPLACE FUNCTION ebox_out(ebox) 4.77 - RETURNS cstring 4.78 - LANGUAGE C IMMUTABLE STRICT 4.79 - AS '$libdir/latlon-v0010', 'pgl_ebox_out'; 4.80 - 4.81 -CREATE OR REPLACE FUNCTION ecircle_out(ecircle) 4.82 - RETURNS cstring 4.83 - LANGUAGE C IMMUTABLE STRICT 4.84 - AS '$libdir/latlon-v0010', 'pgl_ecircle_out'; 4.85 - 4.86 -CREATE OR REPLACE FUNCTION ecluster_out(ecluster) 4.87 - RETURNS cstring 4.88 - LANGUAGE C IMMUTABLE STRICT 4.89 - AS '$libdir/latlon-v0010', 'pgl_ecluster_out'; 4.90 - 4.91 - 4.92 --------------------------- 4.93 --- binary I/O functions -- 4.94 --------------------------- 4.95 - 4.96 -CREATE OR REPLACE FUNCTION epoint_recv(internal) 4.97 - RETURNS epoint 4.98 - LANGUAGE C IMMUTABLE STRICT 4.99 - AS '$libdir/latlon-v0010', 'pgl_epoint_recv'; 4.100 - 4.101 -CREATE OR REPLACE FUNCTION ebox_recv(internal) 4.102 - RETURNS ebox 4.103 - LANGUAGE C IMMUTABLE STRICT 4.104 - AS '$libdir/latlon-v0010', 'pgl_ebox_recv'; 4.105 - 4.106 -CREATE OR REPLACE FUNCTION ecircle_recv(internal) 4.107 - RETURNS ecircle 4.108 - LANGUAGE C IMMUTABLE STRICT 4.109 - AS '$libdir/latlon-v0010', 'pgl_ecircle_recv'; 4.110 - 4.111 -CREATE OR REPLACE FUNCTION epoint_send(epoint) 4.112 - RETURNS bytea 4.113 - LANGUAGE C IMMUTABLE STRICT 4.114 - AS '$libdir/latlon-v0010', 'pgl_epoint_send'; 4.115 - 4.116 -CREATE OR REPLACE FUNCTION ebox_send(ebox) 4.117 - RETURNS bytea 4.118 - LANGUAGE C IMMUTABLE STRICT 4.119 - AS '$libdir/latlon-v0010', 'pgl_ebox_send'; 4.120 - 4.121 -CREATE OR REPLACE FUNCTION ecircle_send(ecircle) 4.122 - RETURNS bytea 4.123 - LANGUAGE C IMMUTABLE STRICT 4.124 - AS '$libdir/latlon-v0010', 'pgl_ecircle_send'; 4.125 - 4.126 - 4.127 --------------------- 4.128 --- B-tree support -- 4.129 --------------------- 4.130 - 4.131 --- begin of B-tree support for epoint 4.132 - 4.133 -CREATE OR REPLACE FUNCTION epoint_btree_lt(epoint, epoint) 4.134 - RETURNS boolean 4.135 - LANGUAGE C IMMUTABLE STRICT 4.136 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_lt'; 4.137 - 4.138 -CREATE OR REPLACE FUNCTION epoint_btree_le(epoint, epoint) 4.139 - RETURNS boolean 4.140 - LANGUAGE C IMMUTABLE STRICT 4.141 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_le'; 4.142 - 4.143 -CREATE OR REPLACE FUNCTION epoint_btree_eq(epoint, epoint) 4.144 - RETURNS boolean 4.145 - LANGUAGE C IMMUTABLE STRICT 4.146 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_eq'; 4.147 - 4.148 -CREATE OR REPLACE FUNCTION epoint_btree_ne(epoint, epoint) 4.149 - RETURNS boolean 4.150 - LANGUAGE C IMMUTABLE STRICT 4.151 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ne'; 4.152 - 4.153 -CREATE OR REPLACE FUNCTION epoint_btree_ge(epoint, epoint) 4.154 - RETURNS boolean 4.155 - LANGUAGE C IMMUTABLE STRICT 4.156 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ge'; 4.157 - 4.158 -CREATE OR REPLACE FUNCTION epoint_btree_gt(epoint, epoint) 4.159 - RETURNS boolean 4.160 - LANGUAGE C IMMUTABLE STRICT 4.161 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_gt'; 4.162 - 4.163 -CREATE OR REPLACE FUNCTION epoint_btree_cmp(epoint, epoint) 4.164 - RETURNS int4 4.165 - LANGUAGE C IMMUTABLE STRICT 4.166 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_cmp'; 4.167 - 4.168 --- end of B-tree support for epoint 4.169 - 4.170 --- begin of B-tree support for ebox 4.171 - 4.172 -CREATE OR REPLACE FUNCTION ebox_btree_lt(ebox, ebox) 4.173 - RETURNS boolean 4.174 - LANGUAGE C IMMUTABLE STRICT 4.175 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_lt'; 4.176 - 4.177 -CREATE OR REPLACE FUNCTION ebox_btree_le(ebox, ebox) 4.178 - RETURNS boolean 4.179 - LANGUAGE C IMMUTABLE STRICT 4.180 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_le'; 4.181 - 4.182 -CREATE OR REPLACE FUNCTION ebox_btree_eq(ebox, ebox) 4.183 - RETURNS boolean 4.184 - LANGUAGE C IMMUTABLE STRICT 4.185 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_eq'; 4.186 - 4.187 -CREATE OR REPLACE FUNCTION ebox_btree_ne(ebox, ebox) 4.188 - RETURNS boolean 4.189 - LANGUAGE C IMMUTABLE STRICT 4.190 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ne'; 4.191 - 4.192 -CREATE OR REPLACE FUNCTION ebox_btree_ge(ebox, ebox) 4.193 - RETURNS boolean 4.194 - LANGUAGE C IMMUTABLE STRICT 4.195 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ge'; 4.196 - 4.197 -CREATE OR REPLACE FUNCTION ebox_btree_gt(ebox, ebox) 4.198 - RETURNS boolean 4.199 - LANGUAGE C IMMUTABLE STRICT 4.200 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_gt'; 4.201 - 4.202 -CREATE OR REPLACE FUNCTION ebox_btree_cmp(ebox, ebox) 4.203 - RETURNS int4 4.204 - LANGUAGE C IMMUTABLE STRICT 4.205 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_cmp'; 4.206 - 4.207 --- end of B-tree support for ebox 4.208 - 4.209 --- begin of B-tree support for ecircle 4.210 - 4.211 -CREATE OR REPLACE FUNCTION ecircle_btree_lt(ecircle, ecircle) 4.212 - RETURNS boolean 4.213 - LANGUAGE C IMMUTABLE STRICT 4.214 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_lt'; 4.215 - 4.216 -CREATE OR REPLACE FUNCTION ecircle_btree_le(ecircle, ecircle) 4.217 - RETURNS boolean 4.218 - LANGUAGE C IMMUTABLE STRICT 4.219 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_le'; 4.220 - 4.221 -CREATE OR REPLACE FUNCTION ecircle_btree_eq(ecircle, ecircle) 4.222 - RETURNS boolean 4.223 - LANGUAGE C IMMUTABLE STRICT 4.224 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_eq'; 4.225 - 4.226 -CREATE OR REPLACE FUNCTION ecircle_btree_ne(ecircle, ecircle) 4.227 - RETURNS boolean 4.228 - LANGUAGE C IMMUTABLE STRICT 4.229 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ne'; 4.230 - 4.231 -CREATE OR REPLACE FUNCTION ecircle_btree_ge(ecircle, ecircle) 4.232 - RETURNS boolean 4.233 - LANGUAGE C IMMUTABLE STRICT 4.234 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ge'; 4.235 - 4.236 -CREATE OR REPLACE FUNCTION ecircle_btree_gt(ecircle, ecircle) 4.237 - RETURNS boolean 4.238 - LANGUAGE C IMMUTABLE STRICT 4.239 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_gt'; 4.240 - 4.241 -CREATE OR REPLACE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 4.242 - RETURNS int4 4.243 - LANGUAGE C IMMUTABLE STRICT 4.244 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_cmp'; 4.245 - 4.246 --- end of B-tree support for ecircle 4.247 - 4.248 - 4.249 ----------------- 4.250 --- type casts -- 4.251 ----------------- 4.252 - 4.253 -CREATE OR REPLACE FUNCTION cast_epoint_to_ebox(epoint) 4.254 - RETURNS ebox 4.255 - LANGUAGE C IMMUTABLE STRICT 4.256 - AS '$libdir/latlon-v0010', 'pgl_epoint_to_ebox'; 4.257 - 4.258 -CREATE OR REPLACE FUNCTION cast_epoint_to_ecircle(epoint) 4.259 - RETURNS ecircle 4.260 - LANGUAGE C IMMUTABLE STRICT 4.261 - AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecircle'; 4.262 - 4.263 -CREATE OR REPLACE FUNCTION cast_epoint_to_ecluster(epoint) 4.264 - RETURNS ecluster 4.265 - LANGUAGE C IMMUTABLE STRICT 4.266 - AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecluster'; 4.267 - 4.268 -CREATE OR REPLACE FUNCTION cast_ebox_to_ecluster(ebox) 4.269 - RETURNS ecluster 4.270 - LANGUAGE C IMMUTABLE STRICT 4.271 - AS '$libdir/latlon-v0010', 'pgl_ebox_to_ecluster'; 4.272 - 4.273 - 4.274 ---------------------------- 4.275 --- constructor functions -- 4.276 ---------------------------- 4.277 - 4.278 -CREATE OR REPLACE FUNCTION epoint(float8, float8) 4.279 - RETURNS epoint 4.280 - LANGUAGE C IMMUTABLE STRICT 4.281 - AS '$libdir/latlon-v0010', 'pgl_create_epoint'; 4.282 - 4.283 -CREATE OR REPLACE FUNCTION epoint_latlon(float8, float8) 4.284 - RETURNS epoint 4.285 - LANGUAGE SQL IMMUTABLE STRICT AS $$ 4.286 - SELECT @extschema@.epoint($1, $2) 4.287 - $$; 4.288 - 4.289 -CREATE OR REPLACE FUNCTION epoint_lonlat(float8, float8) 4.290 - RETURNS epoint 4.291 - LANGUAGE SQL IMMUTABLE STRICT AS $$ 4.292 - SELECT @extschema@.epoint($2, $1) 4.293 - $$; 4.294 - 4.295 -CREATE OR REPLACE FUNCTION epoint_with_sample_count(epoint, int4) 4.296 - RETURNS epoint_with_sample_count 4.297 - LANGUAGE C IMMUTABLE STRICT 4.298 - AS '$libdir/latlon-v0010', 'pgl_create_epoint_with_sample_count'; 4.299 - 4.300 -CREATE OR REPLACE FUNCTION empty_ebox() 4.301 - RETURNS ebox 4.302 - LANGUAGE C IMMUTABLE STRICT 4.303 - AS '$libdir/latlon-v0010', 'pgl_create_empty_ebox'; 4.304 - 4.305 -CREATE OR REPLACE FUNCTION ebox(float8, float8, float8, float8) 4.306 - RETURNS ebox 4.307 - LANGUAGE C IMMUTABLE STRICT 4.308 - AS '$libdir/latlon-v0010', 'pgl_create_ebox'; 4.309 - 4.310 -CREATE OR REPLACE FUNCTION ebox(epoint, epoint) 4.311 - RETURNS ebox 4.312 - LANGUAGE C IMMUTABLE STRICT 4.313 - AS '$libdir/latlon-v0010', 'pgl_create_ebox_from_epoints'; 4.314 - 4.315 -CREATE OR REPLACE FUNCTION ecircle(float8, float8, float8) 4.316 - RETURNS ecircle 4.317 - LANGUAGE C IMMUTABLE STRICT 4.318 - AS '$libdir/latlon-v0010', 'pgl_create_ecircle'; 4.319 - 4.320 -CREATE OR REPLACE FUNCTION ecircle(epoint, float8) 4.321 - RETURNS ecircle 4.322 - LANGUAGE C IMMUTABLE STRICT 4.323 - AS '$libdir/latlon-v0010', 'pgl_create_ecircle_from_epoint'; 4.324 - 4.325 -CREATE OR REPLACE FUNCTION ecluster_concat(ecluster[]) 4.326 - RETURNS ecluster 4.327 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.328 - SELECT pg_catalog.array_to_string($1, ' ')::@extschema@.ecluster 4.329 - $$; 4.330 - 4.331 -CREATE OR REPLACE FUNCTION ecluster_concat(ecluster, ecluster) 4.332 - RETURNS ecluster 4.333 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.334 - SELECT ( 4.335 - $1::pg_catalog.text OPERATOR(pg_catalog.||) ' ' OPERATOR(pg_catalog.||) 4.336 - $2::pg_catalog.text 4.337 - )::@extschema@.ecluster 4.338 - $$; 4.339 - 4.340 -CREATE OR REPLACE FUNCTION ecluster_create_multipoint(epoint[]) 4.341 - RETURNS ecluster 4.342 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.343 - SELECT 4.344 - pg_catalog.array_to_string( 4.345 - pg_catalog.array_agg( 4.346 - 'point (' OPERATOR(pg_catalog.||) unnest OPERATOR(pg_catalog.||) ')' 4.347 - ), 4.348 - ' ' 4.349 - )::@extschema@.ecluster 4.350 - FROM pg_catalog.unnest($1) 4.351 - $$; 4.352 - 4.353 -CREATE OR REPLACE FUNCTION ecluster_create_path(epoint[]) 4.354 - RETURNS ecluster 4.355 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.356 - SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 4.357 - 'empty'::@extschema@.ecluster 4.358 - ELSE 4.359 - ( 4.360 - 'path (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')' 4.361 - )::@extschema@.ecluster 4.362 - END 4.363 - FROM pg_catalog.array_to_string($1, ' ') AS "str" 4.364 - $$; 4.365 - 4.366 -CREATE OR REPLACE FUNCTION ecluster_create_outline(epoint[]) 4.367 - RETURNS ecluster 4.368 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.369 - SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 4.370 - 'empty'::@extschema@.ecluster 4.371 - ELSE 4.372 - ( 4.373 - 'outline (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')' 4.374 - )::@extschema@.ecluster 4.375 - END 4.376 - FROM pg_catalog.array_to_string($1, ' ') AS "str" 4.377 - $$; 4.378 - 4.379 -CREATE OR REPLACE FUNCTION ecluster_create_polygon(epoint[]) 4.380 - RETURNS ecluster 4.381 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.382 - SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 4.383 - 'empty'::@extschema@.ecluster 4.384 - ELSE 4.385 - ( 4.386 - 'polygon (' OPERATOR(pg_catalog.||) pg_catalog.array_to_string($1, ' ') 4.387 - OPERATOR(pg_catalog.||) ')' 4.388 - )::@extschema@.ecluster 4.389 - END 4.390 - FROM pg_catalog.array_to_string($1, ' ') AS "str" 4.391 - $$; 4.392 - 4.393 - 4.394 ----------------------- 4.395 --- getter functions -- 4.396 ----------------------- 4.397 - 4.398 -CREATE OR REPLACE FUNCTION latitude(epoint) 4.399 - RETURNS float8 4.400 - LANGUAGE C IMMUTABLE STRICT 4.401 - AS '$libdir/latlon-v0010', 'pgl_epoint_lat'; 4.402 - 4.403 -CREATE OR REPLACE FUNCTION longitude(epoint) 4.404 - RETURNS float8 4.405 - LANGUAGE C IMMUTABLE STRICT 4.406 - AS '$libdir/latlon-v0010', 'pgl_epoint_lon'; 4.407 - 4.408 -CREATE OR REPLACE FUNCTION min_latitude(ebox) 4.409 - RETURNS float8 4.410 - LANGUAGE C IMMUTABLE STRICT 4.411 - AS '$libdir/latlon-v0010', 'pgl_ebox_lat_min'; 4.412 - 4.413 -CREATE OR REPLACE FUNCTION max_latitude(ebox) 4.414 - RETURNS float8 4.415 - LANGUAGE C IMMUTABLE STRICT 4.416 - AS '$libdir/latlon-v0010', 'pgl_ebox_lat_max'; 4.417 - 4.418 -CREATE OR REPLACE FUNCTION min_longitude(ebox) 4.419 - RETURNS float8 4.420 - LANGUAGE C IMMUTABLE STRICT 4.421 - AS '$libdir/latlon-v0010', 'pgl_ebox_lon_min'; 4.422 - 4.423 -CREATE OR REPLACE FUNCTION max_longitude(ebox) 4.424 - RETURNS float8 4.425 - LANGUAGE C IMMUTABLE STRICT 4.426 - AS '$libdir/latlon-v0010', 'pgl_ebox_lon_max'; 4.427 - 4.428 -CREATE OR REPLACE FUNCTION center(ecircle) 4.429 - RETURNS epoint 4.430 - LANGUAGE C IMMUTABLE STRICT 4.431 - AS '$libdir/latlon-v0010', 'pgl_ecircle_center'; 4.432 - 4.433 -CREATE OR REPLACE FUNCTION radius(ecircle) 4.434 - RETURNS float8 4.435 - LANGUAGE C IMMUTABLE STRICT 4.436 - AS '$libdir/latlon-v0010', 'pgl_ecircle_radius'; 4.437 - 4.438 -CREATE OR REPLACE FUNCTION ecluster_extract_points(ecluster) 4.439 - RETURNS SETOF epoint 4.440 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.441 - SELECT "match"[2]::@extschema@.epoint 4.442 - FROM pg_catalog.regexp_matches( 4.443 - $1::pg_catalog.text, e'(^| )point \\(([^)]+)\\)', 'g' 4.444 - ) AS "match" 4.445 - $$; 4.446 - 4.447 -CREATE OR REPLACE FUNCTION ecluster_extract_paths(ecluster) 4.448 - RETURNS SETOF epoint[] 4.449 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.450 - SELECT ( 4.451 - SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 4.452 - FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 4.453 - ) 4.454 - FROM pg_catalog.regexp_matches( 4.455 - $1::pg_catalog.text, e'(^| )path \\(([^)]+)\\)', 'g' 4.456 - ) AS "m1" 4.457 - $$; 4.458 - 4.459 -CREATE OR REPLACE FUNCTION ecluster_extract_outlines(ecluster) 4.460 - RETURNS SETOF epoint[] 4.461 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.462 - SELECT ( 4.463 - SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 4.464 - FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 4.465 - ) 4.466 - FROM pg_catalog.regexp_matches( 4.467 - $1::pg_catalog.text, e'(^| )outline \\(([^)]+)\\)', 'g' 4.468 - ) AS "m1" 4.469 - $$; 4.470 - 4.471 -CREATE OR REPLACE FUNCTION ecluster_extract_polygons(ecluster) 4.472 - RETURNS SETOF epoint[] 4.473 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.474 - SELECT ( 4.475 - SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 4.476 - FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 4.477 - ) 4.478 - FROM pg_catalog.regexp_matches( 4.479 - $1::pg_catalog.text, e'(^| )polygon \\(([^)]+)\\)', 'g' 4.480 - ) AS "m1" 4.481 - $$; 4.482 - 4.483 - 4.484 ---------------- 4.485 --- operators -- 4.486 ---------------- 4.487 - 4.488 -CREATE OR REPLACE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 4.489 - RETURNS boolean 4.490 - LANGUAGE C IMMUTABLE STRICT 4.491 - AS '$libdir/latlon-v0010', 'pgl_epoint_ebox_overlap'; 4.492 - 4.493 -CREATE OR REPLACE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 4.494 - RETURNS boolean 4.495 - LANGUAGE C IMMUTABLE STRICT 4.496 - AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_overlap'; 4.497 - 4.498 -CREATE OR REPLACE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 4.499 - RETURNS boolean 4.500 - LANGUAGE C IMMUTABLE STRICT 4.501 - AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_overlap'; 4.502 - 4.503 -CREATE OR REPLACE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 4.504 - RETURNS boolean 4.505 - LANGUAGE C IMMUTABLE STRICT 4.506 - AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_may_overlap'; 4.507 - 4.508 -CREATE OR REPLACE FUNCTION ebox_overlap_proc(ebox, ebox) 4.509 - RETURNS boolean 4.510 - LANGUAGE C IMMUTABLE STRICT 4.511 - AS '$libdir/latlon-v0010', 'pgl_ebox_overlap'; 4.512 - 4.513 -CREATE OR REPLACE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 4.514 - RETURNS boolean 4.515 - LANGUAGE C IMMUTABLE STRICT 4.516 - AS '$libdir/latlon-v0010', 'pgl_ebox_ecircle_may_overlap'; 4.517 - 4.518 -CREATE OR REPLACE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 4.519 - RETURNS boolean 4.520 - LANGUAGE C IMMUTABLE STRICT 4.521 - AS '$libdir/latlon-v0010', 'pgl_ebox_ecluster_may_overlap'; 4.522 - 4.523 -CREATE OR REPLACE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 4.524 - RETURNS boolean 4.525 - LANGUAGE C IMMUTABLE STRICT 4.526 - AS '$libdir/latlon-v0010', 'pgl_ecircle_overlap'; 4.527 - 4.528 -CREATE OR REPLACE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 4.529 - RETURNS boolean 4.530 - LANGUAGE C IMMUTABLE STRICT 4.531 - AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_overlap'; 4.532 - 4.533 -CREATE OR REPLACE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 4.534 - RETURNS boolean 4.535 - LANGUAGE C IMMUTABLE STRICT 4.536 - AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_may_overlap'; 4.537 - 4.538 -CREATE OR REPLACE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 4.539 - RETURNS boolean 4.540 - LANGUAGE C IMMUTABLE STRICT 4.541 - AS '$libdir/latlon-v0010', 'pgl_ecluster_overlap'; 4.542 - 4.543 -CREATE OR REPLACE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 4.544 - RETURNS boolean 4.545 - LANGUAGE C IMMUTABLE STRICT 4.546 - AS '$libdir/latlon-v0010', 'pgl_ecluster_may_overlap'; 4.547 - 4.548 -CREATE OR REPLACE FUNCTION ecluster_contains_proc(ecluster, ecluster) 4.549 - RETURNS boolean 4.550 - LANGUAGE C IMMUTABLE STRICT 4.551 - AS '$libdir/latlon-v0010', 'pgl_ecluster_contains'; 4.552 - 4.553 -CREATE OR REPLACE FUNCTION epoint_distance_proc(epoint, epoint) 4.554 - RETURNS float8 4.555 - LANGUAGE C IMMUTABLE STRICT 4.556 - AS '$libdir/latlon-v0010', 'pgl_epoint_distance'; 4.557 - 4.558 -CREATE OR REPLACE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 4.559 - RETURNS float8 4.560 - LANGUAGE C IMMUTABLE STRICT 4.561 - AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_distance'; 4.562 - 4.563 -CREATE OR REPLACE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 4.564 - RETURNS float8 4.565 - LANGUAGE C IMMUTABLE STRICT 4.566 - AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_distance'; 4.567 - 4.568 -CREATE OR REPLACE FUNCTION ecircle_distance_proc(ecircle, ecircle) 4.569 - RETURNS float8 4.570 - LANGUAGE C IMMUTABLE STRICT 4.571 - AS '$libdir/latlon-v0010', 'pgl_ecircle_distance'; 4.572 - 4.573 -CREATE OR REPLACE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 4.574 - RETURNS float8 4.575 - LANGUAGE C IMMUTABLE STRICT 4.576 - AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_distance'; 4.577 - 4.578 -CREATE OR REPLACE FUNCTION ecluster_distance_proc(ecluster, ecluster) 4.579 - RETURNS float8 4.580 - LANGUAGE C IMMUTABLE STRICT 4.581 - AS '$libdir/latlon-v0010', 'pgl_ecluster_distance'; 4.582 - 4.583 -CREATE OR REPLACE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) 4.584 - RETURNS float8 4.585 - LANGUAGE C IMMUTABLE STRICT 4.586 - AS '$libdir/latlon-v0010', 'pgl_ecluster_epoint_sc_fair_distance'; 4.587 - 4.588 -CREATE OR REPLACE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint) 4.589 - RETURNS boolean 4.590 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 4.591 - 4.592 -CREATE OR REPLACE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint) 4.593 - RETURNS boolean 4.594 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 4.595 - 4.596 -CREATE OR REPLACE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint) 4.597 - RETURNS boolean 4.598 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 4.599 - 4.600 -CREATE OR REPLACE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle) 4.601 - RETURNS boolean 4.602 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 4.603 - 4.604 -CREATE OR REPLACE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle) 4.605 - RETURNS boolean 4.606 - LANGUAGE sql IMMUTABLE 4.607 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2'; 4.608 - 4.609 -CREATE OR REPLACE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox) 4.610 - RETURNS boolean 4.611 - LANGUAGE sql IMMUTABLE 4.612 - AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster'; 4.613 - 4.614 -CREATE OR REPLACE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster) 4.615 - RETURNS boolean 4.616 - LANGUAGE sql IMMUTABLE 4.617 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2'; 4.618 - 4.619 -CREATE OR REPLACE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox) 4.620 - RETURNS boolean 4.621 - LANGUAGE sql IMMUTABLE 4.622 - AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster'; 4.623 - 4.624 -CREATE OR REPLACE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint) 4.625 - RETURNS boolean 4.626 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 4.627 - 4.628 -CREATE OR REPLACE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox) 4.629 - RETURNS boolean 4.630 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 4.631 - 4.632 -CREATE OR REPLACE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox) 4.633 - RETURNS boolean 4.634 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 4.635 - 4.636 -CREATE OR REPLACE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle) 4.637 - RETURNS boolean 4.638 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 4.639 - 4.640 -CREATE OR REPLACE FUNCTION ecluster_contains_commutator(ecluster, ecluster) 4.641 - RETURNS boolean 4.642 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.@>) $1'; 4.643 - 4.644 -CREATE OR REPLACE FUNCTION ebox_contains_castwrap(ebox, ebox) 4.645 - RETURNS boolean 4.646 - LANGUAGE sql IMMUTABLE AS $$ 4.647 - SELECT 4.648 - $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2::@extschema@.ecluster 4.649 - $$; 4.650 - 4.651 -CREATE OR REPLACE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox) 4.652 - RETURNS boolean 4.653 - LANGUAGE sql IMMUTABLE AS $$ 4.654 - SELECT 4.655 - $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1::@extschema@.ecluster 4.656 - $$; 4.657 - 4.658 -CREATE OR REPLACE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster) 4.659 - RETURNS boolean 4.660 - LANGUAGE sql IMMUTABLE 4.661 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2'; 4.662 - 4.663 -CREATE OR REPLACE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox) 4.664 - RETURNS boolean 4.665 - LANGUAGE sql IMMUTABLE 4.666 - AS 'SELECT $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1'; 4.667 - 4.668 -CREATE OR REPLACE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox) 4.669 - RETURNS boolean 4.670 - LANGUAGE sql IMMUTABLE 4.671 - AS 'SELECT $1 OPERATOR(@extschema@.@>) $2::@extschema@.ecluster'; 4.672 - 4.673 -CREATE OR REPLACE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster) 4.674 - RETURNS boolean 4.675 - LANGUAGE sql IMMUTABLE 4.676 - AS 'SELECT $2 OPERATOR(@extschema@.@>) $1::@extschema@.ecluster'; 4.677 - 4.678 -CREATE OR REPLACE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint) 4.679 - RETURNS float8 4.680 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 4.681 - 4.682 -CREATE OR REPLACE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint) 4.683 - RETURNS float8 4.684 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 4.685 - 4.686 -CREATE OR REPLACE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle) 4.687 - RETURNS float8 4.688 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 4.689 - 4.690 -CREATE OR REPLACE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox) 4.691 - RETURNS float8 4.692 - LANGUAGE sql IMMUTABLE 4.693 - AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 4.694 - 4.695 -CREATE OR REPLACE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint) 4.696 - RETURNS float8 4.697 - LANGUAGE sql IMMUTABLE 4.698 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 4.699 - 4.700 -CREATE OR REPLACE FUNCTION ebox_distance_castwrap(ebox, ebox) 4.701 - RETURNS float8 4.702 - LANGUAGE sql IMMUTABLE AS $$ 4.703 - SELECT 4.704 - $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2::@extschema@.ecluster 4.705 - $$; 4.706 - 4.707 -CREATE OR REPLACE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle) 4.708 - RETURNS float8 4.709 - LANGUAGE sql IMMUTABLE 4.710 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 4.711 - 4.712 -CREATE OR REPLACE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox) 4.713 - RETURNS float8 4.714 - LANGUAGE sql IMMUTABLE 4.715 - AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 4.716 - 4.717 -CREATE OR REPLACE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster) 4.718 - RETURNS float8 4.719 - LANGUAGE sql IMMUTABLE 4.720 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 4.721 - 4.722 -CREATE OR REPLACE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox) 4.723 - RETURNS float8 4.724 - LANGUAGE sql IMMUTABLE 4.725 - AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 4.726 - 4.727 - 4.728 ----------------- 4.729 --- GiST index -- 4.730 ----------------- 4.731 - 4.732 -CREATE OR REPLACE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 4.733 - RETURNS boolean 4.734 - LANGUAGE C STRICT 4.735 - AS '$libdir/latlon-v0010', 'pgl_gist_consistent'; 4.736 - 4.737 -CREATE OR REPLACE FUNCTION pgl_gist_union(internal, internal) 4.738 - RETURNS internal 4.739 - LANGUAGE C STRICT 4.740 - AS '$libdir/latlon-v0010', 'pgl_gist_union'; 4.741 - 4.742 -CREATE OR REPLACE FUNCTION pgl_gist_compress_epoint(internal) 4.743 - RETURNS internal 4.744 - LANGUAGE C STRICT 4.745 - AS '$libdir/latlon-v0010', 'pgl_gist_compress_epoint'; 4.746 - 4.747 -CREATE OR REPLACE FUNCTION pgl_gist_compress_ecircle(internal) 4.748 - RETURNS internal 4.749 - LANGUAGE C STRICT 4.750 - AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecircle'; 4.751 - 4.752 -CREATE OR REPLACE FUNCTION pgl_gist_compress_ecluster(internal) 4.753 - RETURNS internal 4.754 - LANGUAGE C STRICT 4.755 - AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecluster'; 4.756 - 4.757 -CREATE OR REPLACE FUNCTION pgl_gist_decompress(internal) 4.758 - RETURNS internal 4.759 - LANGUAGE C STRICT 4.760 - AS '$libdir/latlon-v0010', 'pgl_gist_decompress'; 4.761 - 4.762 -CREATE OR REPLACE FUNCTION pgl_gist_penalty(internal, internal, internal) 4.763 - RETURNS internal 4.764 - LANGUAGE C STRICT 4.765 - AS '$libdir/latlon-v0010', 'pgl_gist_penalty'; 4.766 - 4.767 -CREATE OR REPLACE FUNCTION pgl_gist_picksplit(internal, internal) 4.768 - RETURNS internal 4.769 - LANGUAGE C STRICT 4.770 - AS '$libdir/latlon-v0010', 'pgl_gist_picksplit'; 4.771 - 4.772 -CREATE OR REPLACE FUNCTION pgl_gist_same(internal, internal, internal) 4.773 - RETURNS internal 4.774 - LANGUAGE C STRICT 4.775 - AS '$libdir/latlon-v0010', 'pgl_gist_same'; 4.776 - 4.777 -CREATE OR REPLACE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 4.778 - RETURNS internal 4.779 - LANGUAGE C STRICT 4.780 - AS '$libdir/latlon-v0010', 'pgl_gist_distance'; 4.781 - 4.782 - 4.783 ---------------------- 4.784 --- alias functions -- 4.785 ---------------------- 4.786 - 4.787 -CREATE OR REPLACE FUNCTION distance(epoint, epoint) 4.788 - RETURNS float8 4.789 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2'; 4.790 - 4.791 -CREATE OR REPLACE FUNCTION distance(ecluster, epoint) 4.792 - RETURNS float8 4.793 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2'; 4.794 - 4.795 -CREATE OR REPLACE FUNCTION distance_within(epoint, epoint, float8) 4.796 - RETURNS boolean 4.797 - LANGUAGE sql IMMUTABLE 4.798 - AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)'; 4.799 - 4.800 -CREATE OR REPLACE FUNCTION distance_within(ecluster, epoint, float8) 4.801 - RETURNS boolean 4.802 - LANGUAGE sql IMMUTABLE 4.803 - AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)'; 4.804 - 4.805 -CREATE OR REPLACE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) 4.806 - RETURNS float8 4.807 - LANGUAGE sql IMMUTABLE AS $$ 4.808 - SELECT 4.809 - $1 OPERATOR(@extschema@.<=>) @extschema@.epoint_with_sample_count($2, $3) 4.810 - $$; 4.811 - 4.812 - 4.813 --------------------------------- 4.814 --- other data storage formats -- 4.815 --------------------------------- 4.816 - 4.817 -CREATE OR REPLACE FUNCTION coords_to_epoint(float8, float8, text = 'epoint') 4.818 - RETURNS epoint 4.819 - LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 4.820 - DECLARE 4.821 - "result" @extschema@.epoint; 4.822 - BEGIN 4.823 - IF $3 OPERATOR(pg_catalog.=) 'epoint_lonlat' THEN 4.824 - -- avoid dynamic command execution for better performance 4.825 - RETURN @extschema@.epoint($2, $1); 4.826 - END IF; 4.827 - IF 4.828 - $3 OPERATOR(pg_catalog.=) 'epoint' OR 4.829 - $3 OPERATOR(pg_catalog.=) 'epoint_latlon' 4.830 - THEN 4.831 - -- avoid dynamic command execution for better performance 4.832 - RETURN @extschema@.epoint($1, $2); 4.833 - END IF; 4.834 - EXECUTE 4.835 - 'SELECT ' OPERATOR(pg_catalog.||) $3 OPERATOR(pg_catalog.||) '($1, $2)' INTO STRICT "result" USING $1, $2; 4.836 - RETURN "result"; 4.837 - END; 4.838 - $$; 4.839 - 4.840 -CREATE OR REPLACE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat') 4.841 - RETURNS SETOF jsonb 4.842 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.843 - SELECT "result" FROM 4.844 - ( SELECT pg_catalog.jsonb_array_length($1) - 1 ) 4.845 - AS "lastindex_row" ("lastindex") 4.846 - CROSS JOIN LATERAL pg_catalog.jsonb_array_elements( 4.847 - CASE WHEN 4.848 - @extschema@.coords_to_epoint( 4.849 - ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 0) 4.850 - ::pg_catalog.float8, 4.851 - ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 1) 4.852 - ::pg_catalog.float8, 4.853 - $2 4.854 - ) OPERATOR(pg_catalog.=) @extschema@.coords_to_epoint( 4.855 - ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 0) 4.856 - ::pg_catalog.float8, 4.857 - ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 1) 4.858 - ::pg_catalog.float8, 4.859 - $2 4.860 - ) 4.861 - THEN 4.862 - $1 - "lastindex" 4.863 - ELSE 4.864 - $1 4.865 - END 4.866 - ) AS "result_row" ("result") 4.867 - $$; 4.868 - 4.869 -CREATE OR REPLACE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat') 4.870 - RETURNS epoint 4.871 - LANGUAGE sql IMMUTABLE STRICT AS $$ 4.872 - SELECT CASE 4.873 - WHEN $1 OPERATOR(pg_catalog.->>) 'type' OPERATOR(pg_catalog.=) 'Point' THEN 4.874 - @extschema@.coords_to_epoint( 4.875 - ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0) 4.876 - ::pg_catalog.float8, 4.877 - ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1) 4.878 - ::pg_catalog.float8, 4.879 - $2 4.880 - ) 4.881 - WHEN $1->>'type' = 'Feature' THEN 4.882 - @extschema@.GeoJSON_to_epoint($1 OPERATOR(pg_catalog.->) 'geometry', $2) 4.883 - ELSE 4.884 - NULL 4.885 - END 4.886 - $$; 4.887 - 4.888 -CREATE OR REPLACE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat') 4.889 - RETURNS ecluster 4.890 - LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 4.891 - DECLARE 4.892 - "tp" TEXT = $1 OPERATOR(pg_catalog.->>) 'type'; 4.893 - BEGIN 4.894 - IF "tp" = 'Point' THEN RETURN 4.895 - @extschema@.coords_to_epoint( 4.896 - ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0) 4.897 - ::pg_catalog.float8, 4.898 - ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1) 4.899 - ::pg_catalog.float8, 4.900 - $2 4.901 - )::@extschema@.ecluster; 4.902 - END IF; 4.903 - raise notice 'DEBUG2'; 4.904 - IF "tp" = 'MultiPoint' THEN RETURN 4.905 - ( SELECT @extschema@.ecluster_create_multipoint(pg_catalog.array_agg( 4.906 - @extschema@.coords_to_epoint( 4.907 - ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 4.908 - ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 4.909 - $2 4.910 - ) 4.911 - )) 4.912 - FROM pg_catalog.jsonb_array_elements( 4.913 - $1 OPERATOR(pg_catalog.->) 'coordinates' 4.914 - ) AS "coord" 4.915 - ); 4.916 - END IF; 4.917 - IF "tp" = 'LineString' THEN RETURN 4.918 - ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg( 4.919 - @extschema@.coords_to_epoint( 4.920 - ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 4.921 - ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 4.922 - $2 4.923 - ) 4.924 - )) 4.925 - FROM pg_catalog.jsonb_array_elements( 4.926 - $1 OPERATOR(pg_catalog.->) 'coordinates' 4.927 - ) AS "coord" 4.928 - ); 4.929 - END IF; 4.930 - IF "tp" = 'MultiLineString' THEN RETURN 4.931 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 4.932 - ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg( 4.933 - @extschema@.coords_to_epoint( 4.934 - ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 4.935 - ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 4.936 - $2 4.937 - ) 4.938 - )) 4.939 - FROM pg_catalog.jsonb_array_elements("coord_array") AS "coord" 4.940 - ) 4.941 - )) 4.942 - FROM pg_catalog.jsonb_array_elements( 4.943 - $1 OPERATOR(pg_catalog.->) 'coordinates' 4.944 - ) AS "coord_array" 4.945 - ); 4.946 - END IF; 4.947 - IF "tp" = 'Polygon' THEN RETURN 4.948 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 4.949 - ( SELECT @extschema@.ecluster_create_polygon(pg_catalog.array_agg( 4.950 - @extschema@.coords_to_epoint( 4.951 - ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 4.952 - ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 4.953 - $2 4.954 - ) 4.955 - )) 4.956 - FROM @extschema@.GeoJSON_LinearRing_vertices("coord_array", $2) 4.957 - AS "coord" 4.958 - ) 4.959 - )) 4.960 - FROM pg_catalog.jsonb_array_elements( 4.961 - $1 OPERATOR(pg_catalog.->) 'coordinates' 4.962 - ) AS "coord_array" 4.963 - ); 4.964 - END IF; 4.965 - IF "tp" = 'MultiPolygon' THEN RETURN 4.966 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 4.967 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 4.968 - ( SELECT @extschema@.ecluster_create_polygon( 4.969 - pg_catalog.array_agg( 4.970 - @extschema@.coords_to_epoint( 4.971 - ("coord" OPERATOR(pg_catalog.->>) 0) 4.972 - ::pg_catalog.float8, 4.973 - ("coord" OPERATOR(pg_catalog.->>) 1) 4.974 - ::pg_catalog.float8, 4.975 - $2 4.976 - ) 4.977 - ) 4.978 - ) 4.979 - FROM @extschema@.GeoJSON_LinearRing_vertices( 4.980 - "coord_array", $2 4.981 - ) AS "coord" 4.982 - ) 4.983 - )) 4.984 - FROM pg_catalog.jsonb_array_elements("coord_array_array") 4.985 - AS "coord_array" 4.986 - ) 4.987 - )) 4.988 - FROM jsonb_array_elements( 4.989 - $1 OPERATOR(pg_catalog.->) 'coordinates' 4.990 - ) AS "coord_array_array" 4.991 - ); 4.992 - END IF; 4.993 - IF "tp" = 'GeometryCollection' THEN RETURN 4.994 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 4.995 - @extschema@.GeoJSON_to_ecluster("geometry", $2) 4.996 - )) 4.997 - FROM pg_catalog.jsonb_array_elements( 4.998 - $1 OPERATOR(pg_catalog.->) 'geometries' 4.999 - ) AS "geometry" 4.1000 - ); 4.1001 - END IF; 4.1002 - IF "tp" = 'Feature' THEN RETURN 4.1003 - @extschema@.GeoJSON_to_ecluster( 4.1004 - $1 OPERATOR(pg_catalog.->) 'geometry', $2 4.1005 - ); 4.1006 - END IF; 4.1007 - IF "tp" = 'FeatureCollection' THEN RETURN 4.1008 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 4.1009 - @extschema@.GeoJSON_to_ecluster("feature", $2) 4.1010 - )) 4.1011 - FROM pg_catalog.jsonb_array_elements( 4.1012 - $1 OPERATOR(pg_catalog.->) 'features' 4.1013 - ) AS "feature" 4.1014 - ); 4.1015 - END IF; 4.1016 - RETURN NULL; 4.1017 - END; 4.1018 - $$; 4.1019 -
6.1 --- a/latlon--0.15.sql Thu Oct 23 15:19:13 2025 +0200 6.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 6.3 @@ -1,1821 +0,0 @@ 6.4 ----------------------------------------- 6.5 --- forward declarations (shell types) -- 6.6 ----------------------------------------- 6.7 - 6.8 -CREATE TYPE ekey_point; 6.9 -CREATE TYPE ekey_area; 6.10 -CREATE TYPE epoint; 6.11 -CREATE TYPE epoint_with_sample_count; 6.12 -CREATE TYPE ebox; 6.13 -CREATE TYPE ecircle; 6.14 -CREATE TYPE ecluster; 6.15 - 6.16 - 6.17 ------------------------------------------------------------- 6.18 --- dummy input/output functions for dummy index key types -- 6.19 ------------------------------------------------------------- 6.20 - 6.21 -CREATE FUNCTION ekey_point_in_dummy(cstring) 6.22 - RETURNS ekey_point 6.23 - LANGUAGE C IMMUTABLE STRICT 6.24 - AS '$libdir/latlon-v0010', 'pgl_notimpl'; 6.25 - 6.26 -CREATE FUNCTION ekey_point_out_dummy(ekey_point) 6.27 - RETURNS cstring 6.28 - LANGUAGE C IMMUTABLE STRICT 6.29 - AS '$libdir/latlon-v0010', 'pgl_notimpl'; 6.30 - 6.31 -CREATE FUNCTION ekey_area_in_dummy(cstring) 6.32 - RETURNS ekey_area 6.33 - LANGUAGE C IMMUTABLE STRICT 6.34 - AS '$libdir/latlon-v0010', 'pgl_notimpl'; 6.35 - 6.36 -CREATE FUNCTION ekey_area_out_dummy(ekey_area) 6.37 - RETURNS cstring 6.38 - LANGUAGE C IMMUTABLE STRICT 6.39 - AS '$libdir/latlon-v0010', 'pgl_notimpl'; 6.40 - 6.41 - 6.42 --------------------------- 6.43 --- text input functions -- 6.44 --------------------------- 6.45 - 6.46 -CREATE FUNCTION epoint_in(cstring) 6.47 - RETURNS epoint 6.48 - LANGUAGE C IMMUTABLE STRICT 6.49 - AS '$libdir/latlon-v0010', 'pgl_epoint_in'; 6.50 - 6.51 -CREATE FUNCTION epoint_with_sample_count_in(cstring) 6.52 - RETURNS epoint_with_sample_count 6.53 - LANGUAGE C IMMUTABLE STRICT 6.54 - AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_in'; 6.55 - 6.56 -CREATE FUNCTION ebox_in(cstring) 6.57 - RETURNS ebox 6.58 - LANGUAGE C IMMUTABLE STRICT 6.59 - AS '$libdir/latlon-v0010', 'pgl_ebox_in'; 6.60 - 6.61 -CREATE FUNCTION ecircle_in(cstring) 6.62 - RETURNS ecircle 6.63 - LANGUAGE C IMMUTABLE STRICT 6.64 - AS '$libdir/latlon-v0010', 'pgl_ecircle_in'; 6.65 - 6.66 -CREATE FUNCTION ecluster_in(cstring) 6.67 - RETURNS ecluster 6.68 - LANGUAGE C IMMUTABLE STRICT 6.69 - AS '$libdir/latlon-v0010', 'pgl_ecluster_in'; 6.70 - 6.71 - 6.72 ---------------------------- 6.73 --- text output functions -- 6.74 ---------------------------- 6.75 - 6.76 -CREATE FUNCTION epoint_out(epoint) 6.77 - RETURNS cstring 6.78 - LANGUAGE C IMMUTABLE STRICT 6.79 - AS '$libdir/latlon-v0010', 'pgl_epoint_out'; 6.80 - 6.81 -CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) 6.82 - RETURNS cstring 6.83 - LANGUAGE C IMMUTABLE STRICT 6.84 - AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_out'; 6.85 - 6.86 -CREATE FUNCTION ebox_out(ebox) 6.87 - RETURNS cstring 6.88 - LANGUAGE C IMMUTABLE STRICT 6.89 - AS '$libdir/latlon-v0010', 'pgl_ebox_out'; 6.90 - 6.91 -CREATE FUNCTION ecircle_out(ecircle) 6.92 - RETURNS cstring 6.93 - LANGUAGE C IMMUTABLE STRICT 6.94 - AS '$libdir/latlon-v0010', 'pgl_ecircle_out'; 6.95 - 6.96 -CREATE FUNCTION ecluster_out(ecluster) 6.97 - RETURNS cstring 6.98 - LANGUAGE C IMMUTABLE STRICT 6.99 - AS '$libdir/latlon-v0010', 'pgl_ecluster_out'; 6.100 - 6.101 - 6.102 --------------------------- 6.103 --- binary I/O functions -- 6.104 --------------------------- 6.105 - 6.106 -CREATE FUNCTION epoint_recv(internal) 6.107 - RETURNS epoint 6.108 - LANGUAGE C IMMUTABLE STRICT 6.109 - AS '$libdir/latlon-v0010', 'pgl_epoint_recv'; 6.110 - 6.111 -CREATE FUNCTION ebox_recv(internal) 6.112 - RETURNS ebox 6.113 - LANGUAGE C IMMUTABLE STRICT 6.114 - AS '$libdir/latlon-v0010', 'pgl_ebox_recv'; 6.115 - 6.116 -CREATE FUNCTION ecircle_recv(internal) 6.117 - RETURNS ecircle 6.118 - LANGUAGE C IMMUTABLE STRICT 6.119 - AS '$libdir/latlon-v0010', 'pgl_ecircle_recv'; 6.120 - 6.121 -CREATE FUNCTION epoint_send(epoint) 6.122 - RETURNS bytea 6.123 - LANGUAGE C IMMUTABLE STRICT 6.124 - AS '$libdir/latlon-v0010', 'pgl_epoint_send'; 6.125 - 6.126 -CREATE FUNCTION ebox_send(ebox) 6.127 - RETURNS bytea 6.128 - LANGUAGE C IMMUTABLE STRICT 6.129 - AS '$libdir/latlon-v0010', 'pgl_ebox_send'; 6.130 - 6.131 -CREATE FUNCTION ecircle_send(ecircle) 6.132 - RETURNS bytea 6.133 - LANGUAGE C IMMUTABLE STRICT 6.134 - AS '$libdir/latlon-v0010', 'pgl_ecircle_send'; 6.135 - 6.136 - 6.137 ------------------------------------------------ 6.138 --- type definitions of dummy index key types -- 6.139 ------------------------------------------------ 6.140 - 6.141 -CREATE TYPE ekey_point ( 6.142 - internallength = 8, 6.143 - input = ekey_point_in_dummy, 6.144 - output = ekey_point_out_dummy, 6.145 - alignment = char ); 6.146 - 6.147 -CREATE TYPE ekey_area ( 6.148 - internallength = 9, 6.149 - input = ekey_area_in_dummy, 6.150 - output = ekey_area_out_dummy, 6.151 - alignment = char ); 6.152 - 6.153 - 6.154 ------------------------------------------- 6.155 --- definitions of geographic data types -- 6.156 ------------------------------------------- 6.157 - 6.158 -CREATE TYPE epoint ( 6.159 - internallength = 16, 6.160 - input = epoint_in, 6.161 - output = epoint_out, 6.162 - receive = epoint_recv, 6.163 - send = epoint_send, 6.164 - alignment = double ); 6.165 - 6.166 -CREATE TYPE epoint_with_sample_count ( 6.167 - internallength = 20, 6.168 - input = epoint_with_sample_count_in, 6.169 - output = epoint_with_sample_count_out, 6.170 - alignment = double ); 6.171 - 6.172 -CREATE TYPE ebox ( 6.173 - internallength = 32, 6.174 - input = ebox_in, 6.175 - output = ebox_out, 6.176 - receive = ebox_recv, 6.177 - send = ebox_send, 6.178 - alignment = double ); 6.179 - 6.180 -CREATE TYPE ecircle ( 6.181 - internallength = 24, 6.182 - input = ecircle_in, 6.183 - output = ecircle_out, 6.184 - receive = ecircle_recv, 6.185 - send = ecircle_send, 6.186 - alignment = double ); 6.187 - 6.188 -CREATE TYPE ecluster ( 6.189 - internallength = VARIABLE, 6.190 - input = ecluster_in, 6.191 - output = ecluster_out, 6.192 - alignment = double, 6.193 - storage = external ); 6.194 - 6.195 - 6.196 --------------------- 6.197 --- B-tree support -- 6.198 --------------------- 6.199 - 6.200 --- begin of B-tree support for epoint 6.201 - 6.202 -CREATE FUNCTION epoint_btree_lt(epoint, epoint) 6.203 - RETURNS boolean 6.204 - LANGUAGE C IMMUTABLE STRICT 6.205 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_lt'; 6.206 - 6.207 -CREATE FUNCTION epoint_btree_le(epoint, epoint) 6.208 - RETURNS boolean 6.209 - LANGUAGE C IMMUTABLE STRICT 6.210 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_le'; 6.211 - 6.212 -CREATE FUNCTION epoint_btree_eq(epoint, epoint) 6.213 - RETURNS boolean 6.214 - LANGUAGE C IMMUTABLE STRICT 6.215 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_eq'; 6.216 - 6.217 -CREATE FUNCTION epoint_btree_ne(epoint, epoint) 6.218 - RETURNS boolean 6.219 - LANGUAGE C IMMUTABLE STRICT 6.220 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ne'; 6.221 - 6.222 -CREATE FUNCTION epoint_btree_ge(epoint, epoint) 6.223 - RETURNS boolean 6.224 - LANGUAGE C IMMUTABLE STRICT 6.225 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ge'; 6.226 - 6.227 -CREATE FUNCTION epoint_btree_gt(epoint, epoint) 6.228 - RETURNS boolean 6.229 - LANGUAGE C IMMUTABLE STRICT 6.230 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_gt'; 6.231 - 6.232 -CREATE OPERATOR <<< ( 6.233 - leftarg = epoint, 6.234 - rightarg = epoint, 6.235 - procedure = epoint_btree_lt, 6.236 - commutator = >>>, 6.237 - negator = >>>=, 6.238 - restrict = scalarltsel, 6.239 - join = scalarltjoinsel 6.240 -); 6.241 - 6.242 -CREATE OPERATOR <<<= ( 6.243 - leftarg = epoint, 6.244 - rightarg = epoint, 6.245 - procedure = epoint_btree_le, 6.246 - commutator = >>>=, 6.247 - negator = >>>, 6.248 - restrict = scalarltsel, 6.249 - join = scalarltjoinsel 6.250 -); 6.251 - 6.252 -CREATE OPERATOR = ( 6.253 - leftarg = epoint, 6.254 - rightarg = epoint, 6.255 - procedure = epoint_btree_eq, 6.256 - commutator = =, 6.257 - negator = <>, 6.258 - restrict = eqsel, 6.259 - join = eqjoinsel, 6.260 - merges 6.261 -); 6.262 - 6.263 -CREATE OPERATOR <> ( 6.264 - leftarg = epoint, 6.265 - rightarg = epoint, 6.266 - procedure = epoint_btree_ne, 6.267 - commutator = <>, 6.268 - negator = =, 6.269 - restrict = neqsel, 6.270 - join = neqjoinsel 6.271 -); 6.272 - 6.273 -CREATE OPERATOR >>>= ( 6.274 - leftarg = epoint, 6.275 - rightarg = epoint, 6.276 - procedure = epoint_btree_ge, 6.277 - commutator = <<<=, 6.278 - negator = <<<, 6.279 - restrict = scalargtsel, 6.280 - join = scalargtjoinsel 6.281 -); 6.282 - 6.283 -CREATE OPERATOR >>> ( 6.284 - leftarg = epoint, 6.285 - rightarg = epoint, 6.286 - procedure = epoint_btree_gt, 6.287 - commutator = <<<, 6.288 - negator = <<<=, 6.289 - restrict = scalargtsel, 6.290 - join = scalargtjoinsel 6.291 -); 6.292 - 6.293 -CREATE FUNCTION epoint_btree_cmp(epoint, epoint) 6.294 - RETURNS int4 6.295 - LANGUAGE C IMMUTABLE STRICT 6.296 - AS '$libdir/latlon-v0010', 'pgl_btree_epoint_cmp'; 6.297 - 6.298 -CREATE OPERATOR CLASS epoint_btree_ops 6.299 - DEFAULT FOR TYPE epoint USING btree AS 6.300 - OPERATOR 1 <<< , 6.301 - OPERATOR 2 <<<= , 6.302 - OPERATOR 3 = , 6.303 - OPERATOR 4 >>>= , 6.304 - OPERATOR 5 >>> , 6.305 - FUNCTION 1 epoint_btree_cmp(epoint, epoint); 6.306 - 6.307 --- end of B-tree support for epoint 6.308 - 6.309 --- begin of B-tree support for ebox 6.310 - 6.311 -CREATE FUNCTION ebox_btree_lt(ebox, ebox) 6.312 - RETURNS boolean 6.313 - LANGUAGE C IMMUTABLE STRICT 6.314 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_lt'; 6.315 - 6.316 -CREATE FUNCTION ebox_btree_le(ebox, ebox) 6.317 - RETURNS boolean 6.318 - LANGUAGE C IMMUTABLE STRICT 6.319 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_le'; 6.320 - 6.321 -CREATE FUNCTION ebox_btree_eq(ebox, ebox) 6.322 - RETURNS boolean 6.323 - LANGUAGE C IMMUTABLE STRICT 6.324 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_eq'; 6.325 - 6.326 -CREATE FUNCTION ebox_btree_ne(ebox, ebox) 6.327 - RETURNS boolean 6.328 - LANGUAGE C IMMUTABLE STRICT 6.329 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ne'; 6.330 - 6.331 -CREATE FUNCTION ebox_btree_ge(ebox, ebox) 6.332 - RETURNS boolean 6.333 - LANGUAGE C IMMUTABLE STRICT 6.334 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ge'; 6.335 - 6.336 -CREATE FUNCTION ebox_btree_gt(ebox, ebox) 6.337 - RETURNS boolean 6.338 - LANGUAGE C IMMUTABLE STRICT 6.339 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_gt'; 6.340 - 6.341 -CREATE OPERATOR <<< ( 6.342 - leftarg = ebox, 6.343 - rightarg = ebox, 6.344 - procedure = ebox_btree_lt, 6.345 - commutator = >>>, 6.346 - negator = >>>=, 6.347 - restrict = scalarltsel, 6.348 - join = scalarltjoinsel 6.349 -); 6.350 - 6.351 -CREATE OPERATOR <<<= ( 6.352 - leftarg = ebox, 6.353 - rightarg = ebox, 6.354 - procedure = ebox_btree_le, 6.355 - commutator = >>>=, 6.356 - negator = >>>, 6.357 - restrict = scalarltsel, 6.358 - join = scalarltjoinsel 6.359 -); 6.360 - 6.361 -CREATE OPERATOR = ( 6.362 - leftarg = ebox, 6.363 - rightarg = ebox, 6.364 - procedure = ebox_btree_eq, 6.365 - commutator = =, 6.366 - negator = <>, 6.367 - restrict = eqsel, 6.368 - join = eqjoinsel, 6.369 - merges 6.370 -); 6.371 - 6.372 -CREATE OPERATOR <> ( 6.373 - leftarg = ebox, 6.374 - rightarg = ebox, 6.375 - procedure = ebox_btree_ne, 6.376 - commutator = <>, 6.377 - negator = =, 6.378 - restrict = neqsel, 6.379 - join = neqjoinsel 6.380 -); 6.381 - 6.382 -CREATE OPERATOR >>>= ( 6.383 - leftarg = ebox, 6.384 - rightarg = ebox, 6.385 - procedure = ebox_btree_ge, 6.386 - commutator = <<<=, 6.387 - negator = <<<, 6.388 - restrict = scalargtsel, 6.389 - join = scalargtjoinsel 6.390 -); 6.391 - 6.392 -CREATE OPERATOR >>> ( 6.393 - leftarg = ebox, 6.394 - rightarg = ebox, 6.395 - procedure = ebox_btree_gt, 6.396 - commutator = <<<, 6.397 - negator = <<<=, 6.398 - restrict = scalargtsel, 6.399 - join = scalargtjoinsel 6.400 -); 6.401 - 6.402 -CREATE FUNCTION ebox_btree_cmp(ebox, ebox) 6.403 - RETURNS int4 6.404 - LANGUAGE C IMMUTABLE STRICT 6.405 - AS '$libdir/latlon-v0010', 'pgl_btree_ebox_cmp'; 6.406 - 6.407 -CREATE OPERATOR CLASS ebox_btree_ops 6.408 - DEFAULT FOR TYPE ebox USING btree AS 6.409 - OPERATOR 1 <<< , 6.410 - OPERATOR 2 <<<= , 6.411 - OPERATOR 3 = , 6.412 - OPERATOR 4 >>>= , 6.413 - OPERATOR 5 >>> , 6.414 - FUNCTION 1 ebox_btree_cmp(ebox, ebox); 6.415 - 6.416 --- end of B-tree support for ebox 6.417 - 6.418 --- begin of B-tree support for ecircle 6.419 - 6.420 -CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle) 6.421 - RETURNS boolean 6.422 - LANGUAGE C IMMUTABLE STRICT 6.423 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_lt'; 6.424 - 6.425 -CREATE FUNCTION ecircle_btree_le(ecircle, ecircle) 6.426 - RETURNS boolean 6.427 - LANGUAGE C IMMUTABLE STRICT 6.428 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_le'; 6.429 - 6.430 -CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle) 6.431 - RETURNS boolean 6.432 - LANGUAGE C IMMUTABLE STRICT 6.433 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_eq'; 6.434 - 6.435 -CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle) 6.436 - RETURNS boolean 6.437 - LANGUAGE C IMMUTABLE STRICT 6.438 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ne'; 6.439 - 6.440 -CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle) 6.441 - RETURNS boolean 6.442 - LANGUAGE C IMMUTABLE STRICT 6.443 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ge'; 6.444 - 6.445 -CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle) 6.446 - RETURNS boolean 6.447 - LANGUAGE C IMMUTABLE STRICT 6.448 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_gt'; 6.449 - 6.450 -CREATE OPERATOR <<< ( 6.451 - leftarg = ecircle, 6.452 - rightarg = ecircle, 6.453 - procedure = ecircle_btree_lt, 6.454 - commutator = >>>, 6.455 - negator = >>>=, 6.456 - restrict = scalarltsel, 6.457 - join = scalarltjoinsel 6.458 -); 6.459 - 6.460 -CREATE OPERATOR <<<= ( 6.461 - leftarg = ecircle, 6.462 - rightarg = ecircle, 6.463 - procedure = ecircle_btree_le, 6.464 - commutator = >>>=, 6.465 - negator = >>>, 6.466 - restrict = scalarltsel, 6.467 - join = scalarltjoinsel 6.468 -); 6.469 - 6.470 -CREATE OPERATOR = ( 6.471 - leftarg = ecircle, 6.472 - rightarg = ecircle, 6.473 - procedure = ecircle_btree_eq, 6.474 - commutator = =, 6.475 - negator = <>, 6.476 - restrict = eqsel, 6.477 - join = eqjoinsel, 6.478 - merges 6.479 -); 6.480 - 6.481 -CREATE OPERATOR <> ( 6.482 - leftarg = ecircle, 6.483 - rightarg = ecircle, 6.484 - procedure = ecircle_btree_ne, 6.485 - commutator = <>, 6.486 - negator = =, 6.487 - restrict = neqsel, 6.488 - join = neqjoinsel 6.489 -); 6.490 - 6.491 -CREATE OPERATOR >>>= ( 6.492 - leftarg = ecircle, 6.493 - rightarg = ecircle, 6.494 - procedure = ecircle_btree_ge, 6.495 - commutator = <<<=, 6.496 - negator = <<<, 6.497 - restrict = scalargtsel, 6.498 - join = scalargtjoinsel 6.499 -); 6.500 - 6.501 -CREATE OPERATOR >>> ( 6.502 - leftarg = ecircle, 6.503 - rightarg = ecircle, 6.504 - procedure = ecircle_btree_gt, 6.505 - commutator = <<<, 6.506 - negator = <<<=, 6.507 - restrict = scalargtsel, 6.508 - join = scalargtjoinsel 6.509 -); 6.510 - 6.511 -CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 6.512 - RETURNS int4 6.513 - LANGUAGE C IMMUTABLE STRICT 6.514 - AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_cmp'; 6.515 - 6.516 -CREATE OPERATOR CLASS ecircle_btree_ops 6.517 - DEFAULT FOR TYPE ecircle USING btree AS 6.518 - OPERATOR 1 <<< , 6.519 - OPERATOR 2 <<<= , 6.520 - OPERATOR 3 = , 6.521 - OPERATOR 4 >>>= , 6.522 - OPERATOR 5 >>> , 6.523 - FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle); 6.524 - 6.525 --- end of B-tree support for ecircle 6.526 - 6.527 - 6.528 ----------------- 6.529 --- type casts -- 6.530 ----------------- 6.531 - 6.532 -CREATE FUNCTION cast_epoint_to_ebox(epoint) 6.533 - RETURNS ebox 6.534 - LANGUAGE C IMMUTABLE STRICT 6.535 - AS '$libdir/latlon-v0010', 'pgl_epoint_to_ebox'; 6.536 - 6.537 -CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint); 6.538 - 6.539 -CREATE FUNCTION cast_epoint_to_ecircle(epoint) 6.540 - RETURNS ecircle 6.541 - LANGUAGE C IMMUTABLE STRICT 6.542 - AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecircle'; 6.543 - 6.544 -CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint); 6.545 - 6.546 -CREATE FUNCTION cast_epoint_to_ecluster(epoint) 6.547 - RETURNS ecluster 6.548 - LANGUAGE C IMMUTABLE STRICT 6.549 - AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecluster'; 6.550 - 6.551 -CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint); 6.552 - 6.553 -CREATE FUNCTION cast_ebox_to_ecluster(ebox) 6.554 - RETURNS ecluster 6.555 - LANGUAGE C IMMUTABLE STRICT 6.556 - AS '$libdir/latlon-v0010', 'pgl_ebox_to_ecluster'; 6.557 - 6.558 -CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox); 6.559 - 6.560 - 6.561 ---------------------------- 6.562 --- constructor functions -- 6.563 ---------------------------- 6.564 - 6.565 -CREATE FUNCTION epoint(float8, float8) 6.566 - RETURNS epoint 6.567 - LANGUAGE C IMMUTABLE STRICT 6.568 - AS '$libdir/latlon-v0010', 'pgl_create_epoint'; 6.569 - 6.570 -CREATE FUNCTION epoint_latlon(float8, float8) 6.571 - RETURNS epoint 6.572 - LANGUAGE SQL IMMUTABLE STRICT AS $$ 6.573 - SELECT @extschema@.epoint($1, $2) 6.574 - $$; 6.575 - 6.576 -CREATE FUNCTION epoint_lonlat(float8, float8) 6.577 - RETURNS epoint 6.578 - LANGUAGE SQL IMMUTABLE STRICT AS $$ 6.579 - SELECT @extschema@.epoint($2, $1) 6.580 - $$; 6.581 - 6.582 -CREATE FUNCTION epoint_with_sample_count(epoint, int4) 6.583 - RETURNS epoint_with_sample_count 6.584 - LANGUAGE C IMMUTABLE STRICT 6.585 - AS '$libdir/latlon-v0010', 'pgl_create_epoint_with_sample_count'; 6.586 - 6.587 -CREATE FUNCTION empty_ebox() 6.588 - RETURNS ebox 6.589 - LANGUAGE C IMMUTABLE STRICT 6.590 - AS '$libdir/latlon-v0010', 'pgl_create_empty_ebox'; 6.591 - 6.592 -CREATE FUNCTION ebox(float8, float8, float8, float8) 6.593 - RETURNS ebox 6.594 - LANGUAGE C IMMUTABLE STRICT 6.595 - AS '$libdir/latlon-v0010', 'pgl_create_ebox'; 6.596 - 6.597 -CREATE FUNCTION ebox(epoint, epoint) 6.598 - RETURNS ebox 6.599 - LANGUAGE C IMMUTABLE STRICT 6.600 - AS '$libdir/latlon-v0010', 'pgl_create_ebox_from_epoints'; 6.601 - 6.602 -CREATE FUNCTION ecircle(float8, float8, float8) 6.603 - RETURNS ecircle 6.604 - LANGUAGE C IMMUTABLE STRICT 6.605 - AS '$libdir/latlon-v0010', 'pgl_create_ecircle'; 6.606 - 6.607 -CREATE FUNCTION ecircle(epoint, float8) 6.608 - RETURNS ecircle 6.609 - LANGUAGE C IMMUTABLE STRICT 6.610 - AS '$libdir/latlon-v0010', 'pgl_create_ecircle_from_epoint'; 6.611 - 6.612 -CREATE FUNCTION ecluster_concat(ecluster[]) 6.613 - RETURNS ecluster 6.614 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.615 - SELECT pg_catalog.array_to_string($1, ' ')::@extschema@.ecluster 6.616 - $$; 6.617 - 6.618 -CREATE FUNCTION ecluster_concat(ecluster, ecluster) 6.619 - RETURNS ecluster 6.620 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.621 - SELECT ( 6.622 - $1::pg_catalog.text OPERATOR(pg_catalog.||) ' ' OPERATOR(pg_catalog.||) 6.623 - $2::pg_catalog.text 6.624 - )::@extschema@.ecluster 6.625 - $$; 6.626 - 6.627 -CREATE FUNCTION ecluster_create_multipoint(epoint[]) 6.628 - RETURNS ecluster 6.629 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.630 - SELECT 6.631 - pg_catalog.array_to_string( 6.632 - pg_catalog.array_agg( 6.633 - 'point (' OPERATOR(pg_catalog.||) unnest OPERATOR(pg_catalog.||) ')' 6.634 - ), 6.635 - ' ' 6.636 - )::@extschema@.ecluster 6.637 - FROM pg_catalog.unnest($1) 6.638 - $$; 6.639 - 6.640 -CREATE FUNCTION ecluster_create_path(epoint[]) 6.641 - RETURNS ecluster 6.642 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.643 - SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 6.644 - 'empty'::@extschema@.ecluster 6.645 - ELSE 6.646 - ( 6.647 - 'path (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')' 6.648 - )::@extschema@.ecluster 6.649 - END 6.650 - FROM pg_catalog.array_to_string($1, ' ') AS "str" 6.651 - $$; 6.652 - 6.653 -CREATE FUNCTION ecluster_create_outline(epoint[]) 6.654 - RETURNS ecluster 6.655 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.656 - SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 6.657 - 'empty'::@extschema@.ecluster 6.658 - ELSE 6.659 - ( 6.660 - 'outline (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')' 6.661 - )::@extschema@.ecluster 6.662 - END 6.663 - FROM pg_catalog.array_to_string($1, ' ') AS "str" 6.664 - $$; 6.665 - 6.666 -CREATE FUNCTION ecluster_create_polygon(epoint[]) 6.667 - RETURNS ecluster 6.668 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.669 - SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 6.670 - 'empty'::@extschema@.ecluster 6.671 - ELSE 6.672 - ( 6.673 - 'polygon (' OPERATOR(pg_catalog.||) pg_catalog.array_to_string($1, ' ') 6.674 - OPERATOR(pg_catalog.||) ')' 6.675 - )::@extschema@.ecluster 6.676 - END 6.677 - FROM pg_catalog.array_to_string($1, ' ') AS "str" 6.678 - $$; 6.679 - 6.680 - 6.681 ----------------------- 6.682 --- getter functions -- 6.683 ----------------------- 6.684 - 6.685 -CREATE FUNCTION latitude(epoint) 6.686 - RETURNS float8 6.687 - LANGUAGE C IMMUTABLE STRICT 6.688 - AS '$libdir/latlon-v0010', 'pgl_epoint_lat'; 6.689 - 6.690 -CREATE FUNCTION longitude(epoint) 6.691 - RETURNS float8 6.692 - LANGUAGE C IMMUTABLE STRICT 6.693 - AS '$libdir/latlon-v0010', 'pgl_epoint_lon'; 6.694 - 6.695 -CREATE FUNCTION min_latitude(ebox) 6.696 - RETURNS float8 6.697 - LANGUAGE C IMMUTABLE STRICT 6.698 - AS '$libdir/latlon-v0010', 'pgl_ebox_lat_min'; 6.699 - 6.700 -CREATE FUNCTION max_latitude(ebox) 6.701 - RETURNS float8 6.702 - LANGUAGE C IMMUTABLE STRICT 6.703 - AS '$libdir/latlon-v0010', 'pgl_ebox_lat_max'; 6.704 - 6.705 -CREATE FUNCTION min_longitude(ebox) 6.706 - RETURNS float8 6.707 - LANGUAGE C IMMUTABLE STRICT 6.708 - AS '$libdir/latlon-v0010', 'pgl_ebox_lon_min'; 6.709 - 6.710 -CREATE FUNCTION max_longitude(ebox) 6.711 - RETURNS float8 6.712 - LANGUAGE C IMMUTABLE STRICT 6.713 - AS '$libdir/latlon-v0010', 'pgl_ebox_lon_max'; 6.714 - 6.715 -CREATE FUNCTION center(ecircle) 6.716 - RETURNS epoint 6.717 - LANGUAGE C IMMUTABLE STRICT 6.718 - AS '$libdir/latlon-v0010', 'pgl_ecircle_center'; 6.719 - 6.720 -CREATE FUNCTION radius(ecircle) 6.721 - RETURNS float8 6.722 - LANGUAGE C IMMUTABLE STRICT 6.723 - AS '$libdir/latlon-v0010', 'pgl_ecircle_radius'; 6.724 - 6.725 -CREATE FUNCTION ecluster_extract_points(ecluster) 6.726 - RETURNS SETOF epoint 6.727 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.728 - SELECT "match"[2]::@extschema@.epoint 6.729 - FROM pg_catalog.regexp_matches( 6.730 - $1::pg_catalog.text, e'(^| )point \\(([^)]+)\\)', 'g' 6.731 - ) AS "match" 6.732 - $$; 6.733 - 6.734 -CREATE FUNCTION ecluster_extract_paths(ecluster) 6.735 - RETURNS SETOF epoint[] 6.736 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.737 - SELECT ( 6.738 - SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 6.739 - FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 6.740 - ) 6.741 - FROM pg_catalog.regexp_matches( 6.742 - $1::pg_catalog.text, e'(^| )path \\(([^)]+)\\)', 'g' 6.743 - ) AS "m1" 6.744 - $$; 6.745 - 6.746 -CREATE FUNCTION ecluster_extract_outlines(ecluster) 6.747 - RETURNS SETOF epoint[] 6.748 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.749 - SELECT ( 6.750 - SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 6.751 - FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 6.752 - ) 6.753 - FROM pg_catalog.regexp_matches( 6.754 - $1::pg_catalog.text, e'(^| )outline \\(([^)]+)\\)', 'g' 6.755 - ) AS "m1" 6.756 - $$; 6.757 - 6.758 -CREATE FUNCTION ecluster_extract_polygons(ecluster) 6.759 - RETURNS SETOF epoint[] 6.760 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.761 - SELECT ( 6.762 - SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 6.763 - FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 6.764 - ) 6.765 - FROM pg_catalog.regexp_matches( 6.766 - $1::pg_catalog.text, e'(^| )polygon \\(([^)]+)\\)', 'g' 6.767 - ) AS "m1" 6.768 - $$; 6.769 - 6.770 - 6.771 ---------------- 6.772 --- operators -- 6.773 ---------------- 6.774 - 6.775 -CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 6.776 - RETURNS boolean 6.777 - LANGUAGE C IMMUTABLE STRICT 6.778 - AS '$libdir/latlon-v0010', 'pgl_epoint_ebox_overlap'; 6.779 - 6.780 -CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 6.781 - RETURNS boolean 6.782 - LANGUAGE C IMMUTABLE STRICT 6.783 - AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_overlap'; 6.784 - 6.785 -CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 6.786 - RETURNS boolean 6.787 - LANGUAGE C IMMUTABLE STRICT 6.788 - AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_overlap'; 6.789 - 6.790 -CREATE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 6.791 - RETURNS boolean 6.792 - LANGUAGE C IMMUTABLE STRICT 6.793 - AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_may_overlap'; 6.794 - 6.795 -CREATE FUNCTION ebox_overlap_proc(ebox, ebox) 6.796 - RETURNS boolean 6.797 - LANGUAGE C IMMUTABLE STRICT 6.798 - AS '$libdir/latlon-v0010', 'pgl_ebox_overlap'; 6.799 - 6.800 -CREATE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 6.801 - RETURNS boolean 6.802 - LANGUAGE C IMMUTABLE STRICT 6.803 - AS '$libdir/latlon-v0010', 'pgl_ebox_ecircle_may_overlap'; 6.804 - 6.805 -CREATE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 6.806 - RETURNS boolean 6.807 - LANGUAGE C IMMUTABLE STRICT 6.808 - AS '$libdir/latlon-v0010', 'pgl_ebox_ecluster_may_overlap'; 6.809 - 6.810 -CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 6.811 - RETURNS boolean 6.812 - LANGUAGE C IMMUTABLE STRICT 6.813 - AS '$libdir/latlon-v0010', 'pgl_ecircle_overlap'; 6.814 - 6.815 -CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 6.816 - RETURNS boolean 6.817 - LANGUAGE C IMMUTABLE STRICT 6.818 - AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_overlap'; 6.819 - 6.820 -CREATE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 6.821 - RETURNS boolean 6.822 - LANGUAGE C IMMUTABLE STRICT 6.823 - AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_may_overlap'; 6.824 - 6.825 -CREATE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 6.826 - RETURNS boolean 6.827 - LANGUAGE C IMMUTABLE STRICT 6.828 - AS '$libdir/latlon-v0010', 'pgl_ecluster_overlap'; 6.829 - 6.830 -CREATE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 6.831 - RETURNS boolean 6.832 - LANGUAGE C IMMUTABLE STRICT 6.833 - AS '$libdir/latlon-v0010', 'pgl_ecluster_may_overlap'; 6.834 - 6.835 -CREATE FUNCTION ecluster_contains_proc(ecluster, ecluster) 6.836 - RETURNS boolean 6.837 - LANGUAGE C IMMUTABLE STRICT 6.838 - AS '$libdir/latlon-v0010', 'pgl_ecluster_contains'; 6.839 - 6.840 -CREATE FUNCTION epoint_distance_proc(epoint, epoint) 6.841 - RETURNS float8 6.842 - LANGUAGE C IMMUTABLE STRICT 6.843 - AS '$libdir/latlon-v0010', 'pgl_epoint_distance'; 6.844 - 6.845 -CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 6.846 - RETURNS float8 6.847 - LANGUAGE C IMMUTABLE STRICT 6.848 - AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_distance'; 6.849 - 6.850 -CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 6.851 - RETURNS float8 6.852 - LANGUAGE C IMMUTABLE STRICT 6.853 - AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_distance'; 6.854 - 6.855 -CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle) 6.856 - RETURNS float8 6.857 - LANGUAGE C IMMUTABLE STRICT 6.858 - AS '$libdir/latlon-v0010', 'pgl_ecircle_distance'; 6.859 - 6.860 -CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 6.861 - RETURNS float8 6.862 - LANGUAGE C IMMUTABLE STRICT 6.863 - AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_distance'; 6.864 - 6.865 -CREATE FUNCTION ecluster_distance_proc(ecluster, ecluster) 6.866 - RETURNS float8 6.867 - LANGUAGE C IMMUTABLE STRICT 6.868 - AS '$libdir/latlon-v0010', 'pgl_ecluster_distance'; 6.869 - 6.870 -CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) 6.871 - RETURNS float8 6.872 - LANGUAGE C IMMUTABLE STRICT 6.873 - AS '$libdir/latlon-v0010', 'pgl_ecluster_epoint_sc_fair_distance'; 6.874 - 6.875 -CREATE OPERATOR && ( 6.876 - leftarg = epoint, 6.877 - rightarg = ebox, 6.878 - procedure = epoint_ebox_overlap_proc, 6.879 - commutator = &&, 6.880 - restrict = areasel, 6.881 - join = areajoinsel 6.882 -); 6.883 - 6.884 -CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint) 6.885 - RETURNS boolean 6.886 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 6.887 - 6.888 -CREATE OPERATOR && ( 6.889 - leftarg = ebox, 6.890 - rightarg = epoint, 6.891 - procedure = epoint_ebox_overlap_commutator, 6.892 - commutator = &&, 6.893 - restrict = areasel, 6.894 - join = areajoinsel 6.895 -); 6.896 - 6.897 -CREATE OPERATOR && ( 6.898 - leftarg = epoint, 6.899 - rightarg = ecircle, 6.900 - procedure = epoint_ecircle_overlap_proc, 6.901 - commutator = &&, 6.902 - restrict = areasel, 6.903 - join = areajoinsel 6.904 -); 6.905 - 6.906 -CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint) 6.907 - RETURNS boolean 6.908 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 6.909 - 6.910 -CREATE OPERATOR && ( 6.911 - leftarg = ecircle, 6.912 - rightarg = epoint, 6.913 - procedure = epoint_ecircle_overlap_commutator, 6.914 - commutator = &&, 6.915 - restrict = areasel, 6.916 - join = areajoinsel 6.917 -); 6.918 - 6.919 -CREATE OPERATOR && ( 6.920 - leftarg = epoint, 6.921 - rightarg = ecluster, 6.922 - procedure = epoint_ecluster_overlap_proc, 6.923 - commutator = &&, 6.924 - restrict = areasel, 6.925 - join = areajoinsel 6.926 -); 6.927 - 6.928 -CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint) 6.929 - RETURNS boolean 6.930 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 6.931 - 6.932 -CREATE OPERATOR && ( 6.933 - leftarg = ecluster, 6.934 - rightarg = epoint, 6.935 - procedure = epoint_ecluster_overlap_commutator, 6.936 - commutator = &&, 6.937 - restrict = areasel, 6.938 - join = areajoinsel 6.939 -); 6.940 - 6.941 -CREATE OPERATOR && ( 6.942 - leftarg = ebox, 6.943 - rightarg = ebox, 6.944 - procedure = ebox_overlap_proc, 6.945 - commutator = &&, 6.946 - restrict = areasel, 6.947 - join = areajoinsel 6.948 -); 6.949 - 6.950 -CREATE OPERATOR && ( 6.951 - leftarg = ecircle, 6.952 - rightarg = ecircle, 6.953 - procedure = ecircle_overlap_proc, 6.954 - commutator = &&, 6.955 - restrict = areasel, 6.956 - join = areajoinsel 6.957 -); 6.958 - 6.959 -CREATE OPERATOR && ( 6.960 - leftarg = ecircle, 6.961 - rightarg = ecluster, 6.962 - procedure = ecircle_ecluster_overlap_proc, 6.963 - commutator = &&, 6.964 - restrict = areasel, 6.965 - join = areajoinsel 6.966 -); 6.967 - 6.968 -CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle) 6.969 - RETURNS boolean 6.970 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 6.971 - 6.972 -CREATE OPERATOR && ( 6.973 - leftarg = ecluster, 6.974 - rightarg = ecircle, 6.975 - procedure = ecircle_ecluster_overlap_commutator, 6.976 - commutator = &&, 6.977 - restrict = areasel, 6.978 - join = areajoinsel 6.979 -); 6.980 - 6.981 -CREATE OPERATOR && ( 6.982 - leftarg = ecluster, 6.983 - rightarg = ecluster, 6.984 - procedure = ecluster_overlap_proc, 6.985 - commutator = &&, 6.986 - restrict = areasel, 6.987 - join = areajoinsel 6.988 -); 6.989 - 6.990 -CREATE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle) 6.991 - RETURNS boolean 6.992 - LANGUAGE sql IMMUTABLE 6.993 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2'; 6.994 - 6.995 -CREATE OPERATOR && ( 6.996 - leftarg = ebox, 6.997 - rightarg = ecircle, 6.998 - procedure = ebox_ecircle_overlap_castwrap, 6.999 - commutator = &&, 6.1000 - restrict = areasel, 6.1001 - join = areajoinsel 6.1002 -); 6.1003 - 6.1004 -CREATE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox) 6.1005 - RETURNS boolean 6.1006 - LANGUAGE sql IMMUTABLE 6.1007 - AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster'; 6.1008 - 6.1009 -CREATE OPERATOR && ( 6.1010 - leftarg = ecircle, 6.1011 - rightarg = ebox, 6.1012 - procedure = ebox_ecircle_overlap_castwrap, 6.1013 - commutator = &&, 6.1014 - restrict = areasel, 6.1015 - join = areajoinsel 6.1016 -); 6.1017 - 6.1018 -CREATE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster) 6.1019 - RETURNS boolean 6.1020 - LANGUAGE sql IMMUTABLE 6.1021 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2'; 6.1022 - 6.1023 -CREATE OPERATOR && ( 6.1024 - leftarg = ebox, 6.1025 - rightarg = ecluster, 6.1026 - procedure = ebox_ecluster_overlap_castwrap, 6.1027 - commutator = &&, 6.1028 - restrict = areasel, 6.1029 - join = areajoinsel 6.1030 -); 6.1031 - 6.1032 -CREATE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox) 6.1033 - RETURNS boolean 6.1034 - LANGUAGE sql IMMUTABLE 6.1035 - AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster'; 6.1036 - 6.1037 -CREATE OPERATOR && ( 6.1038 - leftarg = ecluster, 6.1039 - rightarg = ebox, 6.1040 - procedure = ebox_ecluster_overlap_castwrap, 6.1041 - commutator = &&, 6.1042 - restrict = areasel, 6.1043 - join = areajoinsel 6.1044 -); 6.1045 - 6.1046 -CREATE OPERATOR &&+ ( 6.1047 - leftarg = epoint, 6.1048 - rightarg = ecluster, 6.1049 - procedure = epoint_ecluster_may_overlap_proc, 6.1050 - commutator = &&+, 6.1051 - restrict = areasel, 6.1052 - join = areajoinsel 6.1053 -); 6.1054 - 6.1055 -CREATE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint) 6.1056 - RETURNS boolean 6.1057 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 6.1058 - 6.1059 -CREATE OPERATOR &&+ ( 6.1060 - leftarg = ecluster, 6.1061 - rightarg = epoint, 6.1062 - procedure = epoint_ecluster_may_overlap_commutator, 6.1063 - commutator = &&+, 6.1064 - restrict = areasel, 6.1065 - join = areajoinsel 6.1066 -); 6.1067 - 6.1068 -CREATE OPERATOR &&+ ( 6.1069 - leftarg = ebox, 6.1070 - rightarg = ecircle, 6.1071 - procedure = ebox_ecircle_may_overlap_proc, 6.1072 - commutator = &&+, 6.1073 - restrict = areasel, 6.1074 - join = areajoinsel 6.1075 -); 6.1076 - 6.1077 -CREATE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox) 6.1078 - RETURNS boolean 6.1079 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 6.1080 - 6.1081 -CREATE OPERATOR &&+ ( 6.1082 - leftarg = ecircle, 6.1083 - rightarg = ebox, 6.1084 - procedure = ebox_ecircle_may_overlap_commutator, 6.1085 - commutator = &&+, 6.1086 - restrict = areasel, 6.1087 - join = areajoinsel 6.1088 -); 6.1089 - 6.1090 -CREATE OPERATOR &&+ ( 6.1091 - leftarg = ebox, 6.1092 - rightarg = ecluster, 6.1093 - procedure = ebox_ecluster_may_overlap_proc, 6.1094 - commutator = &&+, 6.1095 - restrict = areasel, 6.1096 - join = areajoinsel 6.1097 -); 6.1098 - 6.1099 -CREATE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox) 6.1100 - RETURNS boolean 6.1101 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 6.1102 - 6.1103 -CREATE OPERATOR &&+ ( 6.1104 - leftarg = ecluster, 6.1105 - rightarg = ebox, 6.1106 - procedure = ebox_ecluster_may_overlap_commutator, 6.1107 - commutator = &&+, 6.1108 - restrict = areasel, 6.1109 - join = areajoinsel 6.1110 -); 6.1111 - 6.1112 -CREATE OPERATOR &&+ ( 6.1113 - leftarg = ecircle, 6.1114 - rightarg = ecluster, 6.1115 - procedure = ecircle_ecluster_may_overlap_proc, 6.1116 - commutator = &&+, 6.1117 - restrict = areasel, 6.1118 - join = areajoinsel 6.1119 -); 6.1120 - 6.1121 -CREATE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle) 6.1122 - RETURNS boolean 6.1123 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 6.1124 - 6.1125 -CREATE OPERATOR &&+ ( 6.1126 - leftarg = ecluster, 6.1127 - rightarg = ecircle, 6.1128 - procedure = ecircle_ecluster_may_overlap_commutator, 6.1129 - commutator = &&+, 6.1130 - restrict = areasel, 6.1131 - join = areajoinsel 6.1132 -); 6.1133 - 6.1134 -CREATE OPERATOR &&+ ( 6.1135 - leftarg = ecluster, 6.1136 - rightarg = ecluster, 6.1137 - procedure = ecluster_may_overlap_proc, 6.1138 - commutator = &&+, 6.1139 - restrict = areasel, 6.1140 - join = areajoinsel 6.1141 -); 6.1142 - 6.1143 -CREATE OPERATOR @> ( 6.1144 - leftarg = ebox, 6.1145 - rightarg = epoint, 6.1146 - procedure = epoint_ebox_overlap_commutator, 6.1147 - commutator = <@, 6.1148 - restrict = areasel, 6.1149 - join = areajoinsel 6.1150 -); 6.1151 - 6.1152 -CREATE OPERATOR <@ ( 6.1153 - leftarg = epoint, 6.1154 - rightarg = ebox, 6.1155 - procedure = epoint_ebox_overlap_proc, 6.1156 - commutator = @>, 6.1157 - restrict = areasel, 6.1158 - join = areajoinsel 6.1159 -); 6.1160 - 6.1161 -CREATE OPERATOR @> ( 6.1162 - leftarg = ecluster, 6.1163 - rightarg = epoint, 6.1164 - procedure = epoint_ecluster_overlap_commutator, 6.1165 - commutator = <@, 6.1166 - restrict = areasel, 6.1167 - join = areajoinsel 6.1168 -); 6.1169 - 6.1170 -CREATE OPERATOR <@ ( 6.1171 - leftarg = epoint, 6.1172 - rightarg = ecluster, 6.1173 - procedure = epoint_ecluster_overlap_proc, 6.1174 - commutator = @>, 6.1175 - restrict = areasel, 6.1176 - join = areajoinsel 6.1177 -); 6.1178 - 6.1179 -CREATE OPERATOR @> ( 6.1180 - leftarg = ecluster, 6.1181 - rightarg = ecluster, 6.1182 - procedure = ecluster_contains_proc, 6.1183 - commutator = <@, 6.1184 - restrict = areasel, 6.1185 - join = areajoinsel 6.1186 -); 6.1187 - 6.1188 -CREATE FUNCTION ecluster_contains_commutator(ecluster, ecluster) 6.1189 - RETURNS boolean 6.1190 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.@>) $1'; 6.1191 - 6.1192 -CREATE OPERATOR <@ ( 6.1193 - leftarg = ecluster, 6.1194 - rightarg = ecluster, 6.1195 - procedure = ecluster_contains_commutator, 6.1196 - commutator = @>, 6.1197 - restrict = areasel, 6.1198 - join = areajoinsel 6.1199 -); 6.1200 - 6.1201 -CREATE FUNCTION ebox_contains_castwrap(ebox, ebox) 6.1202 - RETURNS boolean 6.1203 - LANGUAGE sql IMMUTABLE AS $$ 6.1204 - SELECT 6.1205 - $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2::@extschema@.ecluster 6.1206 - $$; 6.1207 - 6.1208 -CREATE OPERATOR @> ( 6.1209 - leftarg = ebox, 6.1210 - rightarg = ebox, 6.1211 - procedure = ebox_contains_castwrap, 6.1212 - commutator = <@, 6.1213 - restrict = areasel, 6.1214 - join = areajoinsel 6.1215 -); 6.1216 - 6.1217 -CREATE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox) 6.1218 - RETURNS boolean 6.1219 - LANGUAGE sql IMMUTABLE AS $$ 6.1220 - SELECT 6.1221 - $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1::@extschema@.ecluster 6.1222 - $$; 6.1223 - 6.1224 -CREATE OPERATOR <@ ( 6.1225 - leftarg = ebox, 6.1226 - rightarg = ebox, 6.1227 - procedure = ebox_contains_swapped_castwrap, 6.1228 - commutator = @>, 6.1229 - restrict = areasel, 6.1230 - join = areajoinsel 6.1231 -); 6.1232 - 6.1233 -CREATE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster) 6.1234 - RETURNS boolean 6.1235 - LANGUAGE sql IMMUTABLE 6.1236 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2'; 6.1237 - 6.1238 -CREATE OPERATOR @> ( 6.1239 - leftarg = ebox, 6.1240 - rightarg = ecluster, 6.1241 - procedure = ebox_ecluster_contains_castwrap, 6.1242 - commutator = <@, 6.1243 - restrict = areasel, 6.1244 - join = areajoinsel 6.1245 -); 6.1246 - 6.1247 -CREATE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox) 6.1248 - RETURNS boolean 6.1249 - LANGUAGE sql IMMUTABLE 6.1250 - AS 'SELECT $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1'; 6.1251 - 6.1252 -CREATE OPERATOR <@ ( 6.1253 - leftarg = ecluster, 6.1254 - rightarg = ebox, 6.1255 - procedure = ebox_ecluster_contains_castwrap, 6.1256 - commutator = @>, 6.1257 - restrict = areasel, 6.1258 - join = areajoinsel 6.1259 -); 6.1260 - 6.1261 -CREATE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox) 6.1262 - RETURNS boolean 6.1263 - LANGUAGE sql IMMUTABLE 6.1264 - AS 'SELECT $1 OPERATOR(@extschema@.@>) $2::@extschema@.ecluster'; 6.1265 - 6.1266 -CREATE OPERATOR @> ( 6.1267 - leftarg = ecluster, 6.1268 - rightarg = ebox, 6.1269 - procedure = ecluster_ebox_contains_castwrap, 6.1270 - commutator = <@, 6.1271 - restrict = areasel, 6.1272 - join = areajoinsel 6.1273 -); 6.1274 - 6.1275 -CREATE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster) 6.1276 - RETURNS boolean 6.1277 - LANGUAGE sql IMMUTABLE 6.1278 - AS 'SELECT $2 OPERATOR(@extschema@.@>) $1::@extschema@.ecluster'; 6.1279 - 6.1280 -CREATE OPERATOR <@ ( 6.1281 - leftarg = ebox, 6.1282 - rightarg = ecluster, 6.1283 - procedure = ecluster_ebox_contains_castwrap, 6.1284 - commutator = @>, 6.1285 - restrict = areasel, 6.1286 - join = areajoinsel 6.1287 -); 6.1288 - 6.1289 -CREATE OPERATOR <-> ( 6.1290 - leftarg = epoint, 6.1291 - rightarg = epoint, 6.1292 - procedure = epoint_distance_proc, 6.1293 - commutator = <-> 6.1294 -); 6.1295 - 6.1296 -CREATE OPERATOR <-> ( 6.1297 - leftarg = epoint, 6.1298 - rightarg = ecircle, 6.1299 - procedure = epoint_ecircle_distance_proc, 6.1300 - commutator = <-> 6.1301 -); 6.1302 - 6.1303 -CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint) 6.1304 - RETURNS float8 6.1305 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 6.1306 - 6.1307 -CREATE OPERATOR <-> ( 6.1308 - leftarg = ecircle, 6.1309 - rightarg = epoint, 6.1310 - procedure = epoint_ecircle_distance_commutator, 6.1311 - commutator = <-> 6.1312 -); 6.1313 - 6.1314 -CREATE OPERATOR <-> ( 6.1315 - leftarg = epoint, 6.1316 - rightarg = ecluster, 6.1317 - procedure = epoint_ecluster_distance_proc, 6.1318 - commutator = <-> 6.1319 -); 6.1320 - 6.1321 -CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint) 6.1322 - RETURNS float8 6.1323 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 6.1324 - 6.1325 -CREATE OPERATOR <-> ( 6.1326 - leftarg = ecluster, 6.1327 - rightarg = epoint, 6.1328 - procedure = epoint_ecluster_distance_commutator, 6.1329 - commutator = <-> 6.1330 -); 6.1331 - 6.1332 -CREATE OPERATOR <-> ( 6.1333 - leftarg = ecircle, 6.1334 - rightarg = ecircle, 6.1335 - procedure = ecircle_distance_proc, 6.1336 - commutator = <-> 6.1337 -); 6.1338 - 6.1339 -CREATE OPERATOR <-> ( 6.1340 - leftarg = ecircle, 6.1341 - rightarg = ecluster, 6.1342 - procedure = ecircle_ecluster_distance_proc, 6.1343 - commutator = <-> 6.1344 -); 6.1345 - 6.1346 -CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle) 6.1347 - RETURNS float8 6.1348 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 6.1349 - 6.1350 -CREATE OPERATOR <-> ( 6.1351 - leftarg = ecluster, 6.1352 - rightarg = ecircle, 6.1353 - procedure = ecircle_ecluster_distance_commutator, 6.1354 - commutator = <-> 6.1355 -); 6.1356 - 6.1357 -CREATE OPERATOR <-> ( 6.1358 - leftarg = ecluster, 6.1359 - rightarg = ecluster, 6.1360 - procedure = ecluster_distance_proc, 6.1361 - commutator = <-> 6.1362 -); 6.1363 - 6.1364 -CREATE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox) 6.1365 - RETURNS float8 6.1366 - LANGUAGE sql IMMUTABLE 6.1367 - AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 6.1368 - 6.1369 -CREATE OPERATOR <-> ( 6.1370 - leftarg = epoint, 6.1371 - rightarg = ebox, 6.1372 - procedure = epoint_ebox_distance_castwrap, 6.1373 - commutator = <-> 6.1374 -); 6.1375 - 6.1376 -CREATE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint) 6.1377 - RETURNS float8 6.1378 - LANGUAGE sql IMMUTABLE 6.1379 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 6.1380 - 6.1381 -CREATE OPERATOR <-> ( 6.1382 - leftarg = ebox, 6.1383 - rightarg = epoint, 6.1384 - procedure = epoint_ebox_distance_castwrap, 6.1385 - commutator = <-> 6.1386 -); 6.1387 - 6.1388 -CREATE FUNCTION ebox_distance_castwrap(ebox, ebox) 6.1389 - RETURNS float8 6.1390 - LANGUAGE sql IMMUTABLE AS $$ 6.1391 - SELECT 6.1392 - $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2::@extschema@.ecluster 6.1393 - $$; 6.1394 - 6.1395 -CREATE OPERATOR <-> ( 6.1396 - leftarg = ebox, 6.1397 - rightarg = ebox, 6.1398 - procedure = ebox_distance_castwrap, 6.1399 - commutator = <-> 6.1400 -); 6.1401 - 6.1402 -CREATE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle) 6.1403 - RETURNS float8 6.1404 - LANGUAGE sql IMMUTABLE 6.1405 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 6.1406 - 6.1407 -CREATE OPERATOR <-> ( 6.1408 - leftarg = ebox, 6.1409 - rightarg = ecircle, 6.1410 - procedure = ebox_ecircle_distance_castwrap, 6.1411 - commutator = <-> 6.1412 -); 6.1413 - 6.1414 -CREATE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox) 6.1415 - RETURNS float8 6.1416 - LANGUAGE sql IMMUTABLE 6.1417 - AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 6.1418 - 6.1419 -CREATE OPERATOR <-> ( 6.1420 - leftarg = ecircle, 6.1421 - rightarg = ebox, 6.1422 - procedure = ebox_ecircle_distance_castwrap, 6.1423 - commutator = <-> 6.1424 -); 6.1425 - 6.1426 -CREATE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster) 6.1427 - RETURNS float8 6.1428 - LANGUAGE sql IMMUTABLE 6.1429 - AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 6.1430 - 6.1431 -CREATE OPERATOR <-> ( 6.1432 - leftarg = ebox, 6.1433 - rightarg = ecluster, 6.1434 - procedure = ebox_ecluster_distance_castwrap, 6.1435 - commutator = <-> 6.1436 -); 6.1437 - 6.1438 -CREATE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox) 6.1439 - RETURNS float8 6.1440 - LANGUAGE sql IMMUTABLE 6.1441 - AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 6.1442 - 6.1443 -CREATE OPERATOR <-> ( 6.1444 - leftarg = ecluster, 6.1445 - rightarg = ebox, 6.1446 - procedure = ebox_ecluster_distance_castwrap, 6.1447 - commutator = <-> 6.1448 -); 6.1449 - 6.1450 -CREATE OPERATOR <=> ( 6.1451 - leftarg = ecluster, 6.1452 - rightarg = epoint_with_sample_count, 6.1453 - procedure = fair_distance_operator_proc 6.1454 -); 6.1455 - 6.1456 - 6.1457 ----------------- 6.1458 --- GiST index -- 6.1459 ----------------- 6.1460 - 6.1461 -CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 6.1462 - RETURNS boolean 6.1463 - LANGUAGE C STRICT 6.1464 - AS '$libdir/latlon-v0010', 'pgl_gist_consistent'; 6.1465 - 6.1466 -CREATE FUNCTION pgl_gist_union(internal, internal) 6.1467 - RETURNS internal 6.1468 - LANGUAGE C STRICT 6.1469 - AS '$libdir/latlon-v0010', 'pgl_gist_union'; 6.1470 - 6.1471 -CREATE FUNCTION pgl_gist_compress_epoint(internal) 6.1472 - RETURNS internal 6.1473 - LANGUAGE C STRICT 6.1474 - AS '$libdir/latlon-v0010', 'pgl_gist_compress_epoint'; 6.1475 - 6.1476 -CREATE FUNCTION pgl_gist_compress_ecircle(internal) 6.1477 - RETURNS internal 6.1478 - LANGUAGE C STRICT 6.1479 - AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecircle'; 6.1480 - 6.1481 -CREATE FUNCTION pgl_gist_compress_ecluster(internal) 6.1482 - RETURNS internal 6.1483 - LANGUAGE C STRICT 6.1484 - AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecluster'; 6.1485 - 6.1486 -CREATE FUNCTION pgl_gist_decompress(internal) 6.1487 - RETURNS internal 6.1488 - LANGUAGE C STRICT 6.1489 - AS '$libdir/latlon-v0010', 'pgl_gist_decompress'; 6.1490 - 6.1491 -CREATE FUNCTION pgl_gist_penalty(internal, internal, internal) 6.1492 - RETURNS internal 6.1493 - LANGUAGE C STRICT 6.1494 - AS '$libdir/latlon-v0010', 'pgl_gist_penalty'; 6.1495 - 6.1496 -CREATE FUNCTION pgl_gist_picksplit(internal, internal) 6.1497 - RETURNS internal 6.1498 - LANGUAGE C STRICT 6.1499 - AS '$libdir/latlon-v0010', 'pgl_gist_picksplit'; 6.1500 - 6.1501 -CREATE FUNCTION pgl_gist_same(internal, internal, internal) 6.1502 - RETURNS internal 6.1503 - LANGUAGE C STRICT 6.1504 - AS '$libdir/latlon-v0010', 'pgl_gist_same'; 6.1505 - 6.1506 -CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 6.1507 - RETURNS internal 6.1508 - LANGUAGE C STRICT 6.1509 - AS '$libdir/latlon-v0010', 'pgl_gist_distance'; 6.1510 - 6.1511 -CREATE OPERATOR CLASS epoint_ops 6.1512 - DEFAULT FOR TYPE epoint USING gist AS 6.1513 - OPERATOR 11 = , 6.1514 - OPERATOR 22 && (epoint, ebox), 6.1515 - OPERATOR 222 <@ (epoint, ebox), 6.1516 - OPERATOR 23 && (epoint, ecircle), 6.1517 - OPERATOR 24 && (epoint, ecluster), 6.1518 - OPERATOR 124 &&+ (epoint, ecluster), 6.1519 - OPERATOR 224 <@ (epoint, ecluster), 6.1520 - OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 6.1521 - OPERATOR 32 <-> (epoint, ebox) FOR ORDER BY float_ops, 6.1522 - OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 6.1523 - OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 6.1524 - FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 6.1525 - FUNCTION 2 pgl_gist_union(internal, internal), 6.1526 - FUNCTION 3 pgl_gist_compress_epoint(internal), 6.1527 - FUNCTION 4 pgl_gist_decompress(internal), 6.1528 - FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 6.1529 - FUNCTION 6 pgl_gist_picksplit(internal, internal), 6.1530 - FUNCTION 7 pgl_gist_same(internal, internal, internal), 6.1531 - FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 6.1532 - STORAGE ekey_point; 6.1533 - 6.1534 -CREATE OPERATOR CLASS ecircle_ops 6.1535 - DEFAULT FOR TYPE ecircle USING gist AS 6.1536 - OPERATOR 13 = , 6.1537 - OPERATOR 21 && (ecircle, epoint), 6.1538 - OPERATOR 22 && (ecircle, ebox), 6.1539 - OPERATOR 122 &&+ (ecircle, ebox), 6.1540 - OPERATOR 23 && (ecircle, ecircle), 6.1541 - OPERATOR 24 && (ecircle, ecluster), 6.1542 - OPERATOR 124 &&+ (ecircle, ecluster), 6.1543 - OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 6.1544 - OPERATOR 32 <-> (ecircle, ebox) FOR ORDER BY float_ops, 6.1545 - OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 6.1546 - OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 6.1547 - FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 6.1548 - FUNCTION 2 pgl_gist_union(internal, internal), 6.1549 - FUNCTION 3 pgl_gist_compress_ecircle(internal), 6.1550 - FUNCTION 4 pgl_gist_decompress(internal), 6.1551 - FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 6.1552 - FUNCTION 6 pgl_gist_picksplit(internal, internal), 6.1553 - FUNCTION 7 pgl_gist_same(internal, internal, internal), 6.1554 - FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 6.1555 - STORAGE ekey_area; 6.1556 - 6.1557 -CREATE OPERATOR CLASS ecluster_ops 6.1558 - DEFAULT FOR TYPE ecluster USING gist AS 6.1559 - OPERATOR 21 && (ecluster, epoint), 6.1560 - OPERATOR 121 &&+ (ecluster, epoint), 6.1561 - OPERATOR 221 @> (ecluster, epoint), 6.1562 - OPERATOR 22 && (ecluster, ebox), 6.1563 - OPERATOR 122 &&+ (ecluster, ebox), 6.1564 - OPERATOR 222 @> (ecluster, ebox), 6.1565 - OPERATOR 322 <@ (ecluster, ebox), 6.1566 - OPERATOR 23 && (ecluster, ecircle), 6.1567 - OPERATOR 123 &&+ (ecluster, ecircle), 6.1568 - OPERATOR 24 && (ecluster, ecluster), 6.1569 - OPERATOR 124 &&+ (ecluster, ecluster), 6.1570 - OPERATOR 224 @> (ecluster, ecluster), 6.1571 - OPERATOR 324 <@ (ecluster, ecluster), 6.1572 - OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops, 6.1573 - OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops, 6.1574 - OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops, 6.1575 - OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops, 6.1576 - OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops, 6.1577 - FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 6.1578 - FUNCTION 2 pgl_gist_union(internal, internal), 6.1579 - FUNCTION 3 pgl_gist_compress_ecluster(internal), 6.1580 - FUNCTION 4 pgl_gist_decompress(internal), 6.1581 - FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 6.1582 - FUNCTION 6 pgl_gist_picksplit(internal, internal), 6.1583 - FUNCTION 7 pgl_gist_same(internal, internal, internal), 6.1584 - FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 6.1585 - STORAGE ekey_area; 6.1586 - 6.1587 - 6.1588 ---------------------- 6.1589 --- alias functions -- 6.1590 ---------------------- 6.1591 - 6.1592 -CREATE FUNCTION distance(epoint, epoint) 6.1593 - RETURNS float8 6.1594 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2'; 6.1595 - 6.1596 -CREATE FUNCTION distance(ecluster, epoint) 6.1597 - RETURNS float8 6.1598 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2'; 6.1599 - 6.1600 -CREATE FUNCTION distance_within(epoint, epoint, float8) 6.1601 - RETURNS boolean 6.1602 - LANGUAGE sql IMMUTABLE 6.1603 - AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)'; 6.1604 - 6.1605 -CREATE FUNCTION distance_within(ecluster, epoint, float8) 6.1606 - RETURNS boolean 6.1607 - LANGUAGE sql IMMUTABLE 6.1608 - AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)'; 6.1609 - 6.1610 -CREATE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) 6.1611 - RETURNS float8 6.1612 - LANGUAGE sql IMMUTABLE AS $$ 6.1613 - SELECT 6.1614 - $1 OPERATOR(@extschema@.<=>) @extschema@.epoint_with_sample_count($2, $3) 6.1615 - $$; 6.1616 - 6.1617 - 6.1618 --------------------------------- 6.1619 --- other data storage formats -- 6.1620 --------------------------------- 6.1621 - 6.1622 -CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint') 6.1623 - RETURNS epoint 6.1624 - LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 6.1625 - DECLARE 6.1626 - "result" @extschema@.epoint; 6.1627 - BEGIN 6.1628 - IF $3 OPERATOR(pg_catalog.=) 'epoint_lonlat' THEN 6.1629 - -- avoid dynamic command execution for better performance 6.1630 - RETURN @extschema@.epoint($2, $1); 6.1631 - END IF; 6.1632 - IF 6.1633 - $3 OPERATOR(pg_catalog.=) 'epoint' OR 6.1634 - $3 OPERATOR(pg_catalog.=) 'epoint_latlon' 6.1635 - THEN 6.1636 - -- avoid dynamic command execution for better performance 6.1637 - RETURN @extschema@.epoint($1, $2); 6.1638 - END IF; 6.1639 - EXECUTE 6.1640 - 'SELECT ' OPERATOR(pg_catalog.||) $3 OPERATOR(pg_catalog.||) '($1, $2)' INTO STRICT "result" USING $1, $2; 6.1641 - RETURN "result"; 6.1642 - END; 6.1643 - $$; 6.1644 - 6.1645 -CREATE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat') 6.1646 - RETURNS SETOF jsonb 6.1647 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.1648 - SELECT "result" FROM 6.1649 - ( SELECT pg_catalog.jsonb_array_length($1) - 1 ) 6.1650 - AS "lastindex_row" ("lastindex") 6.1651 - CROSS JOIN LATERAL pg_catalog.jsonb_array_elements( 6.1652 - CASE WHEN 6.1653 - @extschema@.coords_to_epoint( 6.1654 - ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 0) 6.1655 - ::pg_catalog.float8, 6.1656 - ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 1) 6.1657 - ::pg_catalog.float8, 6.1658 - $2 6.1659 - ) OPERATOR(pg_catalog.=) @extschema@.coords_to_epoint( 6.1660 - ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 0) 6.1661 - ::pg_catalog.float8, 6.1662 - ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 1) 6.1663 - ::pg_catalog.float8, 6.1664 - $2 6.1665 - ) 6.1666 - THEN 6.1667 - $1 - "lastindex" 6.1668 - ELSE 6.1669 - $1 6.1670 - END 6.1671 - ) AS "result_row" ("result") 6.1672 - $$; 6.1673 - 6.1674 -CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat') 6.1675 - RETURNS epoint 6.1676 - LANGUAGE sql IMMUTABLE STRICT AS $$ 6.1677 - SELECT CASE 6.1678 - WHEN $1 OPERATOR(pg_catalog.->>) 'type' OPERATOR(pg_catalog.=) 'Point' THEN 6.1679 - @extschema@.coords_to_epoint( 6.1680 - ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0) 6.1681 - ::pg_catalog.float8, 6.1682 - ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1) 6.1683 - ::pg_catalog.float8, 6.1684 - $2 6.1685 - ) 6.1686 - WHEN $1->>'type' = 'Feature' THEN 6.1687 - @extschema@.GeoJSON_to_epoint($1 OPERATOR(pg_catalog.->) 'geometry', $2) 6.1688 - ELSE 6.1689 - NULL 6.1690 - END 6.1691 - $$; 6.1692 - 6.1693 -CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat') 6.1694 - RETURNS ecluster 6.1695 - LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 6.1696 - DECLARE 6.1697 - "tp" TEXT = $1 OPERATOR(pg_catalog.->>) 'type'; 6.1698 - BEGIN 6.1699 - IF "tp" = 'Point' THEN RETURN 6.1700 - @extschema@.coords_to_epoint( 6.1701 - ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0) 6.1702 - ::pg_catalog.float8, 6.1703 - ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1) 6.1704 - ::pg_catalog.float8, 6.1705 - $2 6.1706 - )::@extschema@.ecluster; 6.1707 - END IF; 6.1708 - raise notice 'DEBUG2'; 6.1709 - IF "tp" = 'MultiPoint' THEN RETURN 6.1710 - ( SELECT @extschema@.ecluster_create_multipoint(pg_catalog.array_agg( 6.1711 - @extschema@.coords_to_epoint( 6.1712 - ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 6.1713 - ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 6.1714 - $2 6.1715 - ) 6.1716 - )) 6.1717 - FROM pg_catalog.jsonb_array_elements( 6.1718 - $1 OPERATOR(pg_catalog.->) 'coordinates' 6.1719 - ) AS "coord" 6.1720 - ); 6.1721 - END IF; 6.1722 - IF "tp" = 'LineString' THEN RETURN 6.1723 - ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg( 6.1724 - @extschema@.coords_to_epoint( 6.1725 - ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 6.1726 - ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 6.1727 - $2 6.1728 - ) 6.1729 - )) 6.1730 - FROM pg_catalog.jsonb_array_elements( 6.1731 - $1 OPERATOR(pg_catalog.->) 'coordinates' 6.1732 - ) AS "coord" 6.1733 - ); 6.1734 - END IF; 6.1735 - IF "tp" = 'MultiLineString' THEN RETURN 6.1736 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 6.1737 - ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg( 6.1738 - @extschema@.coords_to_epoint( 6.1739 - ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 6.1740 - ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 6.1741 - $2 6.1742 - ) 6.1743 - )) 6.1744 - FROM pg_catalog.jsonb_array_elements("coord_array") AS "coord" 6.1745 - ) 6.1746 - )) 6.1747 - FROM pg_catalog.jsonb_array_elements( 6.1748 - $1 OPERATOR(pg_catalog.->) 'coordinates' 6.1749 - ) AS "coord_array" 6.1750 - ); 6.1751 - END IF; 6.1752 - IF "tp" = 'Polygon' THEN RETURN 6.1753 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 6.1754 - ( SELECT @extschema@.ecluster_create_polygon(pg_catalog.array_agg( 6.1755 - @extschema@.coords_to_epoint( 6.1756 - ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 6.1757 - ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 6.1758 - $2 6.1759 - ) 6.1760 - )) 6.1761 - FROM @extschema@.GeoJSON_LinearRing_vertices("coord_array", $2) 6.1762 - AS "coord" 6.1763 - ) 6.1764 - )) 6.1765 - FROM pg_catalog.jsonb_array_elements( 6.1766 - $1 OPERATOR(pg_catalog.->) 'coordinates' 6.1767 - ) AS "coord_array" 6.1768 - ); 6.1769 - END IF; 6.1770 - IF "tp" = 'MultiPolygon' THEN RETURN 6.1771 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 6.1772 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 6.1773 - ( SELECT @extschema@.ecluster_create_polygon( 6.1774 - pg_catalog.array_agg( 6.1775 - @extschema@.coords_to_epoint( 6.1776 - ("coord" OPERATOR(pg_catalog.->>) 0) 6.1777 - ::pg_catalog.float8, 6.1778 - ("coord" OPERATOR(pg_catalog.->>) 1) 6.1779 - ::pg_catalog.float8, 6.1780 - $2 6.1781 - ) 6.1782 - ) 6.1783 - ) 6.1784 - FROM @extschema@.GeoJSON_LinearRing_vertices( 6.1785 - "coord_array", $2 6.1786 - ) AS "coord" 6.1787 - ) 6.1788 - )) 6.1789 - FROM pg_catalog.jsonb_array_elements("coord_array_array") 6.1790 - AS "coord_array" 6.1791 - ) 6.1792 - )) 6.1793 - FROM jsonb_array_elements( 6.1794 - $1 OPERATOR(pg_catalog.->) 'coordinates' 6.1795 - ) AS "coord_array_array" 6.1796 - ); 6.1797 - END IF; 6.1798 - IF "tp" = 'GeometryCollection' THEN RETURN 6.1799 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 6.1800 - @extschema@.GeoJSON_to_ecluster("geometry", $2) 6.1801 - )) 6.1802 - FROM pg_catalog.jsonb_array_elements( 6.1803 - $1 OPERATOR(pg_catalog.->) 'geometries' 6.1804 - ) AS "geometry" 6.1805 - ); 6.1806 - END IF; 6.1807 - IF "tp" = 'Feature' THEN RETURN 6.1808 - @extschema@.GeoJSON_to_ecluster( 6.1809 - $1 OPERATOR(pg_catalog.->) 'geometry', $2 6.1810 - ); 6.1811 - END IF; 6.1812 - IF "tp" = 'FeatureCollection' THEN RETURN 6.1813 - ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 6.1814 - @extschema@.GeoJSON_to_ecluster("feature", $2) 6.1815 - )) 6.1816 - FROM pg_catalog.jsonb_array_elements( 6.1817 - $1 OPERATOR(pg_catalog.->) 'features' 6.1818 - ) AS "feature" 6.1819 - ); 6.1820 - END IF; 6.1821 - RETURN NULL; 6.1822 - END; 6.1823 - $$; 6.1824 -
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 7.2 +++ b/latlon--0.16.sql Thu Oct 23 15:31:50 2025 +0200 7.3 @@ -0,0 +1,1821 @@ 7.4 +---------------------------------------- 7.5 +-- forward declarations (shell types) -- 7.6 +---------------------------------------- 7.7 + 7.8 +CREATE TYPE ekey_point; 7.9 +CREATE TYPE ekey_area; 7.10 +CREATE TYPE epoint; 7.11 +CREATE TYPE epoint_with_sample_count; 7.12 +CREATE TYPE ebox; 7.13 +CREATE TYPE ecircle; 7.14 +CREATE TYPE ecluster; 7.15 + 7.16 + 7.17 +------------------------------------------------------------ 7.18 +-- dummy input/output functions for dummy index key types -- 7.19 +------------------------------------------------------------ 7.20 + 7.21 +CREATE FUNCTION ekey_point_in_dummy(cstring) 7.22 + RETURNS ekey_point 7.23 + LANGUAGE C IMMUTABLE STRICT 7.24 + AS '$libdir/latlon-v0010', 'pgl_notimpl'; 7.25 + 7.26 +CREATE FUNCTION ekey_point_out_dummy(ekey_point) 7.27 + RETURNS cstring 7.28 + LANGUAGE C IMMUTABLE STRICT 7.29 + AS '$libdir/latlon-v0010', 'pgl_notimpl'; 7.30 + 7.31 +CREATE FUNCTION ekey_area_in_dummy(cstring) 7.32 + RETURNS ekey_area 7.33 + LANGUAGE C IMMUTABLE STRICT 7.34 + AS '$libdir/latlon-v0010', 'pgl_notimpl'; 7.35 + 7.36 +CREATE FUNCTION ekey_area_out_dummy(ekey_area) 7.37 + RETURNS cstring 7.38 + LANGUAGE C IMMUTABLE STRICT 7.39 + AS '$libdir/latlon-v0010', 'pgl_notimpl'; 7.40 + 7.41 + 7.42 +-------------------------- 7.43 +-- text input functions -- 7.44 +-------------------------- 7.45 + 7.46 +CREATE FUNCTION epoint_in(cstring) 7.47 + RETURNS epoint 7.48 + LANGUAGE C IMMUTABLE STRICT 7.49 + AS '$libdir/latlon-v0010', 'pgl_epoint_in'; 7.50 + 7.51 +CREATE FUNCTION epoint_with_sample_count_in(cstring) 7.52 + RETURNS epoint_with_sample_count 7.53 + LANGUAGE C IMMUTABLE STRICT 7.54 + AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_in'; 7.55 + 7.56 +CREATE FUNCTION ebox_in(cstring) 7.57 + RETURNS ebox 7.58 + LANGUAGE C IMMUTABLE STRICT 7.59 + AS '$libdir/latlon-v0010', 'pgl_ebox_in'; 7.60 + 7.61 +CREATE FUNCTION ecircle_in(cstring) 7.62 + RETURNS ecircle 7.63 + LANGUAGE C IMMUTABLE STRICT 7.64 + AS '$libdir/latlon-v0010', 'pgl_ecircle_in'; 7.65 + 7.66 +CREATE FUNCTION ecluster_in(cstring) 7.67 + RETURNS ecluster 7.68 + LANGUAGE C IMMUTABLE STRICT 7.69 + AS '$libdir/latlon-v0010', 'pgl_ecluster_in'; 7.70 + 7.71 + 7.72 +--------------------------- 7.73 +-- text output functions -- 7.74 +--------------------------- 7.75 + 7.76 +CREATE FUNCTION epoint_out(epoint) 7.77 + RETURNS cstring 7.78 + LANGUAGE C IMMUTABLE STRICT 7.79 + AS '$libdir/latlon-v0010', 'pgl_epoint_out'; 7.80 + 7.81 +CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) 7.82 + RETURNS cstring 7.83 + LANGUAGE C IMMUTABLE STRICT 7.84 + AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_out'; 7.85 + 7.86 +CREATE FUNCTION ebox_out(ebox) 7.87 + RETURNS cstring 7.88 + LANGUAGE C IMMUTABLE STRICT 7.89 + AS '$libdir/latlon-v0010', 'pgl_ebox_out'; 7.90 + 7.91 +CREATE FUNCTION ecircle_out(ecircle) 7.92 + RETURNS cstring 7.93 + LANGUAGE C IMMUTABLE STRICT 7.94 + AS '$libdir/latlon-v0010', 'pgl_ecircle_out'; 7.95 + 7.96 +CREATE FUNCTION ecluster_out(ecluster) 7.97 + RETURNS cstring 7.98 + LANGUAGE C IMMUTABLE STRICT 7.99 + AS '$libdir/latlon-v0010', 'pgl_ecluster_out'; 7.100 + 7.101 + 7.102 +-------------------------- 7.103 +-- binary I/O functions -- 7.104 +-------------------------- 7.105 + 7.106 +CREATE FUNCTION epoint_recv(internal) 7.107 + RETURNS epoint 7.108 + LANGUAGE C IMMUTABLE STRICT 7.109 + AS '$libdir/latlon-v0010', 'pgl_epoint_recv'; 7.110 + 7.111 +CREATE FUNCTION ebox_recv(internal) 7.112 + RETURNS ebox 7.113 + LANGUAGE C IMMUTABLE STRICT 7.114 + AS '$libdir/latlon-v0010', 'pgl_ebox_recv'; 7.115 + 7.116 +CREATE FUNCTION ecircle_recv(internal) 7.117 + RETURNS ecircle 7.118 + LANGUAGE C IMMUTABLE STRICT 7.119 + AS '$libdir/latlon-v0010', 'pgl_ecircle_recv'; 7.120 + 7.121 +CREATE FUNCTION epoint_send(epoint) 7.122 + RETURNS bytea 7.123 + LANGUAGE C IMMUTABLE STRICT 7.124 + AS '$libdir/latlon-v0010', 'pgl_epoint_send'; 7.125 + 7.126 +CREATE FUNCTION ebox_send(ebox) 7.127 + RETURNS bytea 7.128 + LANGUAGE C IMMUTABLE STRICT 7.129 + AS '$libdir/latlon-v0010', 'pgl_ebox_send'; 7.130 + 7.131 +CREATE FUNCTION ecircle_send(ecircle) 7.132 + RETURNS bytea 7.133 + LANGUAGE C IMMUTABLE STRICT 7.134 + AS '$libdir/latlon-v0010', 'pgl_ecircle_send'; 7.135 + 7.136 + 7.137 +----------------------------------------------- 7.138 +-- type definitions of dummy index key types -- 7.139 +----------------------------------------------- 7.140 + 7.141 +CREATE TYPE ekey_point ( 7.142 + internallength = 8, 7.143 + input = ekey_point_in_dummy, 7.144 + output = ekey_point_out_dummy, 7.145 + alignment = char ); 7.146 + 7.147 +CREATE TYPE ekey_area ( 7.148 + internallength = 9, 7.149 + input = ekey_area_in_dummy, 7.150 + output = ekey_area_out_dummy, 7.151 + alignment = char ); 7.152 + 7.153 + 7.154 +------------------------------------------ 7.155 +-- definitions of geographic data types -- 7.156 +------------------------------------------ 7.157 + 7.158 +CREATE TYPE epoint ( 7.159 + internallength = 16, 7.160 + input = epoint_in, 7.161 + output = epoint_out, 7.162 + receive = epoint_recv, 7.163 + send = epoint_send, 7.164 + alignment = double ); 7.165 + 7.166 +CREATE TYPE epoint_with_sample_count ( 7.167 + internallength = 20, 7.168 + input = epoint_with_sample_count_in, 7.169 + output = epoint_with_sample_count_out, 7.170 + alignment = double ); 7.171 + 7.172 +CREATE TYPE ebox ( 7.173 + internallength = 32, 7.174 + input = ebox_in, 7.175 + output = ebox_out, 7.176 + receive = ebox_recv, 7.177 + send = ebox_send, 7.178 + alignment = double ); 7.179 + 7.180 +CREATE TYPE ecircle ( 7.181 + internallength = 24, 7.182 + input = ecircle_in, 7.183 + output = ecircle_out, 7.184 + receive = ecircle_recv, 7.185 + send = ecircle_send, 7.186 + alignment = double ); 7.187 + 7.188 +CREATE TYPE ecluster ( 7.189 + internallength = VARIABLE, 7.190 + input = ecluster_in, 7.191 + output = ecluster_out, 7.192 + alignment = double, 7.193 + storage = external ); 7.194 + 7.195 + 7.196 +-------------------- 7.197 +-- B-tree support -- 7.198 +-------------------- 7.199 + 7.200 +-- begin of B-tree support for epoint 7.201 + 7.202 +CREATE FUNCTION epoint_btree_lt(epoint, epoint) 7.203 + RETURNS boolean 7.204 + LANGUAGE C IMMUTABLE STRICT 7.205 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_lt'; 7.206 + 7.207 +CREATE FUNCTION epoint_btree_le(epoint, epoint) 7.208 + RETURNS boolean 7.209 + LANGUAGE C IMMUTABLE STRICT 7.210 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_le'; 7.211 + 7.212 +CREATE FUNCTION epoint_btree_eq(epoint, epoint) 7.213 + RETURNS boolean 7.214 + LANGUAGE C IMMUTABLE STRICT 7.215 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_eq'; 7.216 + 7.217 +CREATE FUNCTION epoint_btree_ne(epoint, epoint) 7.218 + RETURNS boolean 7.219 + LANGUAGE C IMMUTABLE STRICT 7.220 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ne'; 7.221 + 7.222 +CREATE FUNCTION epoint_btree_ge(epoint, epoint) 7.223 + RETURNS boolean 7.224 + LANGUAGE C IMMUTABLE STRICT 7.225 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ge'; 7.226 + 7.227 +CREATE FUNCTION epoint_btree_gt(epoint, epoint) 7.228 + RETURNS boolean 7.229 + LANGUAGE C IMMUTABLE STRICT 7.230 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_gt'; 7.231 + 7.232 +CREATE OPERATOR <<< ( 7.233 + leftarg = epoint, 7.234 + rightarg = epoint, 7.235 + procedure = epoint_btree_lt, 7.236 + commutator = >>>, 7.237 + negator = >>>=, 7.238 + restrict = scalarltsel, 7.239 + join = scalarltjoinsel 7.240 +); 7.241 + 7.242 +CREATE OPERATOR <<<= ( 7.243 + leftarg = epoint, 7.244 + rightarg = epoint, 7.245 + procedure = epoint_btree_le, 7.246 + commutator = >>>=, 7.247 + negator = >>>, 7.248 + restrict = scalarltsel, 7.249 + join = scalarltjoinsel 7.250 +); 7.251 + 7.252 +CREATE OPERATOR = ( 7.253 + leftarg = epoint, 7.254 + rightarg = epoint, 7.255 + procedure = epoint_btree_eq, 7.256 + commutator = =, 7.257 + negator = <>, 7.258 + restrict = eqsel, 7.259 + join = eqjoinsel, 7.260 + merges 7.261 +); 7.262 + 7.263 +CREATE OPERATOR <> ( 7.264 + leftarg = epoint, 7.265 + rightarg = epoint, 7.266 + procedure = epoint_btree_ne, 7.267 + commutator = <>, 7.268 + negator = =, 7.269 + restrict = neqsel, 7.270 + join = neqjoinsel 7.271 +); 7.272 + 7.273 +CREATE OPERATOR >>>= ( 7.274 + leftarg = epoint, 7.275 + rightarg = epoint, 7.276 + procedure = epoint_btree_ge, 7.277 + commutator = <<<=, 7.278 + negator = <<<, 7.279 + restrict = scalargtsel, 7.280 + join = scalargtjoinsel 7.281 +); 7.282 + 7.283 +CREATE OPERATOR >>> ( 7.284 + leftarg = epoint, 7.285 + rightarg = epoint, 7.286 + procedure = epoint_btree_gt, 7.287 + commutator = <<<, 7.288 + negator = <<<=, 7.289 + restrict = scalargtsel, 7.290 + join = scalargtjoinsel 7.291 +); 7.292 + 7.293 +CREATE FUNCTION epoint_btree_cmp(epoint, epoint) 7.294 + RETURNS int4 7.295 + LANGUAGE C IMMUTABLE STRICT 7.296 + AS '$libdir/latlon-v0010', 'pgl_btree_epoint_cmp'; 7.297 + 7.298 +CREATE OPERATOR CLASS epoint_btree_ops 7.299 + DEFAULT FOR TYPE epoint USING btree AS 7.300 + OPERATOR 1 <<< , 7.301 + OPERATOR 2 <<<= , 7.302 + OPERATOR 3 = , 7.303 + OPERATOR 4 >>>= , 7.304 + OPERATOR 5 >>> , 7.305 + FUNCTION 1 epoint_btree_cmp(epoint, epoint); 7.306 + 7.307 +-- end of B-tree support for epoint 7.308 + 7.309 +-- begin of B-tree support for ebox 7.310 + 7.311 +CREATE FUNCTION ebox_btree_lt(ebox, ebox) 7.312 + RETURNS boolean 7.313 + LANGUAGE C IMMUTABLE STRICT 7.314 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_lt'; 7.315 + 7.316 +CREATE FUNCTION ebox_btree_le(ebox, ebox) 7.317 + RETURNS boolean 7.318 + LANGUAGE C IMMUTABLE STRICT 7.319 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_le'; 7.320 + 7.321 +CREATE FUNCTION ebox_btree_eq(ebox, ebox) 7.322 + RETURNS boolean 7.323 + LANGUAGE C IMMUTABLE STRICT 7.324 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_eq'; 7.325 + 7.326 +CREATE FUNCTION ebox_btree_ne(ebox, ebox) 7.327 + RETURNS boolean 7.328 + LANGUAGE C IMMUTABLE STRICT 7.329 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ne'; 7.330 + 7.331 +CREATE FUNCTION ebox_btree_ge(ebox, ebox) 7.332 + RETURNS boolean 7.333 + LANGUAGE C IMMUTABLE STRICT 7.334 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ge'; 7.335 + 7.336 +CREATE FUNCTION ebox_btree_gt(ebox, ebox) 7.337 + RETURNS boolean 7.338 + LANGUAGE C IMMUTABLE STRICT 7.339 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_gt'; 7.340 + 7.341 +CREATE OPERATOR <<< ( 7.342 + leftarg = ebox, 7.343 + rightarg = ebox, 7.344 + procedure = ebox_btree_lt, 7.345 + commutator = >>>, 7.346 + negator = >>>=, 7.347 + restrict = scalarltsel, 7.348 + join = scalarltjoinsel 7.349 +); 7.350 + 7.351 +CREATE OPERATOR <<<= ( 7.352 + leftarg = ebox, 7.353 + rightarg = ebox, 7.354 + procedure = ebox_btree_le, 7.355 + commutator = >>>=, 7.356 + negator = >>>, 7.357 + restrict = scalarltsel, 7.358 + join = scalarltjoinsel 7.359 +); 7.360 + 7.361 +CREATE OPERATOR = ( 7.362 + leftarg = ebox, 7.363 + rightarg = ebox, 7.364 + procedure = ebox_btree_eq, 7.365 + commutator = =, 7.366 + negator = <>, 7.367 + restrict = eqsel, 7.368 + join = eqjoinsel, 7.369 + merges 7.370 +); 7.371 + 7.372 +CREATE OPERATOR <> ( 7.373 + leftarg = ebox, 7.374 + rightarg = ebox, 7.375 + procedure = ebox_btree_ne, 7.376 + commutator = <>, 7.377 + negator = =, 7.378 + restrict = neqsel, 7.379 + join = neqjoinsel 7.380 +); 7.381 + 7.382 +CREATE OPERATOR >>>= ( 7.383 + leftarg = ebox, 7.384 + rightarg = ebox, 7.385 + procedure = ebox_btree_ge, 7.386 + commutator = <<<=, 7.387 + negator = <<<, 7.388 + restrict = scalargtsel, 7.389 + join = scalargtjoinsel 7.390 +); 7.391 + 7.392 +CREATE OPERATOR >>> ( 7.393 + leftarg = ebox, 7.394 + rightarg = ebox, 7.395 + procedure = ebox_btree_gt, 7.396 + commutator = <<<, 7.397 + negator = <<<=, 7.398 + restrict = scalargtsel, 7.399 + join = scalargtjoinsel 7.400 +); 7.401 + 7.402 +CREATE FUNCTION ebox_btree_cmp(ebox, ebox) 7.403 + RETURNS int4 7.404 + LANGUAGE C IMMUTABLE STRICT 7.405 + AS '$libdir/latlon-v0010', 'pgl_btree_ebox_cmp'; 7.406 + 7.407 +CREATE OPERATOR CLASS ebox_btree_ops 7.408 + DEFAULT FOR TYPE ebox USING btree AS 7.409 + OPERATOR 1 <<< , 7.410 + OPERATOR 2 <<<= , 7.411 + OPERATOR 3 = , 7.412 + OPERATOR 4 >>>= , 7.413 + OPERATOR 5 >>> , 7.414 + FUNCTION 1 ebox_btree_cmp(ebox, ebox); 7.415 + 7.416 +-- end of B-tree support for ebox 7.417 + 7.418 +-- begin of B-tree support for ecircle 7.419 + 7.420 +CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle) 7.421 + RETURNS boolean 7.422 + LANGUAGE C IMMUTABLE STRICT 7.423 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_lt'; 7.424 + 7.425 +CREATE FUNCTION ecircle_btree_le(ecircle, ecircle) 7.426 + RETURNS boolean 7.427 + LANGUAGE C IMMUTABLE STRICT 7.428 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_le'; 7.429 + 7.430 +CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle) 7.431 + RETURNS boolean 7.432 + LANGUAGE C IMMUTABLE STRICT 7.433 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_eq'; 7.434 + 7.435 +CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle) 7.436 + RETURNS boolean 7.437 + LANGUAGE C IMMUTABLE STRICT 7.438 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ne'; 7.439 + 7.440 +CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle) 7.441 + RETURNS boolean 7.442 + LANGUAGE C IMMUTABLE STRICT 7.443 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ge'; 7.444 + 7.445 +CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle) 7.446 + RETURNS boolean 7.447 + LANGUAGE C IMMUTABLE STRICT 7.448 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_gt'; 7.449 + 7.450 +CREATE OPERATOR <<< ( 7.451 + leftarg = ecircle, 7.452 + rightarg = ecircle, 7.453 + procedure = ecircle_btree_lt, 7.454 + commutator = >>>, 7.455 + negator = >>>=, 7.456 + restrict = scalarltsel, 7.457 + join = scalarltjoinsel 7.458 +); 7.459 + 7.460 +CREATE OPERATOR <<<= ( 7.461 + leftarg = ecircle, 7.462 + rightarg = ecircle, 7.463 + procedure = ecircle_btree_le, 7.464 + commutator = >>>=, 7.465 + negator = >>>, 7.466 + restrict = scalarltsel, 7.467 + join = scalarltjoinsel 7.468 +); 7.469 + 7.470 +CREATE OPERATOR = ( 7.471 + leftarg = ecircle, 7.472 + rightarg = ecircle, 7.473 + procedure = ecircle_btree_eq, 7.474 + commutator = =, 7.475 + negator = <>, 7.476 + restrict = eqsel, 7.477 + join = eqjoinsel, 7.478 + merges 7.479 +); 7.480 + 7.481 +CREATE OPERATOR <> ( 7.482 + leftarg = ecircle, 7.483 + rightarg = ecircle, 7.484 + procedure = ecircle_btree_ne, 7.485 + commutator = <>, 7.486 + negator = =, 7.487 + restrict = neqsel, 7.488 + join = neqjoinsel 7.489 +); 7.490 + 7.491 +CREATE OPERATOR >>>= ( 7.492 + leftarg = ecircle, 7.493 + rightarg = ecircle, 7.494 + procedure = ecircle_btree_ge, 7.495 + commutator = <<<=, 7.496 + negator = <<<, 7.497 + restrict = scalargtsel, 7.498 + join = scalargtjoinsel 7.499 +); 7.500 + 7.501 +CREATE OPERATOR >>> ( 7.502 + leftarg = ecircle, 7.503 + rightarg = ecircle, 7.504 + procedure = ecircle_btree_gt, 7.505 + commutator = <<<, 7.506 + negator = <<<=, 7.507 + restrict = scalargtsel, 7.508 + join = scalargtjoinsel 7.509 +); 7.510 + 7.511 +CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 7.512 + RETURNS int4 7.513 + LANGUAGE C IMMUTABLE STRICT 7.514 + AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_cmp'; 7.515 + 7.516 +CREATE OPERATOR CLASS ecircle_btree_ops 7.517 + DEFAULT FOR TYPE ecircle USING btree AS 7.518 + OPERATOR 1 <<< , 7.519 + OPERATOR 2 <<<= , 7.520 + OPERATOR 3 = , 7.521 + OPERATOR 4 >>>= , 7.522 + OPERATOR 5 >>> , 7.523 + FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle); 7.524 + 7.525 +-- end of B-tree support for ecircle 7.526 + 7.527 + 7.528 +---------------- 7.529 +-- type casts -- 7.530 +---------------- 7.531 + 7.532 +CREATE FUNCTION cast_epoint_to_ebox(epoint) 7.533 + RETURNS ebox 7.534 + LANGUAGE C IMMUTABLE STRICT 7.535 + AS '$libdir/latlon-v0010', 'pgl_epoint_to_ebox'; 7.536 + 7.537 +CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint); 7.538 + 7.539 +CREATE FUNCTION cast_epoint_to_ecircle(epoint) 7.540 + RETURNS ecircle 7.541 + LANGUAGE C IMMUTABLE STRICT 7.542 + AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecircle'; 7.543 + 7.544 +CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint); 7.545 + 7.546 +CREATE FUNCTION cast_epoint_to_ecluster(epoint) 7.547 + RETURNS ecluster 7.548 + LANGUAGE C IMMUTABLE STRICT 7.549 + AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecluster'; 7.550 + 7.551 +CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint); 7.552 + 7.553 +CREATE FUNCTION cast_ebox_to_ecluster(ebox) 7.554 + RETURNS ecluster 7.555 + LANGUAGE C IMMUTABLE STRICT 7.556 + AS '$libdir/latlon-v0010', 'pgl_ebox_to_ecluster'; 7.557 + 7.558 +CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox); 7.559 + 7.560 + 7.561 +--------------------------- 7.562 +-- constructor functions -- 7.563 +--------------------------- 7.564 + 7.565 +CREATE FUNCTION epoint(float8, float8) 7.566 + RETURNS epoint 7.567 + LANGUAGE C IMMUTABLE STRICT 7.568 + AS '$libdir/latlon-v0010', 'pgl_create_epoint'; 7.569 + 7.570 +CREATE FUNCTION epoint_latlon(float8, float8) 7.571 + RETURNS epoint 7.572 + LANGUAGE SQL IMMUTABLE STRICT AS $$ 7.573 + SELECT @extschema@.epoint($1, $2) 7.574 + $$; 7.575 + 7.576 +CREATE FUNCTION epoint_lonlat(float8, float8) 7.577 + RETURNS epoint 7.578 + LANGUAGE SQL IMMUTABLE STRICT AS $$ 7.579 + SELECT @extschema@.epoint($2, $1) 7.580 + $$; 7.581 + 7.582 +CREATE FUNCTION epoint_with_sample_count(epoint, int4) 7.583 + RETURNS epoint_with_sample_count 7.584 + LANGUAGE C IMMUTABLE STRICT 7.585 + AS '$libdir/latlon-v0010', 'pgl_create_epoint_with_sample_count'; 7.586 + 7.587 +CREATE FUNCTION empty_ebox() 7.588 + RETURNS ebox 7.589 + LANGUAGE C IMMUTABLE STRICT 7.590 + AS '$libdir/latlon-v0010', 'pgl_create_empty_ebox'; 7.591 + 7.592 +CREATE FUNCTION ebox(float8, float8, float8, float8) 7.593 + RETURNS ebox 7.594 + LANGUAGE C IMMUTABLE STRICT 7.595 + AS '$libdir/latlon-v0010', 'pgl_create_ebox'; 7.596 + 7.597 +CREATE FUNCTION ebox(epoint, epoint) 7.598 + RETURNS ebox 7.599 + LANGUAGE C IMMUTABLE STRICT 7.600 + AS '$libdir/latlon-v0010', 'pgl_create_ebox_from_epoints'; 7.601 + 7.602 +CREATE FUNCTION ecircle(float8, float8, float8) 7.603 + RETURNS ecircle 7.604 + LANGUAGE C IMMUTABLE STRICT 7.605 + AS '$libdir/latlon-v0010', 'pgl_create_ecircle'; 7.606 + 7.607 +CREATE FUNCTION ecircle(epoint, float8) 7.608 + RETURNS ecircle 7.609 + LANGUAGE C IMMUTABLE STRICT 7.610 + AS '$libdir/latlon-v0010', 'pgl_create_ecircle_from_epoint'; 7.611 + 7.612 +CREATE FUNCTION ecluster_concat(ecluster[]) 7.613 + RETURNS ecluster 7.614 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.615 + SELECT pg_catalog.array_to_string($1, ' ')::@extschema@.ecluster 7.616 + $$; 7.617 + 7.618 +CREATE FUNCTION ecluster_concat(ecluster, ecluster) 7.619 + RETURNS ecluster 7.620 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.621 + SELECT ( 7.622 + $1::pg_catalog.text OPERATOR(pg_catalog.||) ' ' OPERATOR(pg_catalog.||) 7.623 + $2::pg_catalog.text 7.624 + )::@extschema@.ecluster 7.625 + $$; 7.626 + 7.627 +CREATE FUNCTION ecluster_create_multipoint(epoint[]) 7.628 + RETURNS ecluster 7.629 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.630 + SELECT 7.631 + pg_catalog.array_to_string( 7.632 + pg_catalog.array_agg( 7.633 + 'point (' OPERATOR(pg_catalog.||) unnest OPERATOR(pg_catalog.||) ')' 7.634 + ), 7.635 + ' ' 7.636 + )::@extschema@.ecluster 7.637 + FROM pg_catalog.unnest($1) 7.638 + $$; 7.639 + 7.640 +CREATE FUNCTION ecluster_create_path(epoint[]) 7.641 + RETURNS ecluster 7.642 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.643 + SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 7.644 + 'empty'::@extschema@.ecluster 7.645 + ELSE 7.646 + ( 7.647 + 'path (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')' 7.648 + )::@extschema@.ecluster 7.649 + END 7.650 + FROM pg_catalog.array_to_string($1, ' ') AS "str" 7.651 + $$; 7.652 + 7.653 +CREATE FUNCTION ecluster_create_outline(epoint[]) 7.654 + RETURNS ecluster 7.655 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.656 + SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 7.657 + 'empty'::@extschema@.ecluster 7.658 + ELSE 7.659 + ( 7.660 + 'outline (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')' 7.661 + )::@extschema@.ecluster 7.662 + END 7.663 + FROM pg_catalog.array_to_string($1, ' ') AS "str" 7.664 + $$; 7.665 + 7.666 +CREATE FUNCTION ecluster_create_polygon(epoint[]) 7.667 + RETURNS ecluster 7.668 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.669 + SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN 7.670 + 'empty'::@extschema@.ecluster 7.671 + ELSE 7.672 + ( 7.673 + 'polygon (' OPERATOR(pg_catalog.||) pg_catalog.array_to_string($1, ' ') 7.674 + OPERATOR(pg_catalog.||) ')' 7.675 + )::@extschema@.ecluster 7.676 + END 7.677 + FROM pg_catalog.array_to_string($1, ' ') AS "str" 7.678 + $$; 7.679 + 7.680 + 7.681 +---------------------- 7.682 +-- getter functions -- 7.683 +---------------------- 7.684 + 7.685 +CREATE FUNCTION latitude(epoint) 7.686 + RETURNS float8 7.687 + LANGUAGE C IMMUTABLE STRICT 7.688 + AS '$libdir/latlon-v0010', 'pgl_epoint_lat'; 7.689 + 7.690 +CREATE FUNCTION longitude(epoint) 7.691 + RETURNS float8 7.692 + LANGUAGE C IMMUTABLE STRICT 7.693 + AS '$libdir/latlon-v0010', 'pgl_epoint_lon'; 7.694 + 7.695 +CREATE FUNCTION min_latitude(ebox) 7.696 + RETURNS float8 7.697 + LANGUAGE C IMMUTABLE STRICT 7.698 + AS '$libdir/latlon-v0010', 'pgl_ebox_lat_min'; 7.699 + 7.700 +CREATE FUNCTION max_latitude(ebox) 7.701 + RETURNS float8 7.702 + LANGUAGE C IMMUTABLE STRICT 7.703 + AS '$libdir/latlon-v0010', 'pgl_ebox_lat_max'; 7.704 + 7.705 +CREATE FUNCTION min_longitude(ebox) 7.706 + RETURNS float8 7.707 + LANGUAGE C IMMUTABLE STRICT 7.708 + AS '$libdir/latlon-v0010', 'pgl_ebox_lon_min'; 7.709 + 7.710 +CREATE FUNCTION max_longitude(ebox) 7.711 + RETURNS float8 7.712 + LANGUAGE C IMMUTABLE STRICT 7.713 + AS '$libdir/latlon-v0010', 'pgl_ebox_lon_max'; 7.714 + 7.715 +CREATE FUNCTION center(ecircle) 7.716 + RETURNS epoint 7.717 + LANGUAGE C IMMUTABLE STRICT 7.718 + AS '$libdir/latlon-v0010', 'pgl_ecircle_center'; 7.719 + 7.720 +CREATE FUNCTION radius(ecircle) 7.721 + RETURNS float8 7.722 + LANGUAGE C IMMUTABLE STRICT 7.723 + AS '$libdir/latlon-v0010', 'pgl_ecircle_radius'; 7.724 + 7.725 +CREATE FUNCTION ecluster_extract_points(ecluster) 7.726 + RETURNS SETOF epoint 7.727 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.728 + SELECT "match"[2]::@extschema@.epoint 7.729 + FROM pg_catalog.regexp_matches( 7.730 + $1::pg_catalog.text, e'(^| )point \\(([^)]+)\\)', 'g' 7.731 + ) AS "match" 7.732 + $$; 7.733 + 7.734 +CREATE FUNCTION ecluster_extract_paths(ecluster) 7.735 + RETURNS SETOF epoint[] 7.736 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.737 + SELECT ( 7.738 + SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 7.739 + FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 7.740 + ) 7.741 + FROM pg_catalog.regexp_matches( 7.742 + $1::pg_catalog.text, e'(^| )path \\(([^)]+)\\)', 'g' 7.743 + ) AS "m1" 7.744 + $$; 7.745 + 7.746 +CREATE FUNCTION ecluster_extract_outlines(ecluster) 7.747 + RETURNS SETOF epoint[] 7.748 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.749 + SELECT ( 7.750 + SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 7.751 + FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 7.752 + ) 7.753 + FROM pg_catalog.regexp_matches( 7.754 + $1::pg_catalog.text, e'(^| )outline \\(([^)]+)\\)', 'g' 7.755 + ) AS "m1" 7.756 + $$; 7.757 + 7.758 +CREATE FUNCTION ecluster_extract_polygons(ecluster) 7.759 + RETURNS SETOF epoint[] 7.760 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.761 + SELECT ( 7.762 + SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) 7.763 + FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 7.764 + ) 7.765 + FROM pg_catalog.regexp_matches( 7.766 + $1::pg_catalog.text, e'(^| )polygon \\(([^)]+)\\)', 'g' 7.767 + ) AS "m1" 7.768 + $$; 7.769 + 7.770 + 7.771 +--------------- 7.772 +-- operators -- 7.773 +--------------- 7.774 + 7.775 +CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 7.776 + RETURNS boolean 7.777 + LANGUAGE C IMMUTABLE STRICT 7.778 + AS '$libdir/latlon-v0010', 'pgl_epoint_ebox_overlap'; 7.779 + 7.780 +CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 7.781 + RETURNS boolean 7.782 + LANGUAGE C IMMUTABLE STRICT 7.783 + AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_overlap'; 7.784 + 7.785 +CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 7.786 + RETURNS boolean 7.787 + LANGUAGE C IMMUTABLE STRICT 7.788 + AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_overlap'; 7.789 + 7.790 +CREATE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 7.791 + RETURNS boolean 7.792 + LANGUAGE C IMMUTABLE STRICT 7.793 + AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_may_overlap'; 7.794 + 7.795 +CREATE FUNCTION ebox_overlap_proc(ebox, ebox) 7.796 + RETURNS boolean 7.797 + LANGUAGE C IMMUTABLE STRICT 7.798 + AS '$libdir/latlon-v0010', 'pgl_ebox_overlap'; 7.799 + 7.800 +CREATE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 7.801 + RETURNS boolean 7.802 + LANGUAGE C IMMUTABLE STRICT 7.803 + AS '$libdir/latlon-v0010', 'pgl_ebox_ecircle_may_overlap'; 7.804 + 7.805 +CREATE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 7.806 + RETURNS boolean 7.807 + LANGUAGE C IMMUTABLE STRICT 7.808 + AS '$libdir/latlon-v0010', 'pgl_ebox_ecluster_may_overlap'; 7.809 + 7.810 +CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 7.811 + RETURNS boolean 7.812 + LANGUAGE C IMMUTABLE STRICT 7.813 + AS '$libdir/latlon-v0010', 'pgl_ecircle_overlap'; 7.814 + 7.815 +CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 7.816 + RETURNS boolean 7.817 + LANGUAGE C IMMUTABLE STRICT 7.818 + AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_overlap'; 7.819 + 7.820 +CREATE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 7.821 + RETURNS boolean 7.822 + LANGUAGE C IMMUTABLE STRICT 7.823 + AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_may_overlap'; 7.824 + 7.825 +CREATE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 7.826 + RETURNS boolean 7.827 + LANGUAGE C IMMUTABLE STRICT 7.828 + AS '$libdir/latlon-v0010', 'pgl_ecluster_overlap'; 7.829 + 7.830 +CREATE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 7.831 + RETURNS boolean 7.832 + LANGUAGE C IMMUTABLE STRICT 7.833 + AS '$libdir/latlon-v0010', 'pgl_ecluster_may_overlap'; 7.834 + 7.835 +CREATE FUNCTION ecluster_contains_proc(ecluster, ecluster) 7.836 + RETURNS boolean 7.837 + LANGUAGE C IMMUTABLE STRICT 7.838 + AS '$libdir/latlon-v0010', 'pgl_ecluster_contains'; 7.839 + 7.840 +CREATE FUNCTION epoint_distance_proc(epoint, epoint) 7.841 + RETURNS float8 7.842 + LANGUAGE C IMMUTABLE STRICT 7.843 + AS '$libdir/latlon-v0010', 'pgl_epoint_distance'; 7.844 + 7.845 +CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 7.846 + RETURNS float8 7.847 + LANGUAGE C IMMUTABLE STRICT 7.848 + AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_distance'; 7.849 + 7.850 +CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 7.851 + RETURNS float8 7.852 + LANGUAGE C IMMUTABLE STRICT 7.853 + AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_distance'; 7.854 + 7.855 +CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle) 7.856 + RETURNS float8 7.857 + LANGUAGE C IMMUTABLE STRICT 7.858 + AS '$libdir/latlon-v0010', 'pgl_ecircle_distance'; 7.859 + 7.860 +CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 7.861 + RETURNS float8 7.862 + LANGUAGE C IMMUTABLE STRICT 7.863 + AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_distance'; 7.864 + 7.865 +CREATE FUNCTION ecluster_distance_proc(ecluster, ecluster) 7.866 + RETURNS float8 7.867 + LANGUAGE C IMMUTABLE STRICT 7.868 + AS '$libdir/latlon-v0010', 'pgl_ecluster_distance'; 7.869 + 7.870 +CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) 7.871 + RETURNS float8 7.872 + LANGUAGE C IMMUTABLE STRICT 7.873 + AS '$libdir/latlon-v0010', 'pgl_ecluster_epoint_sc_fair_distance'; 7.874 + 7.875 +CREATE OPERATOR && ( 7.876 + leftarg = epoint, 7.877 + rightarg = ebox, 7.878 + procedure = epoint_ebox_overlap_proc, 7.879 + commutator = &&, 7.880 + restrict = areasel, 7.881 + join = areajoinsel 7.882 +); 7.883 + 7.884 +CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint) 7.885 + RETURNS boolean 7.886 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 7.887 + 7.888 +CREATE OPERATOR && ( 7.889 + leftarg = ebox, 7.890 + rightarg = epoint, 7.891 + procedure = epoint_ebox_overlap_commutator, 7.892 + commutator = &&, 7.893 + restrict = areasel, 7.894 + join = areajoinsel 7.895 +); 7.896 + 7.897 +CREATE OPERATOR && ( 7.898 + leftarg = epoint, 7.899 + rightarg = ecircle, 7.900 + procedure = epoint_ecircle_overlap_proc, 7.901 + commutator = &&, 7.902 + restrict = areasel, 7.903 + join = areajoinsel 7.904 +); 7.905 + 7.906 +CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint) 7.907 + RETURNS boolean 7.908 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 7.909 + 7.910 +CREATE OPERATOR && ( 7.911 + leftarg = ecircle, 7.912 + rightarg = epoint, 7.913 + procedure = epoint_ecircle_overlap_commutator, 7.914 + commutator = &&, 7.915 + restrict = areasel, 7.916 + join = areajoinsel 7.917 +); 7.918 + 7.919 +CREATE OPERATOR && ( 7.920 + leftarg = epoint, 7.921 + rightarg = ecluster, 7.922 + procedure = epoint_ecluster_overlap_proc, 7.923 + commutator = &&, 7.924 + restrict = areasel, 7.925 + join = areajoinsel 7.926 +); 7.927 + 7.928 +CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint) 7.929 + RETURNS boolean 7.930 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 7.931 + 7.932 +CREATE OPERATOR && ( 7.933 + leftarg = ecluster, 7.934 + rightarg = epoint, 7.935 + procedure = epoint_ecluster_overlap_commutator, 7.936 + commutator = &&, 7.937 + restrict = areasel, 7.938 + join = areajoinsel 7.939 +); 7.940 + 7.941 +CREATE OPERATOR && ( 7.942 + leftarg = ebox, 7.943 + rightarg = ebox, 7.944 + procedure = ebox_overlap_proc, 7.945 + commutator = &&, 7.946 + restrict = areasel, 7.947 + join = areajoinsel 7.948 +); 7.949 + 7.950 +CREATE OPERATOR && ( 7.951 + leftarg = ecircle, 7.952 + rightarg = ecircle, 7.953 + procedure = ecircle_overlap_proc, 7.954 + commutator = &&, 7.955 + restrict = areasel, 7.956 + join = areajoinsel 7.957 +); 7.958 + 7.959 +CREATE OPERATOR && ( 7.960 + leftarg = ecircle, 7.961 + rightarg = ecluster, 7.962 + procedure = ecircle_ecluster_overlap_proc, 7.963 + commutator = &&, 7.964 + restrict = areasel, 7.965 + join = areajoinsel 7.966 +); 7.967 + 7.968 +CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle) 7.969 + RETURNS boolean 7.970 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; 7.971 + 7.972 +CREATE OPERATOR && ( 7.973 + leftarg = ecluster, 7.974 + rightarg = ecircle, 7.975 + procedure = ecircle_ecluster_overlap_commutator, 7.976 + commutator = &&, 7.977 + restrict = areasel, 7.978 + join = areajoinsel 7.979 +); 7.980 + 7.981 +CREATE OPERATOR && ( 7.982 + leftarg = ecluster, 7.983 + rightarg = ecluster, 7.984 + procedure = ecluster_overlap_proc, 7.985 + commutator = &&, 7.986 + restrict = areasel, 7.987 + join = areajoinsel 7.988 +); 7.989 + 7.990 +CREATE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle) 7.991 + RETURNS boolean 7.992 + LANGUAGE sql IMMUTABLE 7.993 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2'; 7.994 + 7.995 +CREATE OPERATOR && ( 7.996 + leftarg = ebox, 7.997 + rightarg = ecircle, 7.998 + procedure = ebox_ecircle_overlap_castwrap, 7.999 + commutator = &&, 7.1000 + restrict = areasel, 7.1001 + join = areajoinsel 7.1002 +); 7.1003 + 7.1004 +CREATE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox) 7.1005 + RETURNS boolean 7.1006 + LANGUAGE sql IMMUTABLE 7.1007 + AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster'; 7.1008 + 7.1009 +CREATE OPERATOR && ( 7.1010 + leftarg = ecircle, 7.1011 + rightarg = ebox, 7.1012 + procedure = ebox_ecircle_overlap_castwrap, 7.1013 + commutator = &&, 7.1014 + restrict = areasel, 7.1015 + join = areajoinsel 7.1016 +); 7.1017 + 7.1018 +CREATE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster) 7.1019 + RETURNS boolean 7.1020 + LANGUAGE sql IMMUTABLE 7.1021 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2'; 7.1022 + 7.1023 +CREATE OPERATOR && ( 7.1024 + leftarg = ebox, 7.1025 + rightarg = ecluster, 7.1026 + procedure = ebox_ecluster_overlap_castwrap, 7.1027 + commutator = &&, 7.1028 + restrict = areasel, 7.1029 + join = areajoinsel 7.1030 +); 7.1031 + 7.1032 +CREATE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox) 7.1033 + RETURNS boolean 7.1034 + LANGUAGE sql IMMUTABLE 7.1035 + AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster'; 7.1036 + 7.1037 +CREATE OPERATOR && ( 7.1038 + leftarg = ecluster, 7.1039 + rightarg = ebox, 7.1040 + procedure = ebox_ecluster_overlap_castwrap, 7.1041 + commutator = &&, 7.1042 + restrict = areasel, 7.1043 + join = areajoinsel 7.1044 +); 7.1045 + 7.1046 +CREATE OPERATOR &&+ ( 7.1047 + leftarg = epoint, 7.1048 + rightarg = ecluster, 7.1049 + procedure = epoint_ecluster_may_overlap_proc, 7.1050 + commutator = &&+, 7.1051 + restrict = areasel, 7.1052 + join = areajoinsel 7.1053 +); 7.1054 + 7.1055 +CREATE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint) 7.1056 + RETURNS boolean 7.1057 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 7.1058 + 7.1059 +CREATE OPERATOR &&+ ( 7.1060 + leftarg = ecluster, 7.1061 + rightarg = epoint, 7.1062 + procedure = epoint_ecluster_may_overlap_commutator, 7.1063 + commutator = &&+, 7.1064 + restrict = areasel, 7.1065 + join = areajoinsel 7.1066 +); 7.1067 + 7.1068 +CREATE OPERATOR &&+ ( 7.1069 + leftarg = ebox, 7.1070 + rightarg = ecircle, 7.1071 + procedure = ebox_ecircle_may_overlap_proc, 7.1072 + commutator = &&+, 7.1073 + restrict = areasel, 7.1074 + join = areajoinsel 7.1075 +); 7.1076 + 7.1077 +CREATE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox) 7.1078 + RETURNS boolean 7.1079 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 7.1080 + 7.1081 +CREATE OPERATOR &&+ ( 7.1082 + leftarg = ecircle, 7.1083 + rightarg = ebox, 7.1084 + procedure = ebox_ecircle_may_overlap_commutator, 7.1085 + commutator = &&+, 7.1086 + restrict = areasel, 7.1087 + join = areajoinsel 7.1088 +); 7.1089 + 7.1090 +CREATE OPERATOR &&+ ( 7.1091 + leftarg = ebox, 7.1092 + rightarg = ecluster, 7.1093 + procedure = ebox_ecluster_may_overlap_proc, 7.1094 + commutator = &&+, 7.1095 + restrict = areasel, 7.1096 + join = areajoinsel 7.1097 +); 7.1098 + 7.1099 +CREATE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox) 7.1100 + RETURNS boolean 7.1101 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 7.1102 + 7.1103 +CREATE OPERATOR &&+ ( 7.1104 + leftarg = ecluster, 7.1105 + rightarg = ebox, 7.1106 + procedure = ebox_ecluster_may_overlap_commutator, 7.1107 + commutator = &&+, 7.1108 + restrict = areasel, 7.1109 + join = areajoinsel 7.1110 +); 7.1111 + 7.1112 +CREATE OPERATOR &&+ ( 7.1113 + leftarg = ecircle, 7.1114 + rightarg = ecluster, 7.1115 + procedure = ecircle_ecluster_may_overlap_proc, 7.1116 + commutator = &&+, 7.1117 + restrict = areasel, 7.1118 + join = areajoinsel 7.1119 +); 7.1120 + 7.1121 +CREATE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle) 7.1122 + RETURNS boolean 7.1123 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; 7.1124 + 7.1125 +CREATE OPERATOR &&+ ( 7.1126 + leftarg = ecluster, 7.1127 + rightarg = ecircle, 7.1128 + procedure = ecircle_ecluster_may_overlap_commutator, 7.1129 + commutator = &&+, 7.1130 + restrict = areasel, 7.1131 + join = areajoinsel 7.1132 +); 7.1133 + 7.1134 +CREATE OPERATOR &&+ ( 7.1135 + leftarg = ecluster, 7.1136 + rightarg = ecluster, 7.1137 + procedure = ecluster_may_overlap_proc, 7.1138 + commutator = &&+, 7.1139 + restrict = areasel, 7.1140 + join = areajoinsel 7.1141 +); 7.1142 + 7.1143 +CREATE OPERATOR @> ( 7.1144 + leftarg = ebox, 7.1145 + rightarg = epoint, 7.1146 + procedure = epoint_ebox_overlap_commutator, 7.1147 + commutator = <@, 7.1148 + restrict = areasel, 7.1149 + join = areajoinsel 7.1150 +); 7.1151 + 7.1152 +CREATE OPERATOR <@ ( 7.1153 + leftarg = epoint, 7.1154 + rightarg = ebox, 7.1155 + procedure = epoint_ebox_overlap_proc, 7.1156 + commutator = @>, 7.1157 + restrict = areasel, 7.1158 + join = areajoinsel 7.1159 +); 7.1160 + 7.1161 +CREATE OPERATOR @> ( 7.1162 + leftarg = ecluster, 7.1163 + rightarg = epoint, 7.1164 + procedure = epoint_ecluster_overlap_commutator, 7.1165 + commutator = <@, 7.1166 + restrict = areasel, 7.1167 + join = areajoinsel 7.1168 +); 7.1169 + 7.1170 +CREATE OPERATOR <@ ( 7.1171 + leftarg = epoint, 7.1172 + rightarg = ecluster, 7.1173 + procedure = epoint_ecluster_overlap_proc, 7.1174 + commutator = @>, 7.1175 + restrict = areasel, 7.1176 + join = areajoinsel 7.1177 +); 7.1178 + 7.1179 +CREATE OPERATOR @> ( 7.1180 + leftarg = ecluster, 7.1181 + rightarg = ecluster, 7.1182 + procedure = ecluster_contains_proc, 7.1183 + commutator = <@, 7.1184 + restrict = areasel, 7.1185 + join = areajoinsel 7.1186 +); 7.1187 + 7.1188 +CREATE FUNCTION ecluster_contains_commutator(ecluster, ecluster) 7.1189 + RETURNS boolean 7.1190 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.@>) $1'; 7.1191 + 7.1192 +CREATE OPERATOR <@ ( 7.1193 + leftarg = ecluster, 7.1194 + rightarg = ecluster, 7.1195 + procedure = ecluster_contains_commutator, 7.1196 + commutator = @>, 7.1197 + restrict = areasel, 7.1198 + join = areajoinsel 7.1199 +); 7.1200 + 7.1201 +CREATE FUNCTION ebox_contains_castwrap(ebox, ebox) 7.1202 + RETURNS boolean 7.1203 + LANGUAGE sql IMMUTABLE AS $$ 7.1204 + SELECT 7.1205 + $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2::@extschema@.ecluster 7.1206 + $$; 7.1207 + 7.1208 +CREATE OPERATOR @> ( 7.1209 + leftarg = ebox, 7.1210 + rightarg = ebox, 7.1211 + procedure = ebox_contains_castwrap, 7.1212 + commutator = <@, 7.1213 + restrict = areasel, 7.1214 + join = areajoinsel 7.1215 +); 7.1216 + 7.1217 +CREATE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox) 7.1218 + RETURNS boolean 7.1219 + LANGUAGE sql IMMUTABLE AS $$ 7.1220 + SELECT 7.1221 + $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1::@extschema@.ecluster 7.1222 + $$; 7.1223 + 7.1224 +CREATE OPERATOR <@ ( 7.1225 + leftarg = ebox, 7.1226 + rightarg = ebox, 7.1227 + procedure = ebox_contains_swapped_castwrap, 7.1228 + commutator = @>, 7.1229 + restrict = areasel, 7.1230 + join = areajoinsel 7.1231 +); 7.1232 + 7.1233 +CREATE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster) 7.1234 + RETURNS boolean 7.1235 + LANGUAGE sql IMMUTABLE 7.1236 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2'; 7.1237 + 7.1238 +CREATE OPERATOR @> ( 7.1239 + leftarg = ebox, 7.1240 + rightarg = ecluster, 7.1241 + procedure = ebox_ecluster_contains_castwrap, 7.1242 + commutator = <@, 7.1243 + restrict = areasel, 7.1244 + join = areajoinsel 7.1245 +); 7.1246 + 7.1247 +CREATE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox) 7.1248 + RETURNS boolean 7.1249 + LANGUAGE sql IMMUTABLE 7.1250 + AS 'SELECT $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1'; 7.1251 + 7.1252 +CREATE OPERATOR <@ ( 7.1253 + leftarg = ecluster, 7.1254 + rightarg = ebox, 7.1255 + procedure = ebox_ecluster_contains_castwrap, 7.1256 + commutator = @>, 7.1257 + restrict = areasel, 7.1258 + join = areajoinsel 7.1259 +); 7.1260 + 7.1261 +CREATE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox) 7.1262 + RETURNS boolean 7.1263 + LANGUAGE sql IMMUTABLE 7.1264 + AS 'SELECT $1 OPERATOR(@extschema@.@>) $2::@extschema@.ecluster'; 7.1265 + 7.1266 +CREATE OPERATOR @> ( 7.1267 + leftarg = ecluster, 7.1268 + rightarg = ebox, 7.1269 + procedure = ecluster_ebox_contains_castwrap, 7.1270 + commutator = <@, 7.1271 + restrict = areasel, 7.1272 + join = areajoinsel 7.1273 +); 7.1274 + 7.1275 +CREATE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster) 7.1276 + RETURNS boolean 7.1277 + LANGUAGE sql IMMUTABLE 7.1278 + AS 'SELECT $2 OPERATOR(@extschema@.@>) $1::@extschema@.ecluster'; 7.1279 + 7.1280 +CREATE OPERATOR <@ ( 7.1281 + leftarg = ebox, 7.1282 + rightarg = ecluster, 7.1283 + procedure = ecluster_ebox_contains_castwrap, 7.1284 + commutator = @>, 7.1285 + restrict = areasel, 7.1286 + join = areajoinsel 7.1287 +); 7.1288 + 7.1289 +CREATE OPERATOR <-> ( 7.1290 + leftarg = epoint, 7.1291 + rightarg = epoint, 7.1292 + procedure = epoint_distance_proc, 7.1293 + commutator = <-> 7.1294 +); 7.1295 + 7.1296 +CREATE OPERATOR <-> ( 7.1297 + leftarg = epoint, 7.1298 + rightarg = ecircle, 7.1299 + procedure = epoint_ecircle_distance_proc, 7.1300 + commutator = <-> 7.1301 +); 7.1302 + 7.1303 +CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint) 7.1304 + RETURNS float8 7.1305 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 7.1306 + 7.1307 +CREATE OPERATOR <-> ( 7.1308 + leftarg = ecircle, 7.1309 + rightarg = epoint, 7.1310 + procedure = epoint_ecircle_distance_commutator, 7.1311 + commutator = <-> 7.1312 +); 7.1313 + 7.1314 +CREATE OPERATOR <-> ( 7.1315 + leftarg = epoint, 7.1316 + rightarg = ecluster, 7.1317 + procedure = epoint_ecluster_distance_proc, 7.1318 + commutator = <-> 7.1319 +); 7.1320 + 7.1321 +CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint) 7.1322 + RETURNS float8 7.1323 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 7.1324 + 7.1325 +CREATE OPERATOR <-> ( 7.1326 + leftarg = ecluster, 7.1327 + rightarg = epoint, 7.1328 + procedure = epoint_ecluster_distance_commutator, 7.1329 + commutator = <-> 7.1330 +); 7.1331 + 7.1332 +CREATE OPERATOR <-> ( 7.1333 + leftarg = ecircle, 7.1334 + rightarg = ecircle, 7.1335 + procedure = ecircle_distance_proc, 7.1336 + commutator = <-> 7.1337 +); 7.1338 + 7.1339 +CREATE OPERATOR <-> ( 7.1340 + leftarg = ecircle, 7.1341 + rightarg = ecluster, 7.1342 + procedure = ecircle_ecluster_distance_proc, 7.1343 + commutator = <-> 7.1344 +); 7.1345 + 7.1346 +CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle) 7.1347 + RETURNS float8 7.1348 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; 7.1349 + 7.1350 +CREATE OPERATOR <-> ( 7.1351 + leftarg = ecluster, 7.1352 + rightarg = ecircle, 7.1353 + procedure = ecircle_ecluster_distance_commutator, 7.1354 + commutator = <-> 7.1355 +); 7.1356 + 7.1357 +CREATE OPERATOR <-> ( 7.1358 + leftarg = ecluster, 7.1359 + rightarg = ecluster, 7.1360 + procedure = ecluster_distance_proc, 7.1361 + commutator = <-> 7.1362 +); 7.1363 + 7.1364 +CREATE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox) 7.1365 + RETURNS float8 7.1366 + LANGUAGE sql IMMUTABLE 7.1367 + AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 7.1368 + 7.1369 +CREATE OPERATOR <-> ( 7.1370 + leftarg = epoint, 7.1371 + rightarg = ebox, 7.1372 + procedure = epoint_ebox_distance_castwrap, 7.1373 + commutator = <-> 7.1374 +); 7.1375 + 7.1376 +CREATE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint) 7.1377 + RETURNS float8 7.1378 + LANGUAGE sql IMMUTABLE 7.1379 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 7.1380 + 7.1381 +CREATE OPERATOR <-> ( 7.1382 + leftarg = ebox, 7.1383 + rightarg = epoint, 7.1384 + procedure = epoint_ebox_distance_castwrap, 7.1385 + commutator = <-> 7.1386 +); 7.1387 + 7.1388 +CREATE FUNCTION ebox_distance_castwrap(ebox, ebox) 7.1389 + RETURNS float8 7.1390 + LANGUAGE sql IMMUTABLE AS $$ 7.1391 + SELECT 7.1392 + $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2::@extschema@.ecluster 7.1393 + $$; 7.1394 + 7.1395 +CREATE OPERATOR <-> ( 7.1396 + leftarg = ebox, 7.1397 + rightarg = ebox, 7.1398 + procedure = ebox_distance_castwrap, 7.1399 + commutator = <-> 7.1400 +); 7.1401 + 7.1402 +CREATE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle) 7.1403 + RETURNS float8 7.1404 + LANGUAGE sql IMMUTABLE 7.1405 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 7.1406 + 7.1407 +CREATE OPERATOR <-> ( 7.1408 + leftarg = ebox, 7.1409 + rightarg = ecircle, 7.1410 + procedure = ebox_ecircle_distance_castwrap, 7.1411 + commutator = <-> 7.1412 +); 7.1413 + 7.1414 +CREATE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox) 7.1415 + RETURNS float8 7.1416 + LANGUAGE sql IMMUTABLE 7.1417 + AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 7.1418 + 7.1419 +CREATE OPERATOR <-> ( 7.1420 + leftarg = ecircle, 7.1421 + rightarg = ebox, 7.1422 + procedure = ebox_ecircle_distance_castwrap, 7.1423 + commutator = <-> 7.1424 +); 7.1425 + 7.1426 +CREATE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster) 7.1427 + RETURNS float8 7.1428 + LANGUAGE sql IMMUTABLE 7.1429 + AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; 7.1430 + 7.1431 +CREATE OPERATOR <-> ( 7.1432 + leftarg = ebox, 7.1433 + rightarg = ecluster, 7.1434 + procedure = ebox_ecluster_distance_castwrap, 7.1435 + commutator = <-> 7.1436 +); 7.1437 + 7.1438 +CREATE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox) 7.1439 + RETURNS float8 7.1440 + LANGUAGE sql IMMUTABLE 7.1441 + AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; 7.1442 + 7.1443 +CREATE OPERATOR <-> ( 7.1444 + leftarg = ecluster, 7.1445 + rightarg = ebox, 7.1446 + procedure = ebox_ecluster_distance_castwrap, 7.1447 + commutator = <-> 7.1448 +); 7.1449 + 7.1450 +CREATE OPERATOR <=> ( 7.1451 + leftarg = ecluster, 7.1452 + rightarg = epoint_with_sample_count, 7.1453 + procedure = fair_distance_operator_proc 7.1454 +); 7.1455 + 7.1456 + 7.1457 +---------------- 7.1458 +-- GiST index -- 7.1459 +---------------- 7.1460 + 7.1461 +CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 7.1462 + RETURNS boolean 7.1463 + LANGUAGE C STRICT 7.1464 + AS '$libdir/latlon-v0010', 'pgl_gist_consistent'; 7.1465 + 7.1466 +CREATE FUNCTION pgl_gist_union(internal, internal) 7.1467 + RETURNS internal 7.1468 + LANGUAGE C STRICT 7.1469 + AS '$libdir/latlon-v0010', 'pgl_gist_union'; 7.1470 + 7.1471 +CREATE FUNCTION pgl_gist_compress_epoint(internal) 7.1472 + RETURNS internal 7.1473 + LANGUAGE C STRICT 7.1474 + AS '$libdir/latlon-v0010', 'pgl_gist_compress_epoint'; 7.1475 + 7.1476 +CREATE FUNCTION pgl_gist_compress_ecircle(internal) 7.1477 + RETURNS internal 7.1478 + LANGUAGE C STRICT 7.1479 + AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecircle'; 7.1480 + 7.1481 +CREATE FUNCTION pgl_gist_compress_ecluster(internal) 7.1482 + RETURNS internal 7.1483 + LANGUAGE C STRICT 7.1484 + AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecluster'; 7.1485 + 7.1486 +CREATE FUNCTION pgl_gist_decompress(internal) 7.1487 + RETURNS internal 7.1488 + LANGUAGE C STRICT 7.1489 + AS '$libdir/latlon-v0010', 'pgl_gist_decompress'; 7.1490 + 7.1491 +CREATE FUNCTION pgl_gist_penalty(internal, internal, internal) 7.1492 + RETURNS internal 7.1493 + LANGUAGE C STRICT 7.1494 + AS '$libdir/latlon-v0010', 'pgl_gist_penalty'; 7.1495 + 7.1496 +CREATE FUNCTION pgl_gist_picksplit(internal, internal) 7.1497 + RETURNS internal 7.1498 + LANGUAGE C STRICT 7.1499 + AS '$libdir/latlon-v0010', 'pgl_gist_picksplit'; 7.1500 + 7.1501 +CREATE FUNCTION pgl_gist_same(internal, internal, internal) 7.1502 + RETURNS internal 7.1503 + LANGUAGE C STRICT 7.1504 + AS '$libdir/latlon-v0010', 'pgl_gist_same'; 7.1505 + 7.1506 +CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 7.1507 + RETURNS internal 7.1508 + LANGUAGE C STRICT 7.1509 + AS '$libdir/latlon-v0010', 'pgl_gist_distance'; 7.1510 + 7.1511 +CREATE OPERATOR CLASS epoint_ops 7.1512 + DEFAULT FOR TYPE epoint USING gist AS 7.1513 + OPERATOR 11 = , 7.1514 + OPERATOR 22 && (epoint, ebox), 7.1515 + OPERATOR 222 <@ (epoint, ebox), 7.1516 + OPERATOR 23 && (epoint, ecircle), 7.1517 + OPERATOR 24 && (epoint, ecluster), 7.1518 + OPERATOR 124 &&+ (epoint, ecluster), 7.1519 + OPERATOR 224 <@ (epoint, ecluster), 7.1520 + OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 7.1521 + OPERATOR 32 <-> (epoint, ebox) FOR ORDER BY float_ops, 7.1522 + OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 7.1523 + OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 7.1524 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 7.1525 + FUNCTION 2 pgl_gist_union(internal, internal), 7.1526 + FUNCTION 3 pgl_gist_compress_epoint(internal), 7.1527 + FUNCTION 4 pgl_gist_decompress(internal), 7.1528 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 7.1529 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 7.1530 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 7.1531 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 7.1532 + STORAGE ekey_point; 7.1533 + 7.1534 +CREATE OPERATOR CLASS ecircle_ops 7.1535 + DEFAULT FOR TYPE ecircle USING gist AS 7.1536 + OPERATOR 13 = , 7.1537 + OPERATOR 21 && (ecircle, epoint), 7.1538 + OPERATOR 22 && (ecircle, ebox), 7.1539 + OPERATOR 122 &&+ (ecircle, ebox), 7.1540 + OPERATOR 23 && (ecircle, ecircle), 7.1541 + OPERATOR 24 && (ecircle, ecluster), 7.1542 + OPERATOR 124 &&+ (ecircle, ecluster), 7.1543 + OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 7.1544 + OPERATOR 32 <-> (ecircle, ebox) FOR ORDER BY float_ops, 7.1545 + OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 7.1546 + OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 7.1547 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 7.1548 + FUNCTION 2 pgl_gist_union(internal, internal), 7.1549 + FUNCTION 3 pgl_gist_compress_ecircle(internal), 7.1550 + FUNCTION 4 pgl_gist_decompress(internal), 7.1551 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 7.1552 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 7.1553 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 7.1554 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 7.1555 + STORAGE ekey_area; 7.1556 + 7.1557 +CREATE OPERATOR CLASS ecluster_ops 7.1558 + DEFAULT FOR TYPE ecluster USING gist AS 7.1559 + OPERATOR 21 && (ecluster, epoint), 7.1560 + OPERATOR 121 &&+ (ecluster, epoint), 7.1561 + OPERATOR 221 @> (ecluster, epoint), 7.1562 + OPERATOR 22 && (ecluster, ebox), 7.1563 + OPERATOR 122 &&+ (ecluster, ebox), 7.1564 + OPERATOR 222 @> (ecluster, ebox), 7.1565 + OPERATOR 322 <@ (ecluster, ebox), 7.1566 + OPERATOR 23 && (ecluster, ecircle), 7.1567 + OPERATOR 123 &&+ (ecluster, ecircle), 7.1568 + OPERATOR 24 && (ecluster, ecluster), 7.1569 + OPERATOR 124 &&+ (ecluster, ecluster), 7.1570 + OPERATOR 224 @> (ecluster, ecluster), 7.1571 + OPERATOR 324 <@ (ecluster, ecluster), 7.1572 + OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops, 7.1573 + OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops, 7.1574 + OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops, 7.1575 + OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops, 7.1576 + OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops, 7.1577 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 7.1578 + FUNCTION 2 pgl_gist_union(internal, internal), 7.1579 + FUNCTION 3 pgl_gist_compress_ecluster(internal), 7.1580 + FUNCTION 4 pgl_gist_decompress(internal), 7.1581 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 7.1582 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 7.1583 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 7.1584 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 7.1585 + STORAGE ekey_area; 7.1586 + 7.1587 + 7.1588 +--------------------- 7.1589 +-- alias functions -- 7.1590 +--------------------- 7.1591 + 7.1592 +CREATE FUNCTION distance(epoint, epoint) 7.1593 + RETURNS float8 7.1594 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2'; 7.1595 + 7.1596 +CREATE FUNCTION distance(ecluster, epoint) 7.1597 + RETURNS float8 7.1598 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2'; 7.1599 + 7.1600 +CREATE FUNCTION distance_within(epoint, epoint, float8) 7.1601 + RETURNS boolean 7.1602 + LANGUAGE sql IMMUTABLE 7.1603 + AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)'; 7.1604 + 7.1605 +CREATE FUNCTION distance_within(ecluster, epoint, float8) 7.1606 + RETURNS boolean 7.1607 + LANGUAGE sql IMMUTABLE 7.1608 + AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)'; 7.1609 + 7.1610 +CREATE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) 7.1611 + RETURNS float8 7.1612 + LANGUAGE sql IMMUTABLE AS $$ 7.1613 + SELECT 7.1614 + $1 OPERATOR(@extschema@.<=>) @extschema@.epoint_with_sample_count($2, $3) 7.1615 + $$; 7.1616 + 7.1617 + 7.1618 +-------------------------------- 7.1619 +-- other data storage formats -- 7.1620 +-------------------------------- 7.1621 + 7.1622 +CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint') 7.1623 + RETURNS epoint 7.1624 + LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 7.1625 + DECLARE 7.1626 + "result" @extschema@.epoint; 7.1627 + BEGIN 7.1628 + IF $3 OPERATOR(pg_catalog.=) 'epoint_lonlat' THEN 7.1629 + -- avoid dynamic command execution for better performance 7.1630 + RETURN @extschema@.epoint($2, $1); 7.1631 + END IF; 7.1632 + IF 7.1633 + $3 OPERATOR(pg_catalog.=) 'epoint' OR 7.1634 + $3 OPERATOR(pg_catalog.=) 'epoint_latlon' 7.1635 + THEN 7.1636 + -- avoid dynamic command execution for better performance 7.1637 + RETURN @extschema@.epoint($1, $2); 7.1638 + END IF; 7.1639 + EXECUTE 7.1640 + 'SELECT ' OPERATOR(pg_catalog.||) $3 OPERATOR(pg_catalog.||) '($1, $2)' INTO STRICT "result" USING $1, $2; 7.1641 + RETURN "result"; 7.1642 + END; 7.1643 + $$; 7.1644 + 7.1645 +CREATE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat') 7.1646 + RETURNS SETOF jsonb 7.1647 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.1648 + SELECT "result" FROM 7.1649 + ( SELECT pg_catalog.jsonb_array_length($1) - 1 ) 7.1650 + AS "lastindex_row" ("lastindex") 7.1651 + CROSS JOIN LATERAL pg_catalog.jsonb_array_elements( 7.1652 + CASE WHEN 7.1653 + @extschema@.coords_to_epoint( 7.1654 + ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 0) 7.1655 + ::pg_catalog.float8, 7.1656 + ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 1) 7.1657 + ::pg_catalog.float8, 7.1658 + $2 7.1659 + ) OPERATOR(pg_catalog.=) @extschema@.coords_to_epoint( 7.1660 + ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 0) 7.1661 + ::pg_catalog.float8, 7.1662 + ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 1) 7.1663 + ::pg_catalog.float8, 7.1664 + $2 7.1665 + ) 7.1666 + THEN 7.1667 + $1 - "lastindex" 7.1668 + ELSE 7.1669 + $1 7.1670 + END 7.1671 + ) AS "result_row" ("result") 7.1672 + $$; 7.1673 + 7.1674 +CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat') 7.1675 + RETURNS epoint 7.1676 + LANGUAGE sql IMMUTABLE STRICT AS $$ 7.1677 + SELECT CASE 7.1678 + WHEN $1 OPERATOR(pg_catalog.->>) 'type' OPERATOR(pg_catalog.=) 'Point' THEN 7.1679 + @extschema@.coords_to_epoint( 7.1680 + ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0) 7.1681 + ::pg_catalog.float8, 7.1682 + ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1) 7.1683 + ::pg_catalog.float8, 7.1684 + $2 7.1685 + ) 7.1686 + WHEN $1->>'type' = 'Feature' THEN 7.1687 + @extschema@.GeoJSON_to_epoint($1 OPERATOR(pg_catalog.->) 'geometry', $2) 7.1688 + ELSE 7.1689 + NULL 7.1690 + END 7.1691 + $$; 7.1692 + 7.1693 +CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat') 7.1694 + RETURNS ecluster 7.1695 + LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 7.1696 + DECLARE 7.1697 + "tp" TEXT = $1 OPERATOR(pg_catalog.->>) 'type'; 7.1698 + BEGIN 7.1699 + IF "tp" = 'Point' THEN RETURN 7.1700 + @extschema@.coords_to_epoint( 7.1701 + ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0) 7.1702 + ::pg_catalog.float8, 7.1703 + ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1) 7.1704 + ::pg_catalog.float8, 7.1705 + $2 7.1706 + )::@extschema@.ecluster; 7.1707 + END IF; 7.1708 + raise notice 'DEBUG2'; 7.1709 + IF "tp" = 'MultiPoint' THEN RETURN 7.1710 + ( SELECT @extschema@.ecluster_create_multipoint(pg_catalog.array_agg( 7.1711 + @extschema@.coords_to_epoint( 7.1712 + ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 7.1713 + ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 7.1714 + $2 7.1715 + ) 7.1716 + )) 7.1717 + FROM pg_catalog.jsonb_array_elements( 7.1718 + $1 OPERATOR(pg_catalog.->) 'coordinates' 7.1719 + ) AS "coord" 7.1720 + ); 7.1721 + END IF; 7.1722 + IF "tp" = 'LineString' THEN RETURN 7.1723 + ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg( 7.1724 + @extschema@.coords_to_epoint( 7.1725 + ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 7.1726 + ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 7.1727 + $2 7.1728 + ) 7.1729 + )) 7.1730 + FROM pg_catalog.jsonb_array_elements( 7.1731 + $1 OPERATOR(pg_catalog.->) 'coordinates' 7.1732 + ) AS "coord" 7.1733 + ); 7.1734 + END IF; 7.1735 + IF "tp" = 'MultiLineString' THEN RETURN 7.1736 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 7.1737 + ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg( 7.1738 + @extschema@.coords_to_epoint( 7.1739 + ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 7.1740 + ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 7.1741 + $2 7.1742 + ) 7.1743 + )) 7.1744 + FROM pg_catalog.jsonb_array_elements("coord_array") AS "coord" 7.1745 + ) 7.1746 + )) 7.1747 + FROM pg_catalog.jsonb_array_elements( 7.1748 + $1 OPERATOR(pg_catalog.->) 'coordinates' 7.1749 + ) AS "coord_array" 7.1750 + ); 7.1751 + END IF; 7.1752 + IF "tp" = 'Polygon' THEN RETURN 7.1753 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 7.1754 + ( SELECT @extschema@.ecluster_create_polygon(pg_catalog.array_agg( 7.1755 + @extschema@.coords_to_epoint( 7.1756 + ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, 7.1757 + ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, 7.1758 + $2 7.1759 + ) 7.1760 + )) 7.1761 + FROM @extschema@.GeoJSON_LinearRing_vertices("coord_array", $2) 7.1762 + AS "coord" 7.1763 + ) 7.1764 + )) 7.1765 + FROM pg_catalog.jsonb_array_elements( 7.1766 + $1 OPERATOR(pg_catalog.->) 'coordinates' 7.1767 + ) AS "coord_array" 7.1768 + ); 7.1769 + END IF; 7.1770 + IF "tp" = 'MultiPolygon' THEN RETURN 7.1771 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 7.1772 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 7.1773 + ( SELECT @extschema@.ecluster_create_polygon( 7.1774 + pg_catalog.array_agg( 7.1775 + @extschema@.coords_to_epoint( 7.1776 + ("coord" OPERATOR(pg_catalog.->>) 0) 7.1777 + ::pg_catalog.float8, 7.1778 + ("coord" OPERATOR(pg_catalog.->>) 1) 7.1779 + ::pg_catalog.float8, 7.1780 + $2 7.1781 + ) 7.1782 + ) 7.1783 + ) 7.1784 + FROM @extschema@.GeoJSON_LinearRing_vertices( 7.1785 + "coord_array", $2 7.1786 + ) AS "coord" 7.1787 + ) 7.1788 + )) 7.1789 + FROM pg_catalog.jsonb_array_elements("coord_array_array") 7.1790 + AS "coord_array" 7.1791 + ) 7.1792 + )) 7.1793 + FROM jsonb_array_elements( 7.1794 + $1 OPERATOR(pg_catalog.->) 'coordinates' 7.1795 + ) AS "coord_array_array" 7.1796 + ); 7.1797 + END IF; 7.1798 + IF "tp" = 'GeometryCollection' THEN RETURN 7.1799 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 7.1800 + @extschema@.GeoJSON_to_ecluster("geometry", $2) 7.1801 + )) 7.1802 + FROM pg_catalog.jsonb_array_elements( 7.1803 + $1 OPERATOR(pg_catalog.->) 'geometries' 7.1804 + ) AS "geometry" 7.1805 + ); 7.1806 + END IF; 7.1807 + IF "tp" = 'Feature' THEN RETURN 7.1808 + @extschema@.GeoJSON_to_ecluster( 7.1809 + $1 OPERATOR(pg_catalog.->) 'geometry', $2 7.1810 + ); 7.1811 + END IF; 7.1812 + IF "tp" = 'FeatureCollection' THEN RETURN 7.1813 + ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( 7.1814 + @extschema@.GeoJSON_to_ecluster("feature", $2) 7.1815 + )) 7.1816 + FROM pg_catalog.jsonb_array_elements( 7.1817 + $1 OPERATOR(pg_catalog.->) 'features' 7.1818 + ) AS "feature" 7.1819 + ); 7.1820 + END IF; 7.1821 + RETURN NULL; 7.1822 + END; 7.1823 + $$; 7.1824 +
8.1 --- a/latlon.control Thu Oct 23 15:19:13 2025 +0200 8.2 +++ b/latlon.control Thu Oct 23 15:31:50 2025 +0200 8.3 @@ -1,4 +1,4 @@ 8.4 comment = 'Geographic data types and spatial indexing for the WGS-84 spheroid' 8.5 -default_version = '0.15' 8.6 +default_version = '0.16' 8.7 trusted = true 8.8 relocatable = false