pgLatLon
diff latlon--0.3.sql @ 10:684a78d2f9f0
Introduced lossy overlap operator (&&+) and fixed ecircle overlap searches on GiST-indexed ecluster columns
author | jbe |
---|---|
date | Fri Sep 02 14:08:01 2016 +0200 (2016-09-02) |
parents | dc8da756b761 |
children |
line diff
1.1 --- a/latlon--0.3.sql Fri Sep 02 14:04:04 2016 +0200 1.2 +++ b/latlon--0.3.sql Fri Sep 02 14:08:01 2016 +0200 1.3 @@ -732,11 +732,26 @@ 1.4 LANGUAGE C IMMUTABLE STRICT 1.5 AS '$libdir/latlon-v0003', 'pgl_epoint_ecluster_overlap'; 1.6 1.7 +CREATE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 1.8 + RETURNS boolean 1.9 + LANGUAGE C IMMUTABLE STRICT 1.10 + AS '$libdir/latlon-v0003', 'pgl_epoint_ecluster_may_overlap'; 1.11 + 1.12 CREATE FUNCTION ebox_overlap_proc(ebox, ebox) 1.13 RETURNS boolean 1.14 LANGUAGE C IMMUTABLE STRICT 1.15 AS '$libdir/latlon-v0003', 'pgl_ebox_overlap'; 1.16 1.17 +CREATE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 1.18 + RETURNS boolean 1.19 + LANGUAGE C IMMUTABLE STRICT 1.20 + AS '$libdir/latlon-v0003', 'pgl_ebox_ecircle_may_overlap'; 1.21 + 1.22 +CREATE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 1.23 + RETURNS boolean 1.24 + LANGUAGE C IMMUTABLE STRICT 1.25 + AS '$libdir/latlon-v0003', 'pgl_ebox_ecluster_may_overlap'; 1.26 + 1.27 CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 1.28 RETURNS boolean 1.29 LANGUAGE C IMMUTABLE STRICT 1.30 @@ -747,6 +762,16 @@ 1.31 LANGUAGE C IMMUTABLE STRICT 1.32 AS '$libdir/latlon-v0003', 'pgl_ecircle_ecluster_overlap'; 1.33 1.34 +CREATE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 1.35 + RETURNS boolean 1.36 + LANGUAGE C IMMUTABLE STRICT 1.37 + AS '$libdir/latlon-v0003', 'pgl_ecircle_ecluster_may_overlap'; 1.38 + 1.39 +CREATE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 1.40 + RETURNS boolean 1.41 + LANGUAGE C IMMUTABLE STRICT 1.42 + AS '$libdir/latlon-v0003', 'pgl_ecluster_may_overlap'; 1.43 + 1.44 CREATE FUNCTION epoint_distance_proc(epoint, epoint) 1.45 RETURNS float8 1.46 LANGUAGE C IMMUTABLE STRICT 1.47 @@ -878,6 +903,103 @@ 1.48 join = areajoinsel 1.49 ); 1.50 1.51 +CREATE OPERATOR &&+ ( 1.52 + leftarg = epoint, 1.53 + rightarg = ecluster, 1.54 + procedure = epoint_ecluster_may_overlap_proc, 1.55 + commutator = &&+, 1.56 + restrict = areasel, 1.57 + join = areajoinsel 1.58 +); 1.59 + 1.60 +CREATE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint) 1.61 + RETURNS boolean 1.62 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 1.63 + 1.64 +CREATE OPERATOR &&+ ( 1.65 + leftarg = ecluster, 1.66 + rightarg = epoint, 1.67 + procedure = epoint_ecluster_may_overlap_commutator, 1.68 + commutator = &&+, 1.69 + restrict = areasel, 1.70 + join = areajoinsel 1.71 +); 1.72 + 1.73 +CREATE OPERATOR &&+ ( 1.74 + leftarg = ebox, 1.75 + rightarg = ecircle, 1.76 + procedure = ebox_ecircle_may_overlap_proc, 1.77 + commutator = &&+, 1.78 + restrict = areasel, 1.79 + join = areajoinsel 1.80 +); 1.81 + 1.82 +CREATE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox) 1.83 + RETURNS boolean 1.84 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 1.85 + 1.86 +CREATE OPERATOR &&+ ( 1.87 + leftarg = ecircle, 1.88 + rightarg = ebox, 1.89 + procedure = ebox_ecircle_may_overlap_commutator, 1.90 + commutator = &&+, 1.91 + restrict = areasel, 1.92 + join = areajoinsel 1.93 +); 1.94 + 1.95 +CREATE OPERATOR &&+ ( 1.96 + leftarg = ebox, 1.97 + rightarg = ecluster, 1.98 + procedure = ebox_ecluster_may_overlap_proc, 1.99 + commutator = &&+, 1.100 + restrict = areasel, 1.101 + join = areajoinsel 1.102 +); 1.103 + 1.104 +CREATE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox) 1.105 + RETURNS boolean 1.106 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 1.107 + 1.108 +CREATE OPERATOR &&+ ( 1.109 + leftarg = ecluster, 1.110 + rightarg = ebox, 1.111 + procedure = ebox_ecluster_may_overlap_commutator, 1.112 + commutator = &&+, 1.113 + restrict = areasel, 1.114 + join = areajoinsel 1.115 +); 1.116 + 1.117 +CREATE OPERATOR &&+ ( 1.118 + leftarg = ecircle, 1.119 + rightarg = ecluster, 1.120 + procedure = ecircle_ecluster_may_overlap_proc, 1.121 + commutator = &&+, 1.122 + restrict = areasel, 1.123 + join = areajoinsel 1.124 +); 1.125 + 1.126 +CREATE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle) 1.127 + RETURNS boolean 1.128 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 1.129 + 1.130 +CREATE OPERATOR &&+ ( 1.131 + leftarg = ecluster, 1.132 + rightarg = ecircle, 1.133 + procedure = ecircle_ecluster_may_overlap_commutator, 1.134 + commutator = &&+, 1.135 + restrict = areasel, 1.136 + join = areajoinsel 1.137 +); 1.138 + 1.139 +CREATE OPERATOR &&+ ( 1.140 + leftarg = ecluster, 1.141 + rightarg = ecluster, 1.142 + procedure = ecluster_may_overlap_proc, 1.143 + commutator = &&+, 1.144 + restrict = areasel, 1.145 + join = areajoinsel 1.146 +); 1.147 + 1.148 CREATE OPERATOR <-> ( 1.149 leftarg = epoint, 1.150 rightarg = epoint, 1.151 @@ -1003,13 +1125,14 @@ 1.152 1.153 CREATE OPERATOR CLASS epoint_ops 1.154 DEFAULT FOR TYPE epoint USING gist AS 1.155 - OPERATOR 11 = , 1.156 - OPERATOR 22 && (epoint, ebox), 1.157 - OPERATOR 23 && (epoint, ecircle), 1.158 - OPERATOR 24 && (epoint, ecluster), 1.159 - OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 1.160 - OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 1.161 - OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 1.162 + OPERATOR 11 = , 1.163 + OPERATOR 22 && (epoint, ebox), 1.164 + OPERATOR 23 && (epoint, ecircle), 1.165 + OPERATOR 24 && (epoint, ecluster), 1.166 + OPERATOR 124 &&+ (epoint, ecluster), 1.167 + OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 1.168 + OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 1.169 + OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 1.170 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 1.171 FUNCTION 2 pgl_gist_union(internal, internal), 1.172 FUNCTION 3 pgl_gist_compress_epoint(internal), 1.173 @@ -1022,13 +1145,15 @@ 1.174 1.175 CREATE OPERATOR CLASS ecircle_ops 1.176 DEFAULT FOR TYPE ecircle USING gist AS 1.177 - OPERATOR 13 = , 1.178 - OPERATOR 21 && (ecircle, epoint), 1.179 - OPERATOR 23 && (ecircle, ecircle), 1.180 - OPERATOR 24 && (ecircle, ecluster), 1.181 - OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 1.182 - OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 1.183 - OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 1.184 + OPERATOR 13 = , 1.185 + OPERATOR 21 && (ecircle, epoint), 1.186 + OPERATOR 122 &&+ (ecircle, ebox), 1.187 + OPERATOR 23 && (ecircle, ecircle), 1.188 + OPERATOR 24 && (ecircle, ecluster), 1.189 + OPERATOR 124 &&+ (ecircle, ecluster), 1.190 + OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 1.191 + OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 1.192 + OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 1.193 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 1.194 FUNCTION 2 pgl_gist_union(internal, internal), 1.195 FUNCTION 3 pgl_gist_compress_ecircle(internal), 1.196 @@ -1041,7 +1166,12 @@ 1.197 1.198 CREATE OPERATOR CLASS ecluster_ops 1.199 DEFAULT FOR TYPE ecluster USING gist AS 1.200 - OPERATOR 21 && (ecluster, epoint), 1.201 + OPERATOR 21 && (ecluster, epoint), 1.202 + OPERATOR 121 &&+ (ecluster, epoint), 1.203 + OPERATOR 122 &&+ (ecluster, ebox), 1.204 + OPERATOR 23 && (ecluster, ecircle), 1.205 + OPERATOR 123 &&+ (ecluster, ecircle), 1.206 + OPERATOR 124 &&+ (ecluster, ecluster), 1.207 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 1.208 FUNCTION 2 pgl_gist_union(internal, internal), 1.209 FUNCTION 3 pgl_gist_compress_ecluster(internal),