1-- **************************** 2-- 3-- spherical circle functions 4-- 5-- **************************** 6 7 8CREATE FUNCTION area(scircle) 9 RETURNS FLOAT8 10 AS 'MODULE_PATHNAME', 'spherecircle_area' 11 LANGUAGE 'c' 12 IMMUTABLE STRICT; 13 14COMMENT ON FUNCTION area(scircle) IS 15 'area of spherical circle'; 16 17CREATE FUNCTION radius(scircle) 18 RETURNS FLOAT8 19 AS 'MODULE_PATHNAME', 'spherecircle_radius' 20 LANGUAGE 'c' 21 IMMUTABLE STRICT; 22 23COMMENT ON FUNCTION radius(scircle) IS 24 'radius of spherical circle'; 25 26CREATE FUNCTION scircle(spoint, float8) 27 RETURNS scircle 28 AS 'MODULE_PATHNAME' , 'spherecircle_by_center' 29 LANGUAGE 'c' 30 IMMUTABLE STRICT; 31 32COMMENT ON FUNCTION scircle(spoint, float8) IS 33 'spherical circle with spherical point as center and float8 as radius in radians'; 34 35 36-- 37-- Casting point as circle 38-- 39 40CREATE FUNCTION scircle(spoint) 41 RETURNS scircle 42 AS 'MODULE_PATHNAME' , 'spherepoint_to_circle' 43 LANGUAGE 'c' 44 IMMUTABLE STRICT; 45 46COMMENT ON FUNCTION scircle(spoint) IS 47 'spherical circle with radius 0 and spherical point as center'; 48 49CREATE CAST (spoint AS scircle) 50 WITH FUNCTION scircle(spoint) 51 AS IMPLICIT; 52 53 54-- ************************** 55-- 56-- spherical circle operators 57-- 58-- ************************** 59 60 61-- 62-- equal 63-- 64 65CREATE FUNCTION scircle_equal(scircle, scircle) 66 RETURNS BOOL 67 AS 'MODULE_PATHNAME' , 'spherecircle_equal' 68 LANGUAGE 'c' 69 IMMUTABLE STRICT; 70 71COMMENT ON FUNCTION scircle_equal(scircle, scircle) IS 72 'returns true, if spherical circles are equal'; 73 74CREATE OPERATOR = ( 75 LEFTARG = scircle, 76 RIGHTARG = scircle, 77 COMMUTATOR = = , 78 NEGATOR = <>, 79 PROCEDURE = scircle_equal, 80 RESTRICT = contsel, 81 JOIN = contjoinsel 82); 83 84COMMENT ON OPERATOR = (scircle, scircle) IS 85 'true, if spherical circles are equal'; 86 87 88-- 89-- not equal 90-- 91 92CREATE FUNCTION scircle_equal_neg(scircle, scircle) 93 RETURNS BOOL 94 AS 'MODULE_PATHNAME' , 'spherecircle_equal_neg' 95 LANGUAGE 'c' 96 IMMUTABLE STRICT; 97 98COMMENT ON FUNCTION scircle_equal_neg(scircle, scircle) IS 99 'returns true, if spherical circles are not equal'; 100 101CREATE OPERATOR <> ( 102 LEFTARG = scircle, 103 RIGHTARG = scircle, 104 COMMUTATOR = <>, 105 NEGATOR = = , 106 PROCEDURE = scircle_equal_neg, 107 RESTRICT = contsel, 108 JOIN = contjoinsel 109); 110 111COMMENT ON OPERATOR <> (scircle, scircle) IS 112 'true, if spherical circles are not equal'; 113 114-- 115-- overlap 116-- 117 118CREATE FUNCTION scircle_overlap(scircle, scircle) 119 RETURNS BOOL 120 AS 'MODULE_PATHNAME' , 'spherecircle_overlap' 121 LANGUAGE 'c' 122 IMMUTABLE STRICT; 123 124COMMENT ON FUNCTION scircle_overlap(scircle, scircle) IS 125 'true if spherical circles overlap'; 126 127CREATE OPERATOR && ( 128 LEFTARG = scircle, 129 RIGHTARG = scircle, 130 PROCEDURE = scircle_overlap, 131 COMMUTATOR = '&&', 132 NEGATOR = '!&&', 133 RESTRICT = contsel, 134 JOIN = contjoinsel 135); 136 137COMMENT ON OPERATOR && (scircle, scircle) IS 138 'true if spherical circles overlap'; 139 140-- 141-- not overlap 142-- 143 144CREATE FUNCTION scircle_overlap_neg(scircle, scircle) 145 RETURNS BOOL 146 AS 'MODULE_PATHNAME' , 'spherecircle_overlap_neg' 147 LANGUAGE 'c' 148 IMMUTABLE STRICT; 149 150COMMENT ON FUNCTION scircle_overlap_neg(scircle, scircle) IS 151 'true if spherical circles do not overlap'; 152 153CREATE OPERATOR !&& ( 154 LEFTARG = scircle, 155 RIGHTARG = scircle, 156 PROCEDURE = scircle_overlap_neg, 157 COMMUTATOR = '!&&', 158 NEGATOR = '&&', 159 RESTRICT = contsel, 160 JOIN = contjoinsel 161); 162 163COMMENT ON OPERATOR !&& (scircle, scircle) IS 164 'true if spherical circles do not overlap'; 165 166-- 167-- center of circle 168-- 169 170 171CREATE FUNCTION center(scircle) 172 RETURNS spoint 173 AS 'MODULE_PATHNAME' , 'spherecircle_center' 174 LANGUAGE 'c' 175 IMMUTABLE STRICT; 176 177COMMENT ON FUNCTION center(scircle) IS 178 'center of spherical circle'; 179 180CREATE OPERATOR @@ ( 181 RIGHTARG = scircle, 182 PROCEDURE = center 183); 184 185COMMENT ON OPERATOR @@ (NONE , scircle) IS 186 'center of spherical circle'; 187 188 189-- 190-- circumference 191-- 192 193CREATE FUNCTION circum(scircle) 194 RETURNS FLOAT8 195 AS 'MODULE_PATHNAME', 'spherecircle_circ' 196 LANGUAGE 'c' 197 IMMUTABLE STRICT; 198 199COMMENT ON FUNCTION circum(scircle) IS 200 'circumference of spherical circle'; 201 202CREATE OPERATOR @-@ ( 203 RIGHTARG = scircle, 204 PROCEDURE = circum 205); 206 207COMMENT ON OPERATOR @-@ (NONE , scircle) IS 208 'circumference of spherical circle'; 209 210 211-- 212-- circle is contained by circle 213-- 214 215CREATE FUNCTION scircle_contained_by_circle(scircle, scircle) 216 RETURNS BOOL 217 AS 'MODULE_PATHNAME' , 'spherecircle_in_circle' 218 LANGUAGE 'c' 219 IMMUTABLE STRICT; 220 221COMMENT ON FUNCTION scircle_contained_by_circle(scircle, scircle) IS 222 'true if spherical circle is contained by spherical circle'; 223 224-- 225-- circle is not contained by circle 226-- 227 228CREATE FUNCTION scircle_contained_by_circle_neg (scircle, scircle) 229 RETURNS BOOL 230 AS 'MODULE_PATHNAME' , 'spherecircle_in_circle_neg' 231 LANGUAGE 'c' 232 IMMUTABLE STRICT; 233 234COMMENT ON FUNCTION scircle_contained_by_circle_neg (scircle, scircle) IS 235 'true if spherical circle is not contained by spherical circle'; 236 237-- 238-- circle contains circle 239-- 240 241CREATE FUNCTION scircle_contains_circle (scircle, scircle) 242 RETURNS BOOL 243 AS 'MODULE_PATHNAME' , 'spherecircle_in_circle_com' 244 LANGUAGE 'c' 245 IMMUTABLE STRICT; 246 247COMMENT ON FUNCTION scircle_contains_circle (scircle, scircle) IS 248 'true if spherical circle contains spherical circle'; 249 250-- 251-- circle does not contain circle 252-- 253 254CREATE FUNCTION scircle_contains_circle_neg (scircle, scircle) 255 RETURNS BOOL 256 AS 'MODULE_PATHNAME' , 'spherecircle_in_circle_com_neg' 257 LANGUAGE 'c' 258 IMMUTABLE STRICT; 259 260COMMENT ON FUNCTION scircle_contains_circle_neg (scircle, scircle) IS 261 'true if spherical circle does not contain spherical circle'; 262 263-- 264-- point is contained by circle 265-- 266 267CREATE FUNCTION spoint_contained_by_circle(spoint, scircle) 268 RETURNS BOOL 269 AS 'MODULE_PATHNAME' , 'spherepoint_in_circle' 270 LANGUAGE 'c' 271 IMMUTABLE STRICT; 272 273COMMENT ON FUNCTION spoint_contained_by_circle(spoint, scircle) IS 274 'true if spherical point is contained by spherical circle'; 275 276 277-- 278-- point is not contained by circle 279-- 280 281CREATE FUNCTION spoint_contained_by_circle_neg(spoint, scircle) 282 RETURNS BOOL 283 AS 'MODULE_PATHNAME' , 'spherepoint_in_circle_neg' 284 LANGUAGE 'c' 285 IMMUTABLE STRICT; 286 287COMMENT ON FUNCTION spoint_contained_by_circle_neg (spoint, scircle) IS 288 'true if spherical point is not contained by spherical circle '; 289 290 291-- 292-- circle contains point 293-- 294 295CREATE FUNCTION spoint_contained_by_circle_com(scircle, spoint) 296 RETURNS BOOL 297 AS 'MODULE_PATHNAME' , 'spherepoint_in_circle_com' 298 LANGUAGE 'c' 299 IMMUTABLE STRICT; 300 301COMMENT ON FUNCTION spoint_contained_by_circle_com (scircle, spoint) IS 302 'true if spherical circle contains spherical point '; 303 304 305-- 306-- circle does not contain point 307-- 308 309CREATE FUNCTION spoint_contained_by_circle_com_neg(scircle, spoint) 310 RETURNS BOOL 311 AS 'MODULE_PATHNAME' , 'spherepoint_in_circle_com_neg' 312 LANGUAGE 'c' 313 IMMUTABLE STRICT; 314 315COMMENT ON FUNCTION spoint_contained_by_circle_com_neg (scircle, spoint) IS 316 'true if spherical circle does not contain spherical point '; 317 318 319-- 320-- distance between circles 321-- 322 323CREATE FUNCTION dist(scircle, scircle) 324 RETURNS FLOAT8 325 AS 'MODULE_PATHNAME', 'spherecircle_distance' 326 LANGUAGE 'c' 327 IMMUTABLE STRICT; 328 329COMMENT ON FUNCTION dist(scircle, scircle) IS 330 'distance between two spherical circles'; 331 332 333CREATE OPERATOR <-> ( 334 LEFTARG = scircle, 335 RIGHTARG = scircle, 336 COMMUTATOR = '<->', 337 PROCEDURE = dist 338); 339 340COMMENT ON OPERATOR <-> (scircle, scircle) IS 341 'distance between two spherical circles'; 342 343 344-- 345-- distance between circle and point 346-- 347 348CREATE FUNCTION dist(scircle, spoint) 349 RETURNS FLOAT8 350 AS 'MODULE_PATHNAME', 'spherecircle_point_distance' 351 LANGUAGE 'c' 352 IMMUTABLE STRICT; 353 354COMMENT ON FUNCTION dist(scircle, spoint) IS 355 'distance between spherical circle and spherical point'; 356 357 358CREATE OPERATOR <-> ( 359 LEFTARG = scircle, 360 RIGHTARG = spoint, 361 COMMUTATOR = '<->', 362 PROCEDURE = dist 363); 364 365COMMENT ON OPERATOR <-> (scircle, spoint) IS 366 'distance between spherical circle and spherical point'; 367 368 369 370-- 371-- distance between point and circle 372-- 373 374CREATE FUNCTION dist(spoint, scircle) 375 RETURNS FLOAT8 376 AS 'MODULE_PATHNAME', 'spherecircle_point_distance_com' 377 LANGUAGE 'c' 378 IMMUTABLE STRICT; 379 380COMMENT ON FUNCTION dist(spoint, scircle) IS 381 'distance between spherical circle and spherical point'; 382 383 384CREATE OPERATOR <-> ( 385 LEFTARG = spoint, 386 RIGHTARG = scircle, 387 COMMUTATOR = '<->', 388 PROCEDURE = dist 389); 390 391COMMENT ON OPERATOR <-> (spoint, scircle) IS 392 'distance between spherical circle and spherical point'; 393 394 395-- 396-- Transformation of circle 397-- 398 399 400CREATE FUNCTION strans_circle(scircle, strans) 401 RETURNS scircle 402 AS 'MODULE_PATHNAME' , 'spheretrans_circle' 403 LANGUAGE 'c' 404 IMMUTABLE STRICT; 405 406COMMENT ON FUNCTION strans_circle (scircle, strans) IS 407 'returns a transformated spherical circle'; 408 409 410CREATE OPERATOR + ( 411 LEFTARG = scircle, 412 RIGHTARG = strans, 413 PROCEDURE = strans_circle 414); 415 416COMMENT ON OPERATOR + (scircle, strans) IS 417 'transforms a spherical circle '; 418 419CREATE FUNCTION strans_circle_inverse(scircle, strans) 420 RETURNS scircle 421 AS 'MODULE_PATHNAME' , 'spheretrans_circle_inverse' 422 LANGUAGE 'c' 423 IMMUTABLE STRICT; 424 425COMMENT ON FUNCTION strans_circle_inverse (scircle, strans) IS 426 'returns a inverse transformated spherical circle'; 427 428CREATE OPERATOR - ( 429 LEFTARG = scircle, 430 RIGHTARG = strans, 431 PROCEDURE = strans_circle_inverse 432); 433 434COMMENT ON OPERATOR - (scircle, strans) IS 435 'transforms inverse a spherical circle '; 436