pgLatLon
diff latlon--0.9--0.10.sql @ 46:3cbce515387f
Added safety margins for distance calculation on index lookups (fixes bug that caused nearest-neighbor search to fail in certain cases); Improved "fair_distance" function
| author | jbe |
|---|---|
| date | Mon Oct 31 13:06:31 2016 +0100 (2016-10-31) |
| parents | |
| children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/latlon--0.9--0.10.sql Mon Oct 31 13:06:31 2016 +0100 1.3 @@ -0,0 +1,504 @@ 1.4 + 1.5 +CREATE TYPE epoint_with_sample_count; 1.6 + 1.7 +CREATE OR REPLACE FUNCTION ekey_point_in_dummy(cstring) 1.8 + RETURNS ekey_point 1.9 + LANGUAGE C IMMUTABLE STRICT 1.10 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 1.11 + 1.12 +CREATE OR REPLACE FUNCTION ekey_point_out_dummy(ekey_point) 1.13 + RETURNS cstring 1.14 + LANGUAGE C IMMUTABLE STRICT 1.15 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 1.16 + 1.17 +CREATE OR REPLACE FUNCTION ekey_area_in_dummy(cstring) 1.18 + RETURNS ekey_area 1.19 + LANGUAGE C IMMUTABLE STRICT 1.20 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 1.21 + 1.22 +CREATE OR REPLACE FUNCTION ekey_area_out_dummy(ekey_area) 1.23 + RETURNS cstring 1.24 + LANGUAGE C IMMUTABLE STRICT 1.25 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 1.26 + 1.27 +CREATE OR REPLACE FUNCTION epoint_in(cstring) 1.28 + RETURNS epoint 1.29 + LANGUAGE C IMMUTABLE STRICT 1.30 + AS '$libdir/latlon-v0009', 'pgl_epoint_in'; 1.31 + 1.32 +CREATE FUNCTION epoint_with_sample_count_in(cstring) 1.33 + RETURNS epoint_with_sample_count 1.34 + LANGUAGE C IMMUTABLE STRICT 1.35 + AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_in'; 1.36 + 1.37 +CREATE OR REPLACE FUNCTION ebox_in(cstring) 1.38 + RETURNS ebox 1.39 + LANGUAGE C IMMUTABLE STRICT 1.40 + AS '$libdir/latlon-v0009', 'pgl_ebox_in'; 1.41 + 1.42 +CREATE OR REPLACE FUNCTION ecircle_in(cstring) 1.43 + RETURNS ecircle 1.44 + LANGUAGE C IMMUTABLE STRICT 1.45 + AS '$libdir/latlon-v0009', 'pgl_ecircle_in'; 1.46 + 1.47 +CREATE OR REPLACE FUNCTION ecluster_in(cstring) 1.48 + RETURNS ecluster 1.49 + LANGUAGE C IMMUTABLE STRICT 1.50 + AS '$libdir/latlon-v0009', 'pgl_ecluster_in'; 1.51 + 1.52 +CREATE OR REPLACE FUNCTION epoint_out(epoint) 1.53 + RETURNS cstring 1.54 + LANGUAGE C IMMUTABLE STRICT 1.55 + AS '$libdir/latlon-v0009', 'pgl_epoint_out'; 1.56 + 1.57 +CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) 1.58 + RETURNS cstring 1.59 + LANGUAGE C IMMUTABLE STRICT 1.60 + AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_out'; 1.61 + 1.62 +CREATE OR REPLACE FUNCTION ebox_out(ebox) 1.63 + RETURNS cstring 1.64 + LANGUAGE C IMMUTABLE STRICT 1.65 + AS '$libdir/latlon-v0009', 'pgl_ebox_out'; 1.66 + 1.67 +CREATE OR REPLACE FUNCTION ecircle_out(ecircle) 1.68 + RETURNS cstring 1.69 + LANGUAGE C IMMUTABLE STRICT 1.70 + AS '$libdir/latlon-v0009', 'pgl_ecircle_out'; 1.71 + 1.72 +CREATE OR REPLACE FUNCTION ecluster_out(ecluster) 1.73 + RETURNS cstring 1.74 + LANGUAGE C IMMUTABLE STRICT 1.75 + AS '$libdir/latlon-v0009', 'pgl_ecluster_out'; 1.76 + 1.77 +CREATE OR REPLACE FUNCTION epoint_recv(internal) 1.78 + RETURNS epoint 1.79 + LANGUAGE C IMMUTABLE STRICT 1.80 + AS '$libdir/latlon-v0009', 'pgl_epoint_recv'; 1.81 + 1.82 +CREATE OR REPLACE FUNCTION ebox_recv(internal) 1.83 + RETURNS ebox 1.84 + LANGUAGE C IMMUTABLE STRICT 1.85 + AS '$libdir/latlon-v0009', 'pgl_ebox_recv'; 1.86 + 1.87 +CREATE OR REPLACE FUNCTION ecircle_recv(internal) 1.88 + RETURNS ecircle 1.89 + LANGUAGE C IMMUTABLE STRICT 1.90 + AS '$libdir/latlon-v0009', 'pgl_ecircle_recv'; 1.91 + 1.92 +CREATE OR REPLACE FUNCTION epoint_send(epoint) 1.93 + RETURNS bytea 1.94 + LANGUAGE C IMMUTABLE STRICT 1.95 + AS '$libdir/latlon-v0009', 'pgl_epoint_send'; 1.96 + 1.97 +CREATE OR REPLACE FUNCTION ebox_send(ebox) 1.98 + RETURNS bytea 1.99 + LANGUAGE C IMMUTABLE STRICT 1.100 + AS '$libdir/latlon-v0009', 'pgl_ebox_send'; 1.101 + 1.102 +CREATE OR REPLACE FUNCTION ecircle_send(ecircle) 1.103 + RETURNS bytea 1.104 + LANGUAGE C IMMUTABLE STRICT 1.105 + AS '$libdir/latlon-v0009', 'pgl_ecircle_send'; 1.106 + 1.107 +CREATE TYPE epoint_with_sample_count ( 1.108 + internallength = 20, 1.109 + input = epoint_with_sample_count_in, 1.110 + output = epoint_with_sample_count_out, 1.111 + alignment = double ); 1.112 + 1.113 +CREATE OR REPLACE FUNCTION epoint_btree_lt(epoint, epoint) 1.114 + RETURNS boolean 1.115 + LANGUAGE C IMMUTABLE STRICT 1.116 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_lt'; 1.117 + 1.118 +CREATE OR REPLACE FUNCTION epoint_btree_le(epoint, epoint) 1.119 + RETURNS boolean 1.120 + LANGUAGE C IMMUTABLE STRICT 1.121 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_le'; 1.122 + 1.123 +CREATE OR REPLACE FUNCTION epoint_btree_eq(epoint, epoint) 1.124 + RETURNS boolean 1.125 + LANGUAGE C IMMUTABLE STRICT 1.126 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_eq'; 1.127 + 1.128 +CREATE OR REPLACE FUNCTION epoint_btree_ne(epoint, epoint) 1.129 + RETURNS boolean 1.130 + LANGUAGE C IMMUTABLE STRICT 1.131 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ne'; 1.132 + 1.133 +CREATE OR REPLACE FUNCTION epoint_btree_ge(epoint, epoint) 1.134 + RETURNS boolean 1.135 + LANGUAGE C IMMUTABLE STRICT 1.136 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ge'; 1.137 + 1.138 +CREATE OR REPLACE FUNCTION epoint_btree_gt(epoint, epoint) 1.139 + RETURNS boolean 1.140 + LANGUAGE C IMMUTABLE STRICT 1.141 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_gt'; 1.142 + 1.143 +CREATE OR REPLACE FUNCTION epoint_btree_cmp(epoint, epoint) 1.144 + RETURNS int4 1.145 + LANGUAGE C IMMUTABLE STRICT 1.146 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_cmp'; 1.147 + 1.148 +CREATE OR REPLACE FUNCTION ebox_btree_lt(ebox, ebox) 1.149 + RETURNS boolean 1.150 + LANGUAGE C IMMUTABLE STRICT 1.151 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_lt'; 1.152 + 1.153 +CREATE OR REPLACE FUNCTION ebox_btree_le(ebox, ebox) 1.154 + RETURNS boolean 1.155 + LANGUAGE C IMMUTABLE STRICT 1.156 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_le'; 1.157 + 1.158 +CREATE OR REPLACE FUNCTION ebox_btree_eq(ebox, ebox) 1.159 + RETURNS boolean 1.160 + LANGUAGE C IMMUTABLE STRICT 1.161 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_eq'; 1.162 + 1.163 +CREATE OR REPLACE FUNCTION ebox_btree_ne(ebox, ebox) 1.164 + RETURNS boolean 1.165 + LANGUAGE C IMMUTABLE STRICT 1.166 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ne'; 1.167 + 1.168 +CREATE OR REPLACE FUNCTION ebox_btree_ge(ebox, ebox) 1.169 + RETURNS boolean 1.170 + LANGUAGE C IMMUTABLE STRICT 1.171 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ge'; 1.172 + 1.173 +CREATE OR REPLACE FUNCTION ebox_btree_gt(ebox, ebox) 1.174 + RETURNS boolean 1.175 + LANGUAGE C IMMUTABLE STRICT 1.176 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_gt'; 1.177 + 1.178 +CREATE OR REPLACE FUNCTION ebox_btree_cmp(ebox, ebox) 1.179 + RETURNS int4 1.180 + LANGUAGE C IMMUTABLE STRICT 1.181 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_cmp'; 1.182 + 1.183 +CREATE OR REPLACE FUNCTION ecircle_btree_lt(ecircle, ecircle) 1.184 + RETURNS boolean 1.185 + LANGUAGE C IMMUTABLE STRICT 1.186 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_lt'; 1.187 + 1.188 +CREATE OR REPLACE FUNCTION ecircle_btree_le(ecircle, ecircle) 1.189 + RETURNS boolean 1.190 + LANGUAGE C IMMUTABLE STRICT 1.191 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_le'; 1.192 + 1.193 +CREATE OR REPLACE FUNCTION ecircle_btree_eq(ecircle, ecircle) 1.194 + RETURNS boolean 1.195 + LANGUAGE C IMMUTABLE STRICT 1.196 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_eq'; 1.197 + 1.198 +CREATE OR REPLACE FUNCTION ecircle_btree_ne(ecircle, ecircle) 1.199 + RETURNS boolean 1.200 + LANGUAGE C IMMUTABLE STRICT 1.201 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ne'; 1.202 + 1.203 +CREATE OR REPLACE FUNCTION ecircle_btree_ge(ecircle, ecircle) 1.204 + RETURNS boolean 1.205 + LANGUAGE C IMMUTABLE STRICT 1.206 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ge'; 1.207 + 1.208 +CREATE OR REPLACE FUNCTION ecircle_btree_gt(ecircle, ecircle) 1.209 + RETURNS boolean 1.210 + LANGUAGE C IMMUTABLE STRICT 1.211 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_gt'; 1.212 + 1.213 +CREATE OR REPLACE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 1.214 + RETURNS int4 1.215 + LANGUAGE C IMMUTABLE STRICT 1.216 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_cmp'; 1.217 + 1.218 +CREATE OR REPLACE FUNCTION cast_epoint_to_ebox(epoint) 1.219 + RETURNS ebox 1.220 + LANGUAGE C IMMUTABLE STRICT 1.221 + AS '$libdir/latlon-v0009', 'pgl_epoint_to_ebox'; 1.222 + 1.223 +CREATE OR REPLACE FUNCTION cast_epoint_to_ecircle(epoint) 1.224 + RETURNS ecircle 1.225 + LANGUAGE C IMMUTABLE STRICT 1.226 + AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecircle'; 1.227 + 1.228 +CREATE OR REPLACE FUNCTION cast_epoint_to_ecluster(epoint) 1.229 + RETURNS ecluster 1.230 + LANGUAGE C IMMUTABLE STRICT 1.231 + AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecluster'; 1.232 + 1.233 +CREATE OR REPLACE FUNCTION cast_ebox_to_ecluster(ebox) 1.234 + RETURNS ecluster 1.235 + LANGUAGE C IMMUTABLE STRICT 1.236 + AS '$libdir/latlon-v0009', 'pgl_ebox_to_ecluster'; 1.237 + 1.238 +CREATE OR REPLACE FUNCTION epoint(float8, float8) 1.239 + RETURNS epoint 1.240 + LANGUAGE C IMMUTABLE STRICT 1.241 + AS '$libdir/latlon-v0009', 'pgl_create_epoint'; 1.242 + 1.243 +CREATE FUNCTION epoint_with_sample_count(epoint, int4) 1.244 + RETURNS epoint_with_sample_count 1.245 + LANGUAGE C IMMUTABLE STRICT 1.246 + AS '$libdir/latlon-v0009', 'pgl_create_epoint_with_sample_count'; 1.247 + 1.248 +CREATE OR REPLACE FUNCTION empty_ebox() 1.249 + RETURNS ebox 1.250 + LANGUAGE C IMMUTABLE STRICT 1.251 + AS '$libdir/latlon-v0009', 'pgl_create_empty_ebox'; 1.252 + 1.253 +CREATE OR REPLACE FUNCTION ebox(float8, float8, float8, float8) 1.254 + RETURNS ebox 1.255 + LANGUAGE C IMMUTABLE STRICT 1.256 + AS '$libdir/latlon-v0009', 'pgl_create_ebox'; 1.257 + 1.258 +CREATE OR REPLACE FUNCTION ebox(epoint, epoint) 1.259 + RETURNS ebox 1.260 + LANGUAGE C IMMUTABLE STRICT 1.261 + AS '$libdir/latlon-v0009', 'pgl_create_ebox_from_epoints'; 1.262 + 1.263 +CREATE OR REPLACE FUNCTION ecircle(float8, float8, float8) 1.264 + RETURNS ecircle 1.265 + LANGUAGE C IMMUTABLE STRICT 1.266 + AS '$libdir/latlon-v0009', 'pgl_create_ecircle'; 1.267 + 1.268 +CREATE OR REPLACE FUNCTION ecircle(epoint, float8) 1.269 + RETURNS ecircle 1.270 + LANGUAGE C IMMUTABLE STRICT 1.271 + AS '$libdir/latlon-v0009', 'pgl_create_ecircle_from_epoint'; 1.272 + 1.273 +CREATE OR REPLACE FUNCTION latitude(epoint) 1.274 + RETURNS float8 1.275 + LANGUAGE C IMMUTABLE STRICT 1.276 + AS '$libdir/latlon-v0009', 'pgl_epoint_lat'; 1.277 + 1.278 +CREATE OR REPLACE FUNCTION longitude(epoint) 1.279 + RETURNS float8 1.280 + LANGUAGE C IMMUTABLE STRICT 1.281 + AS '$libdir/latlon-v0009', 'pgl_epoint_lon'; 1.282 + 1.283 +CREATE OR REPLACE FUNCTION min_latitude(ebox) 1.284 + RETURNS float8 1.285 + LANGUAGE C IMMUTABLE STRICT 1.286 + AS '$libdir/latlon-v0009', 'pgl_ebox_lat_min'; 1.287 + 1.288 +CREATE OR REPLACE FUNCTION max_latitude(ebox) 1.289 + RETURNS float8 1.290 + LANGUAGE C IMMUTABLE STRICT 1.291 + AS '$libdir/latlon-v0009', 'pgl_ebox_lat_max'; 1.292 + 1.293 +CREATE OR REPLACE FUNCTION min_longitude(ebox) 1.294 + RETURNS float8 1.295 + LANGUAGE C IMMUTABLE STRICT 1.296 + AS '$libdir/latlon-v0009', 'pgl_ebox_lon_min'; 1.297 + 1.298 +CREATE OR REPLACE FUNCTION max_longitude(ebox) 1.299 + RETURNS float8 1.300 + LANGUAGE C IMMUTABLE STRICT 1.301 + AS '$libdir/latlon-v0009', 'pgl_ebox_lon_max'; 1.302 + 1.303 +CREATE OR REPLACE FUNCTION center(ecircle) 1.304 + RETURNS epoint 1.305 + LANGUAGE C IMMUTABLE STRICT 1.306 + AS '$libdir/latlon-v0009', 'pgl_ecircle_center'; 1.307 + 1.308 +CREATE OR REPLACE FUNCTION radius(ecircle) 1.309 + RETURNS float8 1.310 + LANGUAGE C IMMUTABLE STRICT 1.311 + AS '$libdir/latlon-v0009', 'pgl_ecircle_radius'; 1.312 + 1.313 +CREATE OR REPLACE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 1.314 + RETURNS boolean 1.315 + LANGUAGE C IMMUTABLE STRICT 1.316 + AS '$libdir/latlon-v0009', 'pgl_epoint_ebox_overlap'; 1.317 + 1.318 +CREATE OR REPLACE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 1.319 + RETURNS boolean 1.320 + LANGUAGE C IMMUTABLE STRICT 1.321 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_overlap'; 1.322 + 1.323 +CREATE OR REPLACE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 1.324 + RETURNS boolean 1.325 + LANGUAGE C IMMUTABLE STRICT 1.326 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_overlap'; 1.327 + 1.328 +CREATE OR REPLACE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 1.329 + RETURNS boolean 1.330 + LANGUAGE C IMMUTABLE STRICT 1.331 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_may_overlap'; 1.332 + 1.333 +CREATE OR REPLACE FUNCTION ebox_overlap_proc(ebox, ebox) 1.334 + RETURNS boolean 1.335 + LANGUAGE C IMMUTABLE STRICT 1.336 + AS '$libdir/latlon-v0009', 'pgl_ebox_overlap'; 1.337 + 1.338 +CREATE OR REPLACE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 1.339 + RETURNS boolean 1.340 + LANGUAGE C IMMUTABLE STRICT 1.341 + AS '$libdir/latlon-v0009', 'pgl_ebox_ecircle_may_overlap'; 1.342 + 1.343 +CREATE OR REPLACE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 1.344 + RETURNS boolean 1.345 + LANGUAGE C IMMUTABLE STRICT 1.346 + AS '$libdir/latlon-v0009', 'pgl_ebox_ecluster_may_overlap'; 1.347 + 1.348 +CREATE OR REPLACE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 1.349 + RETURNS boolean 1.350 + LANGUAGE C IMMUTABLE STRICT 1.351 + AS '$libdir/latlon-v0009', 'pgl_ecircle_overlap'; 1.352 + 1.353 +CREATE OR REPLACE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 1.354 + RETURNS boolean 1.355 + LANGUAGE C IMMUTABLE STRICT 1.356 + AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_overlap'; 1.357 + 1.358 +CREATE OR REPLACE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 1.359 + RETURNS boolean 1.360 + LANGUAGE C IMMUTABLE STRICT 1.361 + AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_may_overlap'; 1.362 + 1.363 +CREATE OR REPLACE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 1.364 + RETURNS boolean 1.365 + LANGUAGE C IMMUTABLE STRICT 1.366 + AS '$libdir/latlon-v0009', 'pgl_ecluster_overlap'; 1.367 + 1.368 +CREATE OR REPLACE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 1.369 + RETURNS boolean 1.370 + LANGUAGE C IMMUTABLE STRICT 1.371 + AS '$libdir/latlon-v0009', 'pgl_ecluster_may_overlap'; 1.372 + 1.373 +CREATE OR REPLACE FUNCTION ecluster_contains_proc(ecluster, ecluster) 1.374 + RETURNS boolean 1.375 + LANGUAGE C IMMUTABLE STRICT 1.376 + AS '$libdir/latlon-v0009', 'pgl_ecluster_contains'; 1.377 + 1.378 +CREATE OR REPLACE FUNCTION epoint_distance_proc(epoint, epoint) 1.379 + RETURNS float8 1.380 + LANGUAGE C IMMUTABLE STRICT 1.381 + AS '$libdir/latlon-v0009', 'pgl_epoint_distance'; 1.382 + 1.383 +CREATE OR REPLACE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 1.384 + RETURNS float8 1.385 + LANGUAGE C IMMUTABLE STRICT 1.386 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_distance'; 1.387 + 1.388 +CREATE OR REPLACE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 1.389 + RETURNS float8 1.390 + LANGUAGE C IMMUTABLE STRICT 1.391 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_distance'; 1.392 + 1.393 +CREATE OR REPLACE FUNCTION ecircle_distance_proc(ecircle, ecircle) 1.394 + RETURNS float8 1.395 + LANGUAGE C IMMUTABLE STRICT 1.396 + AS '$libdir/latlon-v0009', 'pgl_ecircle_distance'; 1.397 + 1.398 +CREATE OR REPLACE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 1.399 + RETURNS float8 1.400 + LANGUAGE C IMMUTABLE STRICT 1.401 + AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_distance'; 1.402 + 1.403 +CREATE OR REPLACE FUNCTION ecluster_distance_proc(ecluster, ecluster) 1.404 + RETURNS float8 1.405 + LANGUAGE C IMMUTABLE STRICT 1.406 + AS '$libdir/latlon-v0009', 'pgl_ecluster_distance'; 1.407 + 1.408 +DROP FUNCTION monte_carlo_area(ecluster, int4); 1.409 + 1.410 +CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) 1.411 + RETURNS float8 1.412 + LANGUAGE C IMMUTABLE STRICT 1.413 + AS '$libdir/latlon-v0009', 'pgl_ecluster_epoint_sc_fair_distance'; 1.414 + 1.415 +CREATE OPERATOR <=> ( 1.416 + leftarg = ecluster, 1.417 + rightarg = epoint_with_sample_count, 1.418 + procedure = fair_distance_operator_proc 1.419 +); 1.420 + 1.421 +CREATE OR REPLACE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 1.422 + RETURNS boolean 1.423 + LANGUAGE C STRICT 1.424 + AS '$libdir/latlon-v0009', 'pgl_gist_consistent'; 1.425 + 1.426 +CREATE OR REPLACE FUNCTION pgl_gist_union(internal, internal) 1.427 + RETURNS internal 1.428 + LANGUAGE C STRICT 1.429 + AS '$libdir/latlon-v0009', 'pgl_gist_union'; 1.430 + 1.431 +CREATE OR REPLACE FUNCTION pgl_gist_compress_epoint(internal) 1.432 + RETURNS internal 1.433 + LANGUAGE C STRICT 1.434 + AS '$libdir/latlon-v0009', 'pgl_gist_compress_epoint'; 1.435 + 1.436 +CREATE OR REPLACE FUNCTION pgl_gist_compress_ecircle(internal) 1.437 + RETURNS internal 1.438 + LANGUAGE C STRICT 1.439 + AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecircle'; 1.440 + 1.441 +CREATE OR REPLACE FUNCTION pgl_gist_compress_ecluster(internal) 1.442 + RETURNS internal 1.443 + LANGUAGE C STRICT 1.444 + AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecluster'; 1.445 + 1.446 +CREATE OR REPLACE FUNCTION pgl_gist_decompress(internal) 1.447 + RETURNS internal 1.448 + LANGUAGE C STRICT 1.449 + AS '$libdir/latlon-v0009', 'pgl_gist_decompress'; 1.450 + 1.451 +CREATE OR REPLACE FUNCTION pgl_gist_penalty(internal, internal, internal) 1.452 + RETURNS internal 1.453 + LANGUAGE C STRICT 1.454 + AS '$libdir/latlon-v0009', 'pgl_gist_penalty'; 1.455 + 1.456 +CREATE OR REPLACE FUNCTION pgl_gist_picksplit(internal, internal) 1.457 + RETURNS internal 1.458 + LANGUAGE C STRICT 1.459 + AS '$libdir/latlon-v0009', 'pgl_gist_picksplit'; 1.460 + 1.461 +CREATE OR REPLACE FUNCTION pgl_gist_same(internal, internal, internal) 1.462 + RETURNS internal 1.463 + LANGUAGE C STRICT 1.464 + AS '$libdir/latlon-v0009', 'pgl_gist_same'; 1.465 + 1.466 +CREATE OR REPLACE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 1.467 + RETURNS internal 1.468 + LANGUAGE C STRICT 1.469 + AS '$libdir/latlon-v0009', 'pgl_gist_distance'; 1.470 + 1.471 +DROP OPERATOR CLASS ecluster_ops USING gist; 1.472 + 1.473 +CREATE OPERATOR CLASS ecluster_ops 1.474 + DEFAULT FOR TYPE ecluster USING gist AS 1.475 + OPERATOR 21 && (ecluster, epoint), 1.476 + OPERATOR 121 &&+ (ecluster, epoint), 1.477 + OPERATOR 221 @> (ecluster, epoint), 1.478 + OPERATOR 22 && (ecluster, ebox), 1.479 + OPERATOR 122 &&+ (ecluster, ebox), 1.480 + OPERATOR 222 @> (ecluster, ebox), 1.481 + OPERATOR 322 <@ (ecluster, ebox), 1.482 + OPERATOR 23 && (ecluster, ecircle), 1.483 + OPERATOR 123 &&+ (ecluster, ecircle), 1.484 + OPERATOR 24 && (ecluster, ecluster), 1.485 + OPERATOR 124 &&+ (ecluster, ecluster), 1.486 + OPERATOR 224 @> (ecluster, ecluster), 1.487 + OPERATOR 324 <@ (ecluster, ecluster), 1.488 + OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops, 1.489 + OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops, 1.490 + OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops, 1.491 + OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops, 1.492 + OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops, 1.493 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 1.494 + FUNCTION 2 pgl_gist_union(internal, internal), 1.495 + FUNCTION 3 pgl_gist_compress_ecluster(internal), 1.496 + FUNCTION 4 pgl_gist_decompress(internal), 1.497 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 1.498 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 1.499 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 1.500 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 1.501 + STORAGE ekey_area; 1.502 + 1.503 +CREATE OR REPLACE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) 1.504 + RETURNS float8 1.505 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <=> epoint_with_sample_count($2, $3)'; 1.506 + 1.507 +