pgLatLon

annotate latlon--0.7.sql @ 34:d2e34c0150af

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

Impressum / About Us