1-- ************************** 2-- 3-- spherical point functions 4-- 5-- ************************** 6 7CREATE FUNCTION pg_sphere_version() 8 RETURNS CSTRING 9 AS 'MODULE_PATHNAME', 'pg_sphere_version' 10 LANGUAGE 'c'; 11 12CREATE FUNCTION spoint(FLOAT8, FLOAT8) 13 RETURNS spoint 14 AS 'MODULE_PATHNAME', 'spherepoint_from_long_lat' 15 LANGUAGE 'c' 16 IMMUTABLE STRICT; 17 18CREATE FUNCTION set_sphere_output_precision(INT4) 19 RETURNS CSTRING 20 AS 'MODULE_PATHNAME', 'set_sphere_output_precision' 21 LANGUAGE 'c'; 22 23CREATE FUNCTION set_sphere_output(CSTRING) 24 RETURNS CSTRING 25 AS 'MODULE_PATHNAME', 'set_sphere_output' 26 LANGUAGE 'c'; 27 28COMMENT ON FUNCTION spoint(FLOAT8, FLOAT8) IS 29 'returns a spherical point from longitude (arg1), latitude (arg2)'; 30 31CREATE FUNCTION long(spoint) 32 RETURNS FLOAT8 33 AS 'MODULE_PATHNAME', 'spherepoint_long' 34 LANGUAGE 'c' 35 IMMUTABLE STRICT; 36 37COMMENT ON FUNCTION long(spoint) IS 38 'longitude of spherical point'; 39 40CREATE FUNCTION lat(spoint) 41 RETURNS FLOAT8 42 AS 'MODULE_PATHNAME', 'spherepoint_lat' 43 LANGUAGE 'c' 44 IMMUTABLE STRICT; 45 46COMMENT ON FUNCTION lat(spoint) IS 47 'latitude of spherical point'; 48 49CREATE FUNCTION x(spoint) 50 RETURNS FLOAT8 51 AS 'MODULE_PATHNAME', 'spherepoint_x' 52 LANGUAGE 'c' 53 IMMUTABLE STRICT; 54 55COMMENT ON FUNCTION x(spoint) IS 56 'cartesian x value of spherical point'; 57 58 59CREATE FUNCTION y(spoint) 60 RETURNS FLOAT8 61 AS 'MODULE_PATHNAME', 'spherepoint_y' 62 LANGUAGE 'c' 63 IMMUTABLE STRICT; 64 65COMMENT ON FUNCTION y(spoint) IS 66 'cartesian y value of spherical point'; 67 68CREATE FUNCTION xyz(spoint) 69 RETURNS FLOAT8[] 70 AS 'MODULE_PATHNAME', 'spherepoint_xyz' 71 LANGUAGE 'c' 72 IMMUTABLE STRICT; 73 74COMMENT ON FUNCTION xyz(spoint) IS 75 'cartesian values of spherical point'; 76 77 78CREATE FUNCTION z(spoint) 79 RETURNS FLOAT8 80 AS 'MODULE_PATHNAME', 'spherepoint_z' 81 LANGUAGE 'c' 82 IMMUTABLE STRICT; 83 84COMMENT ON FUNCTION z(spoint) IS 85 'cartesian z value of spherical point'; 86 87 88-- *************************** 89-- 90-- spherical point operators 91-- 92-- *************************** 93 94-- 95-- equal 96-- 97 98CREATE FUNCTION spoint_equal(spoint, spoint) 99 RETURNS BOOL 100 AS 'MODULE_PATHNAME', 'spherepoint_equal' 101 LANGUAGE 'c' 102 IMMUTABLE STRICT; 103 104COMMENT ON FUNCTION spoint_equal(spoint, spoint) IS 105 'returns true, if spherical points are equal'; 106 107CREATE OPERATOR = ( 108 LEFTARG = spoint, 109 RIGHTARG = spoint, 110 COMMUTATOR = =, 111 NEGATOR = <>, 112 PROCEDURE = spoint_equal, 113 RESTRICT = contsel, 114 JOIN = contjoinsel 115); 116 117COMMENT ON OPERATOR = (spoint, spoint) IS 118 'true, if spherical points are equal'; 119 120-- 121-- not equal 122-- 123 124CREATE FUNCTION spoint_equal_neg (spoint, spoint) 125 RETURNS BOOL 126 AS 'SELECT NOT spoint_equal($1,$2);' 127 LANGUAGE 'sql' 128 IMMUTABLE STRICT; 129 130COMMENT ON FUNCTION spoint_equal_neg (spoint, spoint) IS 131 'returns true, if spherical points are not equal'; 132 133 134CREATE OPERATOR <> ( 135 LEFTARG = spoint, 136 RIGHTARG = spoint, 137 COMMUTATOR = <>, 138 NEGATOR = =, 139 PROCEDURE = spoint_equal_neg, 140 RESTRICT = contsel, 141 JOIN = contjoinsel 142); 143 144COMMENT ON OPERATOR <> (spoint, spoint) IS 145 'true, if spherical points are not equal'; 146 147-- 148-- distance between points 149-- 150 151CREATE FUNCTION dist(spoint, spoint) 152 RETURNS FLOAT8 153 AS 'MODULE_PATHNAME', 'spherepoint_distance' 154 LANGUAGE 'c' 155 IMMUTABLE STRICT; 156 157COMMENT ON FUNCTION dist(spoint, spoint) IS 158 'distance between spherical points'; 159 160CREATE OPERATOR <-> ( 161 LEFTARG = spoint, 162 RIGHTARG = spoint, 163 COMMUTATOR = '<->', 164 PROCEDURE = dist 165); 166 167COMMENT ON OPERATOR <-> (spoint, spoint) IS 168 'distance between spherical points'; 169 170