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),

Impressum / About Us