liquid_feedback_core

annotate pgLatLon/latlon--0.1.sql @ 530:6bc81898fd3b

Fixed typo in documentation and comments: "indicies" -> "indices"; Marked make-doc.sh as executable
author jbe
date Sun Aug 21 16:28:21 2016 +0200 (2016-08-21)
parents 96ee2db56bec
children
rev   line source
jbe@529 1
jbe@529 2 ----------------------------------------
jbe@529 3 -- forward declarations (shell types) --
jbe@529 4 ----------------------------------------
jbe@529 5
jbe@529 6 CREATE TYPE epoint;
jbe@529 7 CREATE TYPE ebox;
jbe@529 8 CREATE TYPE ecircle;
jbe@529 9 CREATE TYPE ecluster;
jbe@529 10
jbe@529 11
jbe@529 12 ------------------------------------------------------------
jbe@529 13 -- dummy input/output functions for dummy index key types --
jbe@529 14 ------------------------------------------------------------
jbe@529 15
jbe@529 16 CREATE FUNCTION ekey_point_in_dummy(cstring)
jbe@529 17 RETURNS ekey_point
jbe@529 18 LANGUAGE C IMMUTABLE STRICT
jbe@529 19 AS '$libdir/latlon-v0001', 'pgl_notimpl';
jbe@529 20
jbe@529 21 CREATE FUNCTION ekey_point_out_dummy(ekey_point)
jbe@529 22 RETURNS cstring
jbe@529 23 LANGUAGE C IMMUTABLE STRICT
jbe@529 24 AS '$libdir/latlon-v0001', 'pgl_notimpl';
jbe@529 25
jbe@529 26 CREATE FUNCTION ekey_area_in_dummy(cstring)
jbe@529 27 RETURNS ekey_area
jbe@529 28 LANGUAGE C IMMUTABLE STRICT
jbe@529 29 AS '$libdir/latlon-v0001', 'pgl_notimpl';
jbe@529 30
jbe@529 31 CREATE FUNCTION ekey_area_out_dummy(ekey_area)
jbe@529 32 RETURNS cstring
jbe@529 33 LANGUAGE C IMMUTABLE STRICT
jbe@529 34 AS '$libdir/latlon-v0001', 'pgl_notimpl';
jbe@529 35
jbe@529 36
jbe@529 37 --------------------------
jbe@529 38 -- text input functions --
jbe@529 39 --------------------------
jbe@529 40
jbe@529 41 CREATE FUNCTION epoint_in(cstring)
jbe@529 42 RETURNS epoint
jbe@529 43 LANGUAGE C IMMUTABLE STRICT
jbe@529 44 AS '$libdir/latlon-v0001', 'pgl_epoint_in';
jbe@529 45
jbe@529 46 CREATE FUNCTION ebox_in(cstring)
jbe@529 47 RETURNS ebox
jbe@529 48 LANGUAGE C IMMUTABLE STRICT
jbe@529 49 AS '$libdir/latlon-v0001', 'pgl_ebox_in';
jbe@529 50
jbe@529 51 CREATE FUNCTION ecircle_in(cstring)
jbe@529 52 RETURNS ecircle
jbe@529 53 LANGUAGE C IMMUTABLE STRICT
jbe@529 54 AS '$libdir/latlon-v0001', 'pgl_ecircle_in';
jbe@529 55
jbe@529 56 CREATE FUNCTION ecluster_in(cstring)
jbe@529 57 RETURNS ecluster
jbe@529 58 LANGUAGE C IMMUTABLE STRICT
jbe@529 59 AS '$libdir/latlon-v0001', 'pgl_ecluster_in';
jbe@529 60
jbe@529 61
jbe@529 62 ---------------------------
jbe@529 63 -- text output functions --
jbe@529 64 ---------------------------
jbe@529 65
jbe@529 66 CREATE FUNCTION epoint_out(epoint)
jbe@529 67 RETURNS cstring
jbe@529 68 LANGUAGE C IMMUTABLE STRICT
jbe@529 69 AS '$libdir/latlon-v0001', 'pgl_epoint_out';
jbe@529 70
jbe@529 71 CREATE FUNCTION ebox_out(ebox)
jbe@529 72 RETURNS cstring
jbe@529 73 LANGUAGE C IMMUTABLE STRICT
jbe@529 74 AS '$libdir/latlon-v0001', 'pgl_ebox_out';
jbe@529 75
jbe@529 76 CREATE FUNCTION ecircle_out(ecircle)
jbe@529 77 RETURNS cstring
jbe@529 78 LANGUAGE C IMMUTABLE STRICT
jbe@529 79 AS '$libdir/latlon-v0001', 'pgl_ecircle_out';
jbe@529 80
jbe@529 81 CREATE FUNCTION ecluster_out(ecluster)
jbe@529 82 RETURNS cstring
jbe@529 83 LANGUAGE C IMMUTABLE STRICT
jbe@529 84 AS '$libdir/latlon-v0001', 'pgl_ecluster_out';
jbe@529 85
jbe@529 86
jbe@529 87 --------------------------
jbe@529 88 -- binary I/O functions --
jbe@529 89 --------------------------
jbe@529 90
jbe@529 91 CREATE FUNCTION epoint_recv(internal)
jbe@529 92 RETURNS epoint
jbe@529 93 LANGUAGE C IMMUTABLE STRICT
jbe@529 94 AS '$libdir/latlon-v0001', 'pgl_epoint_recv';
jbe@529 95
jbe@529 96 CREATE FUNCTION ebox_recv(internal)
jbe@529 97 RETURNS ebox
jbe@529 98 LANGUAGE C IMMUTABLE STRICT
jbe@529 99 AS '$libdir/latlon-v0001', 'pgl_ebox_recv';
jbe@529 100
jbe@529 101 CREATE FUNCTION ecircle_recv(internal)
jbe@529 102 RETURNS ecircle
jbe@529 103 LANGUAGE C IMMUTABLE STRICT
jbe@529 104 AS '$libdir/latlon-v0001', 'pgl_ecircle_recv';
jbe@529 105
jbe@529 106 CREATE FUNCTION epoint_send(epoint)
jbe@529 107 RETURNS bytea
jbe@529 108 LANGUAGE C IMMUTABLE STRICT
jbe@529 109 AS '$libdir/latlon-v0001', 'pgl_epoint_send';
jbe@529 110
jbe@529 111 CREATE FUNCTION ebox_send(ebox)
jbe@529 112 RETURNS bytea
jbe@529 113 LANGUAGE C IMMUTABLE STRICT
jbe@529 114 AS '$libdir/latlon-v0001', 'pgl_ebox_send';
jbe@529 115
jbe@529 116 CREATE FUNCTION ecircle_send(ecircle)
jbe@529 117 RETURNS bytea
jbe@529 118 LANGUAGE C IMMUTABLE STRICT
jbe@529 119 AS '$libdir/latlon-v0001', 'pgl_ecircle_send';
jbe@529 120
jbe@529 121
jbe@529 122 -----------------------------------------------
jbe@529 123 -- type definitions of dummy index key types --
jbe@529 124 -----------------------------------------------
jbe@529 125
jbe@529 126 CREATE TYPE ekey_point (
jbe@529 127 internallength = 8,
jbe@529 128 input = ekey_point_in_dummy,
jbe@529 129 output = ekey_point_out_dummy,
jbe@529 130 alignment = char );
jbe@529 131
jbe@529 132 CREATE TYPE ekey_area (
jbe@529 133 internallength = 9,
jbe@529 134 input = ekey_area_in_dummy,
jbe@529 135 output = ekey_area_out_dummy,
jbe@529 136 alignment = char );
jbe@529 137
jbe@529 138
jbe@529 139 ------------------------------------------
jbe@529 140 -- definitions of geographic data types --
jbe@529 141 ------------------------------------------
jbe@529 142
jbe@529 143 CREATE TYPE epoint (
jbe@529 144 internallength = 16,
jbe@529 145 input = epoint_in,
jbe@529 146 output = epoint_out,
jbe@529 147 receive = epoint_recv,
jbe@529 148 send = epoint_send,
jbe@529 149 alignment = double );
jbe@529 150
jbe@529 151 CREATE TYPE ebox (
jbe@529 152 internallength = 32,
jbe@529 153 input = ebox_in,
jbe@529 154 output = ebox_out,
jbe@529 155 receive = ebox_recv,
jbe@529 156 send = ebox_send,
jbe@529 157 alignment = double );
jbe@529 158
jbe@529 159 CREATE TYPE ecircle (
jbe@529 160 internallength = 24,
jbe@529 161 input = ecircle_in,
jbe@529 162 output = ecircle_out,
jbe@529 163 receive = ecircle_recv,
jbe@529 164 send = ecircle_send,
jbe@529 165 alignment = double );
jbe@529 166
jbe@529 167 CREATE TYPE ecluster (
jbe@529 168 internallength = VARIABLE,
jbe@529 169 input = ecluster_in,
jbe@529 170 output = ecluster_out,
jbe@529 171 alignment = double,
jbe@529 172 storage = external );
jbe@529 173
jbe@529 174
jbe@529 175 --------------------
jbe@529 176 -- B-tree support --
jbe@529 177 --------------------
jbe@529 178
jbe@529 179 -- begin of B-tree support for epoint
jbe@529 180
jbe@529 181 CREATE FUNCTION epoint_btree_lt(epoint, epoint)
jbe@529 182 RETURNS boolean
jbe@529 183 LANGUAGE C IMMUTABLE STRICT
jbe@529 184 AS '$libdir/latlon-v0001', 'pgl_btree_epoint_lt';
jbe@529 185
jbe@529 186 CREATE FUNCTION epoint_btree_le(epoint, epoint)
jbe@529 187 RETURNS boolean
jbe@529 188 LANGUAGE C IMMUTABLE STRICT
jbe@529 189 AS '$libdir/latlon-v0001', 'pgl_btree_epoint_le';
jbe@529 190
jbe@529 191 CREATE FUNCTION epoint_btree_eq(epoint, epoint)
jbe@529 192 RETURNS boolean
jbe@529 193 LANGUAGE C IMMUTABLE STRICT
jbe@529 194 AS '$libdir/latlon-v0001', 'pgl_btree_epoint_eq';
jbe@529 195
jbe@529 196 CREATE FUNCTION epoint_btree_ne(epoint, epoint)
jbe@529 197 RETURNS boolean
jbe@529 198 LANGUAGE C IMMUTABLE STRICT
jbe@529 199 AS '$libdir/latlon-v0001', 'pgl_btree_epoint_ne';
jbe@529 200
jbe@529 201 CREATE FUNCTION epoint_btree_ge(epoint, epoint)
jbe@529 202 RETURNS boolean
jbe@529 203 LANGUAGE C IMMUTABLE STRICT
jbe@529 204 AS '$libdir/latlon-v0001', 'pgl_btree_epoint_ge';
jbe@529 205
jbe@529 206 CREATE FUNCTION epoint_btree_gt(epoint, epoint)
jbe@529 207 RETURNS boolean
jbe@529 208 LANGUAGE C IMMUTABLE STRICT
jbe@529 209 AS '$libdir/latlon-v0001', 'pgl_btree_epoint_gt';
jbe@529 210
jbe@529 211 CREATE OPERATOR <<< (
jbe@529 212 leftarg = epoint,
jbe@529 213 rightarg = epoint,
jbe@529 214 procedure = epoint_btree_lt,
jbe@529 215 commutator = >>>,
jbe@529 216 negator = >>>=,
jbe@529 217 restrict = scalarltsel,
jbe@529 218 join = scalarltjoinsel
jbe@529 219 );
jbe@529 220
jbe@529 221 CREATE OPERATOR <<<= (
jbe@529 222 leftarg = epoint,
jbe@529 223 rightarg = epoint,
jbe@529 224 procedure = epoint_btree_le,
jbe@529 225 commutator = >>>=,
jbe@529 226 negator = >>>,
jbe@529 227 restrict = scalarltsel,
jbe@529 228 join = scalarltjoinsel
jbe@529 229 );
jbe@529 230
jbe@529 231 CREATE OPERATOR = (
jbe@529 232 leftarg = epoint,
jbe@529 233 rightarg = epoint,
jbe@529 234 procedure = epoint_btree_eq,
jbe@529 235 commutator = =,
jbe@529 236 negator = <>,
jbe@529 237 restrict = eqsel,
jbe@529 238 join = eqjoinsel,
jbe@529 239 merges
jbe@529 240 );
jbe@529 241
jbe@529 242 CREATE OPERATOR <> (
jbe@529 243 leftarg = epoint,
jbe@529 244 rightarg = epoint,
jbe@529 245 procedure = epoint_btree_eq,
jbe@529 246 commutator = <>,
jbe@529 247 negator = =,
jbe@529 248 restrict = neqsel,
jbe@529 249 join = neqjoinsel
jbe@529 250 );
jbe@529 251
jbe@529 252 CREATE OPERATOR >>>= (
jbe@529 253 leftarg = epoint,
jbe@529 254 rightarg = epoint,
jbe@529 255 procedure = epoint_btree_ge,
jbe@529 256 commutator = <<<=,
jbe@529 257 negator = <<<,
jbe@529 258 restrict = scalargtsel,
jbe@529 259 join = scalargtjoinsel
jbe@529 260 );
jbe@529 261
jbe@529 262 CREATE OPERATOR >>> (
jbe@529 263 leftarg = epoint,
jbe@529 264 rightarg = epoint,
jbe@529 265 procedure = epoint_btree_gt,
jbe@529 266 commutator = <<<,
jbe@529 267 negator = <<<=,
jbe@529 268 restrict = scalargtsel,
jbe@529 269 join = scalargtjoinsel
jbe@529 270 );
jbe@529 271
jbe@529 272 CREATE FUNCTION epoint_btree_cmp(epoint, epoint)
jbe@529 273 RETURNS int4
jbe@529 274 LANGUAGE C IMMUTABLE STRICT
jbe@529 275 AS '$libdir/latlon-v0001', 'pgl_btree_epoint_cmp';
jbe@529 276
jbe@529 277 CREATE OPERATOR CLASS epoint_btree_ops
jbe@529 278 DEFAULT FOR TYPE epoint USING btree AS
jbe@529 279 OPERATOR 1 <<< ,
jbe@529 280 OPERATOR 2 <<<= ,
jbe@529 281 OPERATOR 3 = ,
jbe@529 282 OPERATOR 4 >>>= ,
jbe@529 283 OPERATOR 5 >>> ,
jbe@529 284 FUNCTION 1 epoint_btree_cmp(epoint, epoint);
jbe@529 285
jbe@529 286 -- end of B-tree support for epoint
jbe@529 287
jbe@529 288 -- begin of B-tree support for ebox
jbe@529 289
jbe@529 290 CREATE FUNCTION ebox_btree_lt(ebox, ebox)
jbe@529 291 RETURNS boolean
jbe@529 292 LANGUAGE C IMMUTABLE STRICT
jbe@529 293 AS '$libdir/latlon-v0001', 'pgl_btree_ebox_lt';
jbe@529 294
jbe@529 295 CREATE FUNCTION ebox_btree_le(ebox, ebox)
jbe@529 296 RETURNS boolean
jbe@529 297 LANGUAGE C IMMUTABLE STRICT
jbe@529 298 AS '$libdir/latlon-v0001', 'pgl_btree_ebox_le';
jbe@529 299
jbe@529 300 CREATE FUNCTION ebox_btree_eq(ebox, ebox)
jbe@529 301 RETURNS boolean
jbe@529 302 LANGUAGE C IMMUTABLE STRICT
jbe@529 303 AS '$libdir/latlon-v0001', 'pgl_btree_ebox_eq';
jbe@529 304
jbe@529 305 CREATE FUNCTION ebox_btree_ne(ebox, ebox)
jbe@529 306 RETURNS boolean
jbe@529 307 LANGUAGE C IMMUTABLE STRICT
jbe@529 308 AS '$libdir/latlon-v0001', 'pgl_btree_ebox_ne';
jbe@529 309
jbe@529 310 CREATE FUNCTION ebox_btree_ge(ebox, ebox)
jbe@529 311 RETURNS boolean
jbe@529 312 LANGUAGE C IMMUTABLE STRICT
jbe@529 313 AS '$libdir/latlon-v0001', 'pgl_btree_ebox_ge';
jbe@529 314
jbe@529 315 CREATE FUNCTION ebox_btree_gt(ebox, ebox)
jbe@529 316 RETURNS boolean
jbe@529 317 LANGUAGE C IMMUTABLE STRICT
jbe@529 318 AS '$libdir/latlon-v0001', 'pgl_btree_ebox_gt';
jbe@529 319
jbe@529 320 CREATE OPERATOR <<< (
jbe@529 321 leftarg = ebox,
jbe@529 322 rightarg = ebox,
jbe@529 323 procedure = ebox_btree_lt,
jbe@529 324 commutator = >>>,
jbe@529 325 negator = >>>=,
jbe@529 326 restrict = scalarltsel,
jbe@529 327 join = scalarltjoinsel
jbe@529 328 );
jbe@529 329
jbe@529 330 CREATE OPERATOR <<<= (
jbe@529 331 leftarg = ebox,
jbe@529 332 rightarg = ebox,
jbe@529 333 procedure = ebox_btree_le,
jbe@529 334 commutator = >>>=,
jbe@529 335 negator = >>>,
jbe@529 336 restrict = scalarltsel,
jbe@529 337 join = scalarltjoinsel
jbe@529 338 );
jbe@529 339
jbe@529 340 CREATE OPERATOR = (
jbe@529 341 leftarg = ebox,
jbe@529 342 rightarg = ebox,
jbe@529 343 procedure = ebox_btree_eq,
jbe@529 344 commutator = =,
jbe@529 345 negator = <>,
jbe@529 346 restrict = eqsel,
jbe@529 347 join = eqjoinsel,
jbe@529 348 merges
jbe@529 349 );
jbe@529 350
jbe@529 351 CREATE OPERATOR <> (
jbe@529 352 leftarg = ebox,
jbe@529 353 rightarg = ebox,
jbe@529 354 procedure = ebox_btree_eq,
jbe@529 355 commutator = <>,
jbe@529 356 negator = =,
jbe@529 357 restrict = neqsel,
jbe@529 358 join = neqjoinsel
jbe@529 359 );
jbe@529 360
jbe@529 361 CREATE OPERATOR >>>= (
jbe@529 362 leftarg = ebox,
jbe@529 363 rightarg = ebox,
jbe@529 364 procedure = ebox_btree_ge,
jbe@529 365 commutator = <<<=,
jbe@529 366 negator = <<<,
jbe@529 367 restrict = scalargtsel,
jbe@529 368 join = scalargtjoinsel
jbe@529 369 );
jbe@529 370
jbe@529 371 CREATE OPERATOR >>> (
jbe@529 372 leftarg = ebox,
jbe@529 373 rightarg = ebox,
jbe@529 374 procedure = ebox_btree_gt,
jbe@529 375 commutator = <<<,
jbe@529 376 negator = <<<=,
jbe@529 377 restrict = scalargtsel,
jbe@529 378 join = scalargtjoinsel
jbe@529 379 );
jbe@529 380
jbe@529 381 CREATE FUNCTION ebox_btree_cmp(ebox, ebox)
jbe@529 382 RETURNS int4
jbe@529 383 LANGUAGE C IMMUTABLE STRICT
jbe@529 384 AS '$libdir/latlon-v0001', 'pgl_btree_ebox_cmp';
jbe@529 385
jbe@529 386 CREATE OPERATOR CLASS ebox_btree_ops
jbe@529 387 DEFAULT FOR TYPE ebox USING btree AS
jbe@529 388 OPERATOR 1 <<< ,
jbe@529 389 OPERATOR 2 <<<= ,
jbe@529 390 OPERATOR 3 = ,
jbe@529 391 OPERATOR 4 >>>= ,
jbe@529 392 OPERATOR 5 >>> ,
jbe@529 393 FUNCTION 1 ebox_btree_cmp(ebox, ebox);
jbe@529 394
jbe@529 395 -- end of B-tree support for ebox
jbe@529 396
jbe@529 397 -- begin of B-tree support for ecircle
jbe@529 398
jbe@529 399 CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle)
jbe@529 400 RETURNS boolean
jbe@529 401 LANGUAGE C IMMUTABLE STRICT
jbe@529 402 AS '$libdir/latlon-v0001', 'pgl_btree_ecircle_lt';
jbe@529 403
jbe@529 404 CREATE FUNCTION ecircle_btree_le(ecircle, ecircle)
jbe@529 405 RETURNS boolean
jbe@529 406 LANGUAGE C IMMUTABLE STRICT
jbe@529 407 AS '$libdir/latlon-v0001', 'pgl_btree_ecircle_le';
jbe@529 408
jbe@529 409 CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle)
jbe@529 410 RETURNS boolean
jbe@529 411 LANGUAGE C IMMUTABLE STRICT
jbe@529 412 AS '$libdir/latlon-v0001', 'pgl_btree_ecircle_eq';
jbe@529 413
jbe@529 414 CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle)
jbe@529 415 RETURNS boolean
jbe@529 416 LANGUAGE C IMMUTABLE STRICT
jbe@529 417 AS '$libdir/latlon-v0001', 'pgl_btree_ecircle_ne';
jbe@529 418
jbe@529 419 CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle)
jbe@529 420 RETURNS boolean
jbe@529 421 LANGUAGE C IMMUTABLE STRICT
jbe@529 422 AS '$libdir/latlon-v0001', 'pgl_btree_ecircle_ge';
jbe@529 423
jbe@529 424 CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle)
jbe@529 425 RETURNS boolean
jbe@529 426 LANGUAGE C IMMUTABLE STRICT
jbe@529 427 AS '$libdir/latlon-v0001', 'pgl_btree_ecircle_gt';
jbe@529 428
jbe@529 429 CREATE OPERATOR <<< (
jbe@529 430 leftarg = ecircle,
jbe@529 431 rightarg = ecircle,
jbe@529 432 procedure = ecircle_btree_lt,
jbe@529 433 commutator = >>>,
jbe@529 434 negator = >>>=,
jbe@529 435 restrict = scalarltsel,
jbe@529 436 join = scalarltjoinsel
jbe@529 437 );
jbe@529 438
jbe@529 439 CREATE OPERATOR <<<= (
jbe@529 440 leftarg = ecircle,
jbe@529 441 rightarg = ecircle,
jbe@529 442 procedure = ecircle_btree_le,
jbe@529 443 commutator = >>>=,
jbe@529 444 negator = >>>,
jbe@529 445 restrict = scalarltsel,
jbe@529 446 join = scalarltjoinsel
jbe@529 447 );
jbe@529 448
jbe@529 449 CREATE OPERATOR = (
jbe@529 450 leftarg = ecircle,
jbe@529 451 rightarg = ecircle,
jbe@529 452 procedure = ecircle_btree_eq,
jbe@529 453 commutator = =,
jbe@529 454 negator = <>,
jbe@529 455 restrict = eqsel,
jbe@529 456 join = eqjoinsel,
jbe@529 457 merges
jbe@529 458 );
jbe@529 459
jbe@529 460 CREATE OPERATOR <> (
jbe@529 461 leftarg = ecircle,
jbe@529 462 rightarg = ecircle,
jbe@529 463 procedure = ecircle_btree_eq,
jbe@529 464 commutator = <>,
jbe@529 465 negator = =,
jbe@529 466 restrict = neqsel,
jbe@529 467 join = neqjoinsel
jbe@529 468 );
jbe@529 469
jbe@529 470 CREATE OPERATOR >>>= (
jbe@529 471 leftarg = ecircle,
jbe@529 472 rightarg = ecircle,
jbe@529 473 procedure = ecircle_btree_ge,
jbe@529 474 commutator = <<<=,
jbe@529 475 negator = <<<,
jbe@529 476 restrict = scalargtsel,
jbe@529 477 join = scalargtjoinsel
jbe@529 478 );
jbe@529 479
jbe@529 480 CREATE OPERATOR >>> (
jbe@529 481 leftarg = ecircle,
jbe@529 482 rightarg = ecircle,
jbe@529 483 procedure = ecircle_btree_gt,
jbe@529 484 commutator = <<<,
jbe@529 485 negator = <<<=,
jbe@529 486 restrict = scalargtsel,
jbe@529 487 join = scalargtjoinsel
jbe@529 488 );
jbe@529 489
jbe@529 490 CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle)
jbe@529 491 RETURNS int4
jbe@529 492 LANGUAGE C IMMUTABLE STRICT
jbe@529 493 AS '$libdir/latlon-v0001', 'pgl_btree_ecircle_cmp';
jbe@529 494
jbe@529 495 CREATE OPERATOR CLASS ecircle_btree_ops
jbe@529 496 DEFAULT FOR TYPE ecircle USING btree AS
jbe@529 497 OPERATOR 1 <<< ,
jbe@529 498 OPERATOR 2 <<<= ,
jbe@529 499 OPERATOR 3 = ,
jbe@529 500 OPERATOR 4 >>>= ,
jbe@529 501 OPERATOR 5 >>> ,
jbe@529 502 FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle);
jbe@529 503
jbe@529 504 -- end of B-tree support for ecircle
jbe@529 505
jbe@529 506
jbe@529 507 ----------------
jbe@529 508 -- type casts --
jbe@529 509 ----------------
jbe@529 510
jbe@529 511 CREATE FUNCTION cast_epoint_to_ebox(epoint)
jbe@529 512 RETURNS ebox
jbe@529 513 LANGUAGE C IMMUTABLE STRICT
jbe@529 514 AS '$libdir/latlon-v0001', 'pgl_epoint_to_ebox';
jbe@529 515
jbe@529 516 CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint);
jbe@529 517
jbe@529 518 CREATE FUNCTION cast_epoint_to_ecircle(epoint)
jbe@529 519 RETURNS ecircle
jbe@529 520 LANGUAGE C IMMUTABLE STRICT
jbe@529 521 AS '$libdir/latlon-v0001', 'pgl_epoint_to_ecircle';
jbe@529 522
jbe@529 523 CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint);
jbe@529 524
jbe@529 525 CREATE FUNCTION cast_epoint_to_ecluster(epoint)
jbe@529 526 RETURNS ecluster
jbe@529 527 LANGUAGE C IMMUTABLE STRICT
jbe@529 528 AS '$libdir/latlon-v0001', 'pgl_epoint_to_ecluster';
jbe@529 529
jbe@529 530 CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint);
jbe@529 531
jbe@529 532 CREATE FUNCTION cast_ebox_to_ecluster(ebox)
jbe@529 533 RETURNS ecluster
jbe@529 534 LANGUAGE C IMMUTABLE STRICT
jbe@529 535 AS '$libdir/latlon-v0001', 'pgl_ebox_to_ecluster';
jbe@529 536
jbe@529 537 CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox);
jbe@529 538
jbe@529 539
jbe@529 540 ---------------------------
jbe@529 541 -- constructor functions --
jbe@529 542 ---------------------------
jbe@529 543
jbe@529 544 CREATE FUNCTION epoint(float8, float8)
jbe@529 545 RETURNS epoint
jbe@529 546 LANGUAGE C IMMUTABLE STRICT
jbe@529 547 AS '$libdir/latlon-v0001', 'pgl_create_epoint';
jbe@529 548
jbe@529 549 CREATE FUNCTION epoint_latlon(float8, float8)
jbe@529 550 RETURNS epoint
jbe@529 551 LANGUAGE SQL IMMUTABLE STRICT AS $$
jbe@529 552 SELECT epoint($1, $2)
jbe@529 553 $$;
jbe@529 554
jbe@529 555 CREATE FUNCTION epoint_lonlat(float8, float8)
jbe@529 556 RETURNS epoint
jbe@529 557 LANGUAGE SQL IMMUTABLE STRICT AS $$
jbe@529 558 SELECT epoint($2, $1)
jbe@529 559 $$;
jbe@529 560
jbe@529 561 CREATE FUNCTION empty_ebox()
jbe@529 562 RETURNS ebox
jbe@529 563 LANGUAGE C IMMUTABLE STRICT
jbe@529 564 AS '$libdir/latlon-v0001', 'pgl_create_empty_ebox';
jbe@529 565
jbe@529 566 CREATE FUNCTION ebox(float8, float8, float8, float8)
jbe@529 567 RETURNS ebox
jbe@529 568 LANGUAGE C IMMUTABLE STRICT
jbe@529 569 AS '$libdir/latlon-v0001', 'pgl_create_ebox';
jbe@529 570
jbe@529 571 CREATE FUNCTION ebox(epoint, epoint)
jbe@529 572 RETURNS ebox
jbe@529 573 LANGUAGE C IMMUTABLE STRICT
jbe@529 574 AS '$libdir/latlon-v0001', 'pgl_create_ebox_from_epoints';
jbe@529 575
jbe@529 576 CREATE FUNCTION ecircle(float8, float8, float8)
jbe@529 577 RETURNS ecircle
jbe@529 578 LANGUAGE C IMMUTABLE STRICT
jbe@529 579 AS '$libdir/latlon-v0001', 'pgl_create_ecircle';
jbe@529 580
jbe@529 581 CREATE FUNCTION ecircle(epoint, float8)
jbe@529 582 RETURNS ecircle
jbe@529 583 LANGUAGE C IMMUTABLE STRICT
jbe@529 584 AS '$libdir/latlon-v0001', 'pgl_create_ecircle_from_epoint';
jbe@529 585
jbe@529 586 CREATE FUNCTION ecluster_concat(ecluster[])
jbe@529 587 RETURNS ecluster
jbe@529 588 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 589 SELECT array_to_string($1, ' ')::ecluster
jbe@529 590 $$;
jbe@529 591
jbe@529 592 CREATE FUNCTION ecluster_concat(ecluster, ecluster)
jbe@529 593 RETURNS ecluster
jbe@529 594 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 595 SELECT ($1::text || ' ' || $2::text)::ecluster
jbe@529 596 $$;
jbe@529 597
jbe@529 598 CREATE FUNCTION ecluster_create_multipoint(epoint[])
jbe@529 599 RETURNS ecluster
jbe@529 600 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 601 SELECT
jbe@529 602 array_to_string(array_agg('point (' || unnest || ')'), ' ')::ecluster
jbe@529 603 FROM unnest($1)
jbe@529 604 $$;
jbe@529 605
jbe@529 606 CREATE FUNCTION ecluster_create_path(epoint[])
jbe@529 607 RETURNS ecluster
jbe@529 608 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 609 SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE
jbe@529 610 ('path (' || array_to_string($1, ' ') || ')')::ecluster
jbe@529 611 END
jbe@529 612 FROM array_to_string($1, ' ') AS "str"
jbe@529 613 $$;
jbe@529 614
jbe@529 615 CREATE FUNCTION ecluster_create_outline(epoint[])
jbe@529 616 RETURNS ecluster
jbe@529 617 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 618 SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE
jbe@529 619 ('outline (' || array_to_string($1, ' ') || ')')::ecluster
jbe@529 620 END
jbe@529 621 FROM array_to_string($1, ' ') AS "str"
jbe@529 622 $$;
jbe@529 623
jbe@529 624 CREATE FUNCTION ecluster_create_polygon(epoint[])
jbe@529 625 RETURNS ecluster
jbe@529 626 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 627 SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE
jbe@529 628 ('polygon (' || array_to_string($1, ' ') || ')')::ecluster
jbe@529 629 END
jbe@529 630 FROM array_to_string($1, ' ') AS "str"
jbe@529 631 $$;
jbe@529 632
jbe@529 633
jbe@529 634 ----------------------
jbe@529 635 -- getter functions --
jbe@529 636 ----------------------
jbe@529 637
jbe@529 638 CREATE FUNCTION latitude(epoint)
jbe@529 639 RETURNS float8
jbe@529 640 LANGUAGE C IMMUTABLE STRICT
jbe@529 641 AS '$libdir/latlon-v0001', 'pgl_epoint_lat';
jbe@529 642
jbe@529 643 CREATE FUNCTION longitude(epoint)
jbe@529 644 RETURNS float8
jbe@529 645 LANGUAGE C IMMUTABLE STRICT
jbe@529 646 AS '$libdir/latlon-v0001', 'pgl_epoint_lon';
jbe@529 647
jbe@529 648 CREATE FUNCTION min_latitude(ebox)
jbe@529 649 RETURNS float8
jbe@529 650 LANGUAGE C IMMUTABLE STRICT
jbe@529 651 AS '$libdir/latlon-v0001', 'pgl_ebox_lat_min';
jbe@529 652
jbe@529 653 CREATE FUNCTION max_latitude(ebox)
jbe@529 654 RETURNS float8
jbe@529 655 LANGUAGE C IMMUTABLE STRICT
jbe@529 656 AS '$libdir/latlon-v0001', 'pgl_ebox_lat_max';
jbe@529 657
jbe@529 658 CREATE FUNCTION min_longitude(ebox)
jbe@529 659 RETURNS float8
jbe@529 660 LANGUAGE C IMMUTABLE STRICT
jbe@529 661 AS '$libdir/latlon-v0001', 'pgl_ebox_lon_min';
jbe@529 662
jbe@529 663 CREATE FUNCTION max_longitude(ebox)
jbe@529 664 RETURNS float8
jbe@529 665 LANGUAGE C IMMUTABLE STRICT
jbe@529 666 AS '$libdir/latlon-v0001', 'pgl_ebox_lon_max';
jbe@529 667
jbe@529 668 CREATE FUNCTION center(ecircle)
jbe@529 669 RETURNS epoint
jbe@529 670 LANGUAGE C IMMUTABLE STRICT
jbe@529 671 AS '$libdir/latlon-v0001', 'pgl_ecircle_center';
jbe@529 672
jbe@529 673 CREATE FUNCTION radius(ecircle)
jbe@529 674 RETURNS float8
jbe@529 675 LANGUAGE C IMMUTABLE STRICT
jbe@529 676 AS '$libdir/latlon-v0001', 'pgl_ecircle_radius';
jbe@529 677
jbe@529 678 CREATE FUNCTION ecluster_extract_points(ecluster)
jbe@529 679 RETURNS SETOF epoint
jbe@529 680 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 681 SELECT "match"[2]::epoint
jbe@529 682 FROM regexp_matches($1::text, e'(^| )point \\(([^)]+)\\)', 'g') AS "match"
jbe@529 683 $$;
jbe@529 684
jbe@529 685 CREATE FUNCTION ecluster_extract_paths(ecluster)
jbe@529 686 RETURNS SETOF epoint[]
jbe@529 687 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 688 SELECT (
jbe@529 689 SELECT array_agg("m2"[1]::epoint)
jbe@529 690 FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
jbe@529 691 )
jbe@529 692 FROM regexp_matches($1::text, e'(^| )path \\(([^)]+)\\)', 'g') AS "m1"
jbe@529 693 $$;
jbe@529 694
jbe@529 695 CREATE FUNCTION ecluster_extract_outlines(ecluster)
jbe@529 696 RETURNS SETOF epoint[]
jbe@529 697 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 698 SELECT (
jbe@529 699 SELECT array_agg("m2"[1]::epoint)
jbe@529 700 FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
jbe@529 701 )
jbe@529 702 FROM regexp_matches($1::text, e'(^| )outline \\(([^)]+)\\)', 'g') AS "m1"
jbe@529 703 $$;
jbe@529 704
jbe@529 705 CREATE FUNCTION ecluster_extract_polygons(ecluster)
jbe@529 706 RETURNS SETOF epoint[]
jbe@529 707 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 708 SELECT (
jbe@529 709 SELECT array_agg("m2"[1]::epoint)
jbe@529 710 FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
jbe@529 711 )
jbe@529 712 FROM regexp_matches($1::text, e'(^| )polygon \\(([^)]+)\\)', 'g') AS "m1"
jbe@529 713 $$;
jbe@529 714
jbe@529 715
jbe@529 716 ---------------
jbe@529 717 -- operators --
jbe@529 718 ---------------
jbe@529 719
jbe@529 720 CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox)
jbe@529 721 RETURNS boolean
jbe@529 722 LANGUAGE C IMMUTABLE STRICT
jbe@529 723 AS '$libdir/latlon-v0001', 'pgl_epoint_ebox_overlap';
jbe@529 724
jbe@529 725 CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle)
jbe@529 726 RETURNS boolean
jbe@529 727 LANGUAGE C IMMUTABLE STRICT
jbe@529 728 AS '$libdir/latlon-v0001', 'pgl_epoint_ecircle_overlap';
jbe@529 729
jbe@529 730 CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster)
jbe@529 731 RETURNS boolean
jbe@529 732 LANGUAGE C IMMUTABLE STRICT
jbe@529 733 AS '$libdir/latlon-v0001', 'pgl_epoint_ecluster_overlap';
jbe@529 734
jbe@529 735 CREATE FUNCTION ebox_overlap_proc(ebox, ebox)
jbe@529 736 RETURNS boolean
jbe@529 737 LANGUAGE C IMMUTABLE STRICT
jbe@529 738 AS '$libdir/latlon-v0001', 'pgl_ebox_overlap';
jbe@529 739
jbe@529 740 CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle)
jbe@529 741 RETURNS boolean
jbe@529 742 LANGUAGE C IMMUTABLE STRICT
jbe@529 743 AS '$libdir/latlon-v0001', 'pgl_ecircle_overlap';
jbe@529 744
jbe@529 745 CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster)
jbe@529 746 RETURNS boolean
jbe@529 747 LANGUAGE C IMMUTABLE STRICT
jbe@529 748 AS '$libdir/latlon-v0001', 'pgl_ecircle_ecluster_overlap';
jbe@529 749
jbe@529 750 CREATE FUNCTION epoint_distance_proc(epoint, epoint)
jbe@529 751 RETURNS float8
jbe@529 752 LANGUAGE C IMMUTABLE STRICT
jbe@529 753 AS '$libdir/latlon-v0001', 'pgl_epoint_distance';
jbe@529 754
jbe@529 755 CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle)
jbe@529 756 RETURNS float8
jbe@529 757 LANGUAGE C IMMUTABLE STRICT
jbe@529 758 AS '$libdir/latlon-v0001', 'pgl_epoint_ecircle_distance';
jbe@529 759
jbe@529 760 CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster)
jbe@529 761 RETURNS float8
jbe@529 762 LANGUAGE C IMMUTABLE STRICT
jbe@529 763 AS '$libdir/latlon-v0001', 'pgl_epoint_ecluster_distance';
jbe@529 764
jbe@529 765 CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle)
jbe@529 766 RETURNS float8
jbe@529 767 LANGUAGE C IMMUTABLE STRICT
jbe@529 768 AS '$libdir/latlon-v0001', 'pgl_ecircle_distance';
jbe@529 769
jbe@529 770 CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster)
jbe@529 771 RETURNS float8
jbe@529 772 LANGUAGE C IMMUTABLE STRICT
jbe@529 773 AS '$libdir/latlon-v0001', 'pgl_ecircle_ecluster_distance';
jbe@529 774
jbe@529 775 CREATE OPERATOR && (
jbe@529 776 leftarg = epoint,
jbe@529 777 rightarg = ebox,
jbe@529 778 procedure = epoint_ebox_overlap_proc,
jbe@529 779 commutator = &&,
jbe@529 780 restrict = areasel,
jbe@529 781 join = areajoinsel
jbe@529 782 );
jbe@529 783
jbe@529 784 CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint)
jbe@529 785 RETURNS boolean
jbe@529 786 LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1';
jbe@529 787
jbe@529 788 CREATE OPERATOR && (
jbe@529 789 leftarg = ebox,
jbe@529 790 rightarg = epoint,
jbe@529 791 procedure = epoint_ebox_overlap_commutator,
jbe@529 792 commutator = &&,
jbe@529 793 restrict = areasel,
jbe@529 794 join = areajoinsel
jbe@529 795 );
jbe@529 796
jbe@529 797 CREATE OPERATOR && (
jbe@529 798 leftarg = epoint,
jbe@529 799 rightarg = ecircle,
jbe@529 800 procedure = epoint_ecircle_overlap_proc,
jbe@529 801 commutator = &&,
jbe@529 802 restrict = areasel,
jbe@529 803 join = areajoinsel
jbe@529 804 );
jbe@529 805
jbe@529 806 CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint)
jbe@529 807 RETURNS boolean
jbe@529 808 LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1';
jbe@529 809
jbe@529 810 CREATE OPERATOR && (
jbe@529 811 leftarg = ecircle,
jbe@529 812 rightarg = epoint,
jbe@529 813 procedure = epoint_ecircle_overlap_commutator,
jbe@529 814 commutator = &&,
jbe@529 815 restrict = areasel,
jbe@529 816 join = areajoinsel
jbe@529 817 );
jbe@529 818
jbe@529 819 CREATE OPERATOR && (
jbe@529 820 leftarg = epoint,
jbe@529 821 rightarg = ecluster,
jbe@529 822 procedure = epoint_ecluster_overlap_proc,
jbe@529 823 commutator = &&,
jbe@529 824 restrict = areasel,
jbe@529 825 join = areajoinsel
jbe@529 826 );
jbe@529 827
jbe@529 828 CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint)
jbe@529 829 RETURNS boolean
jbe@529 830 LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1';
jbe@529 831
jbe@529 832 CREATE OPERATOR && (
jbe@529 833 leftarg = ecluster,
jbe@529 834 rightarg = epoint,
jbe@529 835 procedure = epoint_ecluster_overlap_commutator,
jbe@529 836 commutator = &&,
jbe@529 837 restrict = areasel,
jbe@529 838 join = areajoinsel
jbe@529 839 );
jbe@529 840
jbe@529 841 CREATE OPERATOR && (
jbe@529 842 leftarg = ebox,
jbe@529 843 rightarg = ebox,
jbe@529 844 procedure = ebox_overlap_proc,
jbe@529 845 commutator = &&,
jbe@529 846 restrict = areasel,
jbe@529 847 join = areajoinsel
jbe@529 848 );
jbe@529 849
jbe@529 850 CREATE OPERATOR && (
jbe@529 851 leftarg = ecircle,
jbe@529 852 rightarg = ecircle,
jbe@529 853 procedure = ecircle_overlap_proc,
jbe@529 854 commutator = &&,
jbe@529 855 restrict = areasel,
jbe@529 856 join = areajoinsel
jbe@529 857 );
jbe@529 858
jbe@529 859 CREATE OPERATOR && (
jbe@529 860 leftarg = ecircle,
jbe@529 861 rightarg = ecluster,
jbe@529 862 procedure = ecircle_ecluster_overlap_proc,
jbe@529 863 commutator = &&,
jbe@529 864 restrict = areasel,
jbe@529 865 join = areajoinsel
jbe@529 866 );
jbe@529 867
jbe@529 868 CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle)
jbe@529 869 RETURNS boolean
jbe@529 870 LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1';
jbe@529 871
jbe@529 872 CREATE OPERATOR && (
jbe@529 873 leftarg = ecluster,
jbe@529 874 rightarg = ecircle,
jbe@529 875 procedure = ecircle_ecluster_overlap_commutator,
jbe@529 876 commutator = &&,
jbe@529 877 restrict = areasel,
jbe@529 878 join = areajoinsel
jbe@529 879 );
jbe@529 880
jbe@529 881 CREATE OPERATOR <-> (
jbe@529 882 leftarg = epoint,
jbe@529 883 rightarg = epoint,
jbe@529 884 procedure = epoint_distance_proc,
jbe@529 885 commutator = <->
jbe@529 886 );
jbe@529 887
jbe@529 888 CREATE OPERATOR <-> (
jbe@529 889 leftarg = epoint,
jbe@529 890 rightarg = ecircle,
jbe@529 891 procedure = epoint_ecircle_distance_proc,
jbe@529 892 commutator = <->
jbe@529 893 );
jbe@529 894
jbe@529 895 CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint)
jbe@529 896 RETURNS float8
jbe@529 897 LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1';
jbe@529 898
jbe@529 899 CREATE OPERATOR <-> (
jbe@529 900 leftarg = ecircle,
jbe@529 901 rightarg = epoint,
jbe@529 902 procedure = epoint_ecircle_distance_commutator,
jbe@529 903 commutator = <->
jbe@529 904 );
jbe@529 905
jbe@529 906 CREATE OPERATOR <-> (
jbe@529 907 leftarg = epoint,
jbe@529 908 rightarg = ecluster,
jbe@529 909 procedure = epoint_ecluster_distance_proc,
jbe@529 910 commutator = <->
jbe@529 911 );
jbe@529 912
jbe@529 913 CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint)
jbe@529 914 RETURNS float8
jbe@529 915 LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1';
jbe@529 916
jbe@529 917 CREATE OPERATOR <-> (
jbe@529 918 leftarg = ecluster,
jbe@529 919 rightarg = epoint,
jbe@529 920 procedure = epoint_ecluster_distance_commutator,
jbe@529 921 commutator = <->
jbe@529 922 );
jbe@529 923
jbe@529 924 CREATE OPERATOR <-> (
jbe@529 925 leftarg = ecircle,
jbe@529 926 rightarg = ecircle,
jbe@529 927 procedure = ecircle_distance_proc,
jbe@529 928 commutator = <->
jbe@529 929 );
jbe@529 930
jbe@529 931 CREATE OPERATOR <-> (
jbe@529 932 leftarg = ecircle,
jbe@529 933 rightarg = ecluster,
jbe@529 934 procedure = ecircle_ecluster_distance_proc,
jbe@529 935 commutator = <->
jbe@529 936 );
jbe@529 937
jbe@529 938 CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle)
jbe@529 939 RETURNS float8
jbe@529 940 LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1';
jbe@529 941
jbe@529 942 CREATE OPERATOR <-> (
jbe@529 943 leftarg = ecluster,
jbe@529 944 rightarg = ecircle,
jbe@529 945 procedure = ecircle_ecluster_distance_commutator,
jbe@529 946 commutator = <->
jbe@529 947 );
jbe@529 948
jbe@529 949
jbe@529 950 ----------------
jbe@529 951 -- GiST index --
jbe@529 952 ----------------
jbe@529 953
jbe@529 954 CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal)
jbe@529 955 RETURNS boolean
jbe@529 956 LANGUAGE C STRICT
jbe@529 957 AS '$libdir/latlon-v0001', 'pgl_gist_consistent';
jbe@529 958
jbe@529 959 CREATE FUNCTION pgl_gist_union(internal, internal)
jbe@529 960 RETURNS internal
jbe@529 961 LANGUAGE C STRICT
jbe@529 962 AS '$libdir/latlon-v0001', 'pgl_gist_union';
jbe@529 963
jbe@529 964 CREATE FUNCTION pgl_gist_compress_epoint(internal)
jbe@529 965 RETURNS internal
jbe@529 966 LANGUAGE C STRICT
jbe@529 967 AS '$libdir/latlon-v0001', 'pgl_gist_compress_epoint';
jbe@529 968
jbe@529 969 CREATE FUNCTION pgl_gist_compress_ecircle(internal)
jbe@529 970 RETURNS internal
jbe@529 971 LANGUAGE C STRICT
jbe@529 972 AS '$libdir/latlon-v0001', 'pgl_gist_compress_ecircle';
jbe@529 973
jbe@529 974 CREATE FUNCTION pgl_gist_compress_ecluster(internal)
jbe@529 975 RETURNS internal
jbe@529 976 LANGUAGE C STRICT
jbe@529 977 AS '$libdir/latlon-v0001', 'pgl_gist_compress_ecluster';
jbe@529 978
jbe@529 979 CREATE FUNCTION pgl_gist_decompress(internal)
jbe@529 980 RETURNS internal
jbe@529 981 LANGUAGE C STRICT
jbe@529 982 AS '$libdir/latlon-v0001', 'pgl_gist_decompress';
jbe@529 983
jbe@529 984 CREATE FUNCTION pgl_gist_penalty(internal, internal, internal)
jbe@529 985 RETURNS internal
jbe@529 986 LANGUAGE C STRICT
jbe@529 987 AS '$libdir/latlon-v0001', 'pgl_gist_penalty';
jbe@529 988
jbe@529 989 CREATE FUNCTION pgl_gist_picksplit(internal, internal)
jbe@529 990 RETURNS internal
jbe@529 991 LANGUAGE C STRICT
jbe@529 992 AS '$libdir/latlon-v0001', 'pgl_gist_picksplit';
jbe@529 993
jbe@529 994 CREATE FUNCTION pgl_gist_same(internal, internal, internal)
jbe@529 995 RETURNS internal
jbe@529 996 LANGUAGE C STRICT
jbe@529 997 AS '$libdir/latlon-v0001', 'pgl_gist_same';
jbe@529 998
jbe@529 999 CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid)
jbe@529 1000 RETURNS internal
jbe@529 1001 LANGUAGE C STRICT
jbe@529 1002 AS '$libdir/latlon-v0001', 'pgl_gist_distance';
jbe@529 1003
jbe@529 1004 CREATE OPERATOR CLASS epoint_ops
jbe@529 1005 DEFAULT FOR TYPE epoint USING gist AS
jbe@529 1006 OPERATOR 11 = ,
jbe@529 1007 OPERATOR 22 && (epoint, ebox),
jbe@529 1008 OPERATOR 23 && (epoint, ecircle),
jbe@529 1009 OPERATOR 24 && (epoint, ecluster),
jbe@529 1010 OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops,
jbe@529 1011 OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops,
jbe@529 1012 OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops,
jbe@529 1013 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal),
jbe@529 1014 FUNCTION 2 pgl_gist_union(internal, internal),
jbe@529 1015 FUNCTION 3 pgl_gist_compress_epoint(internal),
jbe@529 1016 FUNCTION 4 pgl_gist_decompress(internal),
jbe@529 1017 FUNCTION 5 pgl_gist_penalty(internal, internal, internal),
jbe@529 1018 FUNCTION 6 pgl_gist_picksplit(internal, internal),
jbe@529 1019 FUNCTION 7 pgl_gist_same(internal, internal, internal),
jbe@529 1020 FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid),
jbe@529 1021 STORAGE ekey_point;
jbe@529 1022
jbe@529 1023 CREATE OPERATOR CLASS ecircle_ops
jbe@529 1024 DEFAULT FOR TYPE ecircle USING gist AS
jbe@529 1025 OPERATOR 13 = ,
jbe@529 1026 OPERATOR 21 && (ecircle, epoint),
jbe@529 1027 OPERATOR 23 && (ecircle, ecircle),
jbe@529 1028 OPERATOR 24 && (ecircle, ecluster),
jbe@529 1029 OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops,
jbe@529 1030 OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops,
jbe@529 1031 OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops,
jbe@529 1032 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal),
jbe@529 1033 FUNCTION 2 pgl_gist_union(internal, internal),
jbe@529 1034 FUNCTION 3 pgl_gist_compress_ecircle(internal),
jbe@529 1035 FUNCTION 4 pgl_gist_decompress(internal),
jbe@529 1036 FUNCTION 5 pgl_gist_penalty(internal, internal, internal),
jbe@529 1037 FUNCTION 6 pgl_gist_picksplit(internal, internal),
jbe@529 1038 FUNCTION 7 pgl_gist_same(internal, internal, internal),
jbe@529 1039 FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid),
jbe@529 1040 STORAGE ekey_area;
jbe@529 1041
jbe@529 1042 CREATE OPERATOR CLASS ecluster_ops
jbe@529 1043 DEFAULT FOR TYPE ecluster USING gist AS
jbe@529 1044 OPERATOR 21 && (ecluster, epoint),
jbe@529 1045 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal),
jbe@529 1046 FUNCTION 2 pgl_gist_union(internal, internal),
jbe@529 1047 FUNCTION 3 pgl_gist_compress_ecluster(internal),
jbe@529 1048 FUNCTION 4 pgl_gist_decompress(internal),
jbe@529 1049 FUNCTION 5 pgl_gist_penalty(internal, internal, internal),
jbe@529 1050 FUNCTION 6 pgl_gist_picksplit(internal, internal),
jbe@529 1051 FUNCTION 7 pgl_gist_same(internal, internal, internal),
jbe@529 1052 FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid),
jbe@529 1053 STORAGE ekey_area;
jbe@529 1054
jbe@529 1055
jbe@529 1056 ---------------------
jbe@529 1057 -- alias functions --
jbe@529 1058 ---------------------
jbe@529 1059
jbe@529 1060 CREATE FUNCTION distance(epoint, epoint)
jbe@529 1061 RETURNS float8
jbe@529 1062 LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2';
jbe@529 1063
jbe@529 1064 CREATE FUNCTION distance(ecluster, epoint)
jbe@529 1065 RETURNS float8
jbe@529 1066 LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2';
jbe@529 1067
jbe@529 1068 CREATE FUNCTION distance_within(epoint, epoint, float8)
jbe@529 1069 RETURNS boolean
jbe@529 1070 LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)';
jbe@529 1071
jbe@529 1072 CREATE FUNCTION distance_within(ecluster, epoint, float8)
jbe@529 1073 RETURNS boolean
jbe@529 1074 LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)';
jbe@529 1075
jbe@529 1076
jbe@529 1077 --------------------------------
jbe@529 1078 -- other data storage formats --
jbe@529 1079 --------------------------------
jbe@529 1080
jbe@529 1081 CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint_lonlat')
jbe@529 1082 RETURNS epoint
jbe@529 1083 LANGUAGE plpgsql IMMUTABLE STRICT AS $$
jbe@529 1084 DECLARE
jbe@529 1085 "result" epoint;
jbe@529 1086 BEGIN
jbe@529 1087 IF $3 = 'epoint_lonlat' THEN
jbe@529 1088 -- avoid dynamic command execution for better performance
jbe@529 1089 RETURN epoint($2, $1);
jbe@529 1090 END IF;
jbe@529 1091 IF $3 = 'epoint' OR $3 = 'epoint_latlon' THEN
jbe@529 1092 -- avoid dynamic command execution for better performance
jbe@529 1093 RETURN epoint($1, $2);
jbe@529 1094 END IF;
jbe@529 1095 EXECUTE 'SELECT ' || $3 || '($1, $2)' INTO STRICT "result" USING $1, $2;
jbe@529 1096 RETURN "result";
jbe@529 1097 END;
jbe@529 1098 $$;
jbe@529 1099
jbe@529 1100 CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat')
jbe@529 1101 RETURNS epoint
jbe@529 1102 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 1103 SELECT CASE
jbe@529 1104 WHEN $1->>'type' = 'Point' THEN
jbe@529 1105 coords_to_epoint(
jbe@529 1106 ($1->'coordinates'->>1)::float8,
jbe@529 1107 ($1->'coordinates'->>0)::float8,
jbe@529 1108 $2
jbe@529 1109 )
jbe@529 1110 WHEN $1->>'type' = 'Feature' THEN
jbe@529 1111 GeoJSON_to_epoint($1->'geometry', $2)
jbe@529 1112 ELSE
jbe@529 1113 NULL
jbe@529 1114 END
jbe@529 1115 $$;
jbe@529 1116
jbe@529 1117 CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat')
jbe@529 1118 RETURNS ecluster
jbe@529 1119 LANGUAGE sql IMMUTABLE STRICT AS $$
jbe@529 1120 SELECT CASE $1->>'type'
jbe@529 1121 WHEN 'Point' THEN
jbe@529 1122 coords_to_epoint(
jbe@529 1123 ($1->'coordinates'->>1)::float8,
jbe@529 1124 ($1->'coordinates'->>0)::float8,
jbe@529 1125 $2
jbe@529 1126 )::ecluster
jbe@529 1127 WHEN 'MultiPoint' THEN
jbe@529 1128 ( SELECT ecluster_create_multipoint(array_agg(
jbe@529 1129 coords_to_epoint(
jbe@529 1130 ("coord"->>1)::float8,
jbe@529 1131 ("coord"->>0)::float8,
jbe@529 1132 $2
jbe@529 1133 )
jbe@529 1134 ))
jbe@529 1135 FROM jsonb_array_elements($1->'coordinates') AS "coord"
jbe@529 1136 )
jbe@529 1137 WHEN 'LineString' THEN
jbe@529 1138 ( SELECT ecluster_create_path(array_agg(
jbe@529 1139 coords_to_epoint(
jbe@529 1140 ("coord"->>1)::float8,
jbe@529 1141 ("coord"->>0)::float8,
jbe@529 1142 $2
jbe@529 1143 )
jbe@529 1144 ))
jbe@529 1145 FROM jsonb_array_elements($1->'coordinates') AS "coord"
jbe@529 1146 )
jbe@529 1147 WHEN 'MultiLineString' THEN
jbe@529 1148 ( SELECT ecluster_concat(array_agg(
jbe@529 1149 ( SELECT ecluster_create_path(array_agg(
jbe@529 1150 coords_to_epoint(
jbe@529 1151 ("coord"->>1)::float8,
jbe@529 1152 ("coord"->>0)::float8,
jbe@529 1153 $2
jbe@529 1154 )
jbe@529 1155 ))
jbe@529 1156 FROM jsonb_array_elements("coord_array") AS "coord"
jbe@529 1157 )
jbe@529 1158 ))
jbe@529 1159 FROM jsonb_array_elements($1->'coordinates') AS "coord_array"
jbe@529 1160 )
jbe@529 1161 WHEN 'Polygon' THEN
jbe@529 1162 ( SELECT ecluster_concat(array_agg(
jbe@529 1163 ( SELECT ecluster_create_polygon(array_agg(
jbe@529 1164 coords_to_epoint(
jbe@529 1165 ("coord"->>1)::float8,
jbe@529 1166 ("coord"->>0)::float8,
jbe@529 1167 $2
jbe@529 1168 )
jbe@529 1169 ))
jbe@529 1170 FROM jsonb_array_elements("coord_array") AS "coord"
jbe@529 1171 )
jbe@529 1172 ))
jbe@529 1173 FROM jsonb_array_elements($1->'coordinates') AS "coord_array"
jbe@529 1174 )
jbe@529 1175 WHEN 'MultiPolygon' THEN
jbe@529 1176 ( SELECT ecluster_concat(array_agg(
jbe@529 1177 ( SELECT ecluster_concat(array_agg(
jbe@529 1178 ( SELECT ecluster_create_polygon(array_agg(
jbe@529 1179 coords_to_epoint(
jbe@529 1180 ("coord"->>1)::float8,
jbe@529 1181 ("coord"->>0)::float8,
jbe@529 1182 $2
jbe@529 1183 )
jbe@529 1184 ))
jbe@529 1185 FROM jsonb_array_elements("coord_array") AS "coord"
jbe@529 1186 )
jbe@529 1187 ))
jbe@529 1188 FROM jsonb_array_elements("coord_array_array") AS "coord_array"
jbe@529 1189 )
jbe@529 1190 ))
jbe@529 1191 FROM jsonb_array_elements($1->'coordinates') AS "coord_array_array"
jbe@529 1192 )
jbe@529 1193 WHEN 'Feature' THEN
jbe@529 1194 GeoJSON_to_ecluster($1->'geometry', $2)
jbe@529 1195 WHEN 'FeatureCollection' THEN
jbe@529 1196 ( SELECT ecluster_concat(array_agg(
jbe@529 1197 GeoJSON_to_ecluster("feature", $2)
jbe@529 1198 ))
jbe@529 1199 FROM jsonb_array_elements($1->'features') AS "feature"
jbe@529 1200 )
jbe@529 1201 ELSE
jbe@529 1202 NULL
jbe@529 1203 END
jbe@529 1204 $$;
jbe@529 1205

Impressum / About Us