pgLatLon

annotate latlon--0.12.sql @ 59:a011d71ae717

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

Impressum / About Us