pgLatLon

annotate latlon--0.15.sql @ 81:b0e17a5a0258

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

Impressum / About Us