pgLatLon

annotate latlon--0.15.sql @ 77:a707dc3e896c

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

Impressum / About Us