pgLatLon
changeset 4:8f79d4a1cdc1
New version 0.2 and update script from version 0.1
author | jbe |
---|---|
date | Mon Aug 22 21:51:33 2016 +0200 (2016-08-22) |
parents | bccc1e155ad8 |
children | 13d26f330e20 |
files | GNUmakefile latlon--0.1--0.2.sql latlon--0.2.sql latlon.control |
line diff
1.1 --- a/GNUmakefile Mon Aug 22 21:35:25 2016 +0200 1.2 +++ b/GNUmakefile Mon Aug 22 21:51:33 2016 +0200 1.3 @@ -1,6 +1,6 @@ 1.4 EXTENSION = latlon 1.5 -DATA = latlon--0.1.sql 1.6 -MODULES = latlon-v0001 1.7 +DATA = latlon--0.1.sql latlon--0.1--0.2.sql latlon--0.2.sql 1.8 +MODULES = latlon-v0001 latlon-v0002 1.9 1.10 PG_CONFIG = pg_config 1.11 PGXS := $(shell $(PG_CONFIG) --pgxs)
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/latlon--0.1--0.2.sql Mon Aug 22 21:51:33 2016 +0200 2.3 @@ -0,0 +1,391 @@ 2.4 + 2.5 +CREATE OR REPLACE FUNCTION ekey_point_in_dummy(cstring) 2.6 + RETURNS ekey_point 2.7 + LANGUAGE C IMMUTABLE STRICT 2.8 + AS '$libdir/latlon-v0002', 'pgl_notimpl'; 2.9 + 2.10 +CREATE OR REPLACE FUNCTION ekey_point_out_dummy(ekey_point) 2.11 + RETURNS cstring 2.12 + LANGUAGE C IMMUTABLE STRICT 2.13 + AS '$libdir/latlon-v0002', 'pgl_notimpl'; 2.14 + 2.15 +CREATE OR REPLACE FUNCTION ekey_area_in_dummy(cstring) 2.16 + RETURNS ekey_area 2.17 + LANGUAGE C IMMUTABLE STRICT 2.18 + AS '$libdir/latlon-v0002', 'pgl_notimpl'; 2.19 + 2.20 +CREATE OR REPLACE FUNCTION ekey_area_out_dummy(ekey_area) 2.21 + RETURNS cstring 2.22 + LANGUAGE C IMMUTABLE STRICT 2.23 + AS '$libdir/latlon-v0002', 'pgl_notimpl'; 2.24 + 2.25 +CREATE OR REPLACE FUNCTION epoint_in(cstring) 2.26 + RETURNS epoint 2.27 + LANGUAGE C IMMUTABLE STRICT 2.28 + AS '$libdir/latlon-v0002', 'pgl_epoint_in'; 2.29 + 2.30 +CREATE OR REPLACE FUNCTION ebox_in(cstring) 2.31 + RETURNS ebox 2.32 + LANGUAGE C IMMUTABLE STRICT 2.33 + AS '$libdir/latlon-v0002', 'pgl_ebox_in'; 2.34 + 2.35 +CREATE OR REPLACE FUNCTION ecircle_in(cstring) 2.36 + RETURNS ecircle 2.37 + LANGUAGE C IMMUTABLE STRICT 2.38 + AS '$libdir/latlon-v0002', 'pgl_ecircle_in'; 2.39 + 2.40 +CREATE OR REPLACE FUNCTION ecluster_in(cstring) 2.41 + RETURNS ecluster 2.42 + LANGUAGE C IMMUTABLE STRICT 2.43 + AS '$libdir/latlon-v0002', 'pgl_ecluster_in'; 2.44 + 2.45 +CREATE OR REPLACE FUNCTION epoint_out(epoint) 2.46 + RETURNS cstring 2.47 + LANGUAGE C IMMUTABLE STRICT 2.48 + AS '$libdir/latlon-v0002', 'pgl_epoint_out'; 2.49 + 2.50 +CREATE OR REPLACE FUNCTION ebox_out(ebox) 2.51 + RETURNS cstring 2.52 + LANGUAGE C IMMUTABLE STRICT 2.53 + AS '$libdir/latlon-v0002', 'pgl_ebox_out'; 2.54 + 2.55 +CREATE OR REPLACE FUNCTION ecircle_out(ecircle) 2.56 + RETURNS cstring 2.57 + LANGUAGE C IMMUTABLE STRICT 2.58 + AS '$libdir/latlon-v0002', 'pgl_ecircle_out'; 2.59 + 2.60 +CREATE OR REPLACE FUNCTION ecluster_out(ecluster) 2.61 + RETURNS cstring 2.62 + LANGUAGE C IMMUTABLE STRICT 2.63 + AS '$libdir/latlon-v0002', 'pgl_ecluster_out'; 2.64 + 2.65 +CREATE OR REPLACE FUNCTION epoint_recv(internal) 2.66 + RETURNS epoint 2.67 + LANGUAGE C IMMUTABLE STRICT 2.68 + AS '$libdir/latlon-v0002', 'pgl_epoint_recv'; 2.69 + 2.70 +CREATE OR REPLACE FUNCTION ebox_recv(internal) 2.71 + RETURNS ebox 2.72 + LANGUAGE C IMMUTABLE STRICT 2.73 + AS '$libdir/latlon-v0002', 'pgl_ebox_recv'; 2.74 + 2.75 +CREATE OR REPLACE FUNCTION ecircle_recv(internal) 2.76 + RETURNS ecircle 2.77 + LANGUAGE C IMMUTABLE STRICT 2.78 + AS '$libdir/latlon-v0002', 'pgl_ecircle_recv'; 2.79 + 2.80 +CREATE OR REPLACE FUNCTION epoint_send(epoint) 2.81 + RETURNS bytea 2.82 + LANGUAGE C IMMUTABLE STRICT 2.83 + AS '$libdir/latlon-v0002', 'pgl_epoint_send'; 2.84 + 2.85 +CREATE OR REPLACE FUNCTION ebox_send(ebox) 2.86 + RETURNS bytea 2.87 + LANGUAGE C IMMUTABLE STRICT 2.88 + AS '$libdir/latlon-v0002', 'pgl_ebox_send'; 2.89 + 2.90 +CREATE OR REPLACE FUNCTION ecircle_send(ecircle) 2.91 + RETURNS bytea 2.92 + LANGUAGE C IMMUTABLE STRICT 2.93 + AS '$libdir/latlon-v0002', 'pgl_ecircle_send'; 2.94 + 2.95 +CREATE OR REPLACE FUNCTION epoint_btree_lt(epoint, epoint) 2.96 + RETURNS boolean 2.97 + LANGUAGE C IMMUTABLE STRICT 2.98 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_lt'; 2.99 + 2.100 +CREATE OR REPLACE FUNCTION epoint_btree_le(epoint, epoint) 2.101 + RETURNS boolean 2.102 + LANGUAGE C IMMUTABLE STRICT 2.103 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_le'; 2.104 + 2.105 +CREATE OR REPLACE FUNCTION epoint_btree_eq(epoint, epoint) 2.106 + RETURNS boolean 2.107 + LANGUAGE C IMMUTABLE STRICT 2.108 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_eq'; 2.109 + 2.110 +CREATE OR REPLACE FUNCTION epoint_btree_ne(epoint, epoint) 2.111 + RETURNS boolean 2.112 + LANGUAGE C IMMUTABLE STRICT 2.113 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_ne'; 2.114 + 2.115 +CREATE OR REPLACE FUNCTION epoint_btree_ge(epoint, epoint) 2.116 + RETURNS boolean 2.117 + LANGUAGE C IMMUTABLE STRICT 2.118 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_ge'; 2.119 + 2.120 +CREATE OR REPLACE FUNCTION epoint_btree_gt(epoint, epoint) 2.121 + RETURNS boolean 2.122 + LANGUAGE C IMMUTABLE STRICT 2.123 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_gt'; 2.124 + 2.125 +CREATE OR REPLACE FUNCTION epoint_btree_cmp(epoint, epoint) 2.126 + RETURNS int4 2.127 + LANGUAGE C IMMUTABLE STRICT 2.128 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_cmp'; 2.129 + 2.130 +CREATE OR REPLACE FUNCTION ebox_btree_lt(ebox, ebox) 2.131 + RETURNS boolean 2.132 + LANGUAGE C IMMUTABLE STRICT 2.133 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_lt'; 2.134 + 2.135 +CREATE OR REPLACE FUNCTION ebox_btree_le(ebox, ebox) 2.136 + RETURNS boolean 2.137 + LANGUAGE C IMMUTABLE STRICT 2.138 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_le'; 2.139 + 2.140 +CREATE OR REPLACE FUNCTION ebox_btree_eq(ebox, ebox) 2.141 + RETURNS boolean 2.142 + LANGUAGE C IMMUTABLE STRICT 2.143 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_eq'; 2.144 + 2.145 +CREATE OR REPLACE FUNCTION ebox_btree_ne(ebox, ebox) 2.146 + RETURNS boolean 2.147 + LANGUAGE C IMMUTABLE STRICT 2.148 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_ne'; 2.149 + 2.150 +CREATE OR REPLACE FUNCTION ebox_btree_ge(ebox, ebox) 2.151 + RETURNS boolean 2.152 + LANGUAGE C IMMUTABLE STRICT 2.153 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_ge'; 2.154 + 2.155 +CREATE OR REPLACE FUNCTION ebox_btree_gt(ebox, ebox) 2.156 + RETURNS boolean 2.157 + LANGUAGE C IMMUTABLE STRICT 2.158 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_gt'; 2.159 + 2.160 +CREATE OR REPLACE FUNCTION ebox_btree_cmp(ebox, ebox) 2.161 + RETURNS int4 2.162 + LANGUAGE C IMMUTABLE STRICT 2.163 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_cmp'; 2.164 + 2.165 +CREATE OR REPLACE FUNCTION ecircle_btree_lt(ecircle, ecircle) 2.166 + RETURNS boolean 2.167 + LANGUAGE C IMMUTABLE STRICT 2.168 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_lt'; 2.169 + 2.170 +CREATE OR REPLACE FUNCTION ecircle_btree_le(ecircle, ecircle) 2.171 + RETURNS boolean 2.172 + LANGUAGE C IMMUTABLE STRICT 2.173 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_le'; 2.174 + 2.175 +CREATE OR REPLACE FUNCTION ecircle_btree_eq(ecircle, ecircle) 2.176 + RETURNS boolean 2.177 + LANGUAGE C IMMUTABLE STRICT 2.178 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_eq'; 2.179 + 2.180 +CREATE OR REPLACE FUNCTION ecircle_btree_ne(ecircle, ecircle) 2.181 + RETURNS boolean 2.182 + LANGUAGE C IMMUTABLE STRICT 2.183 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_ne'; 2.184 + 2.185 +CREATE OR REPLACE FUNCTION ecircle_btree_ge(ecircle, ecircle) 2.186 + RETURNS boolean 2.187 + LANGUAGE C IMMUTABLE STRICT 2.188 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_ge'; 2.189 + 2.190 +CREATE OR REPLACE FUNCTION ecircle_btree_gt(ecircle, ecircle) 2.191 + RETURNS boolean 2.192 + LANGUAGE C IMMUTABLE STRICT 2.193 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_gt'; 2.194 + 2.195 +CREATE OR REPLACE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 2.196 + RETURNS int4 2.197 + LANGUAGE C IMMUTABLE STRICT 2.198 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_cmp'; 2.199 + 2.200 +CREATE OR REPLACE FUNCTION cast_epoint_to_ebox(epoint) 2.201 + RETURNS ebox 2.202 + LANGUAGE C IMMUTABLE STRICT 2.203 + AS '$libdir/latlon-v0002', 'pgl_epoint_to_ebox'; 2.204 + 2.205 +CREATE OR REPLACE FUNCTION cast_epoint_to_ecircle(epoint) 2.206 + RETURNS ecircle 2.207 + LANGUAGE C IMMUTABLE STRICT 2.208 + AS '$libdir/latlon-v0002', 'pgl_epoint_to_ecircle'; 2.209 + 2.210 +CREATE OR REPLACE FUNCTION cast_epoint_to_ecluster(epoint) 2.211 + RETURNS ecluster 2.212 + LANGUAGE C IMMUTABLE STRICT 2.213 + AS '$libdir/latlon-v0002', 'pgl_epoint_to_ecluster'; 2.214 + 2.215 +CREATE OR REPLACE FUNCTION cast_ebox_to_ecluster(ebox) 2.216 + RETURNS ecluster 2.217 + LANGUAGE C IMMUTABLE STRICT 2.218 + AS '$libdir/latlon-v0002', 'pgl_ebox_to_ecluster'; 2.219 + 2.220 +CREATE OR REPLACE FUNCTION epoint(float8, float8) 2.221 + RETURNS epoint 2.222 + LANGUAGE C IMMUTABLE STRICT 2.223 + AS '$libdir/latlon-v0002', 'pgl_create_epoint'; 2.224 + 2.225 +CREATE OR REPLACE FUNCTION empty_ebox() 2.226 + RETURNS ebox 2.227 + LANGUAGE C IMMUTABLE STRICT 2.228 + AS '$libdir/latlon-v0002', 'pgl_create_empty_ebox'; 2.229 + 2.230 +CREATE OR REPLACE FUNCTION ebox(float8, float8, float8, float8) 2.231 + RETURNS ebox 2.232 + LANGUAGE C IMMUTABLE STRICT 2.233 + AS '$libdir/latlon-v0002', 'pgl_create_ebox'; 2.234 + 2.235 +CREATE OR REPLACE FUNCTION ebox(epoint, epoint) 2.236 + RETURNS ebox 2.237 + LANGUAGE C IMMUTABLE STRICT 2.238 + AS '$libdir/latlon-v0002', 'pgl_create_ebox_from_epoints'; 2.239 + 2.240 +CREATE OR REPLACE FUNCTION ecircle(float8, float8, float8) 2.241 + RETURNS ecircle 2.242 + LANGUAGE C IMMUTABLE STRICT 2.243 + AS '$libdir/latlon-v0002', 'pgl_create_ecircle'; 2.244 + 2.245 +CREATE OR REPLACE FUNCTION ecircle(epoint, float8) 2.246 + RETURNS ecircle 2.247 + LANGUAGE C IMMUTABLE STRICT 2.248 + AS '$libdir/latlon-v0002', 'pgl_create_ecircle_from_epoint'; 2.249 + 2.250 +CREATE OR REPLACE FUNCTION latitude(epoint) 2.251 + RETURNS float8 2.252 + LANGUAGE C IMMUTABLE STRICT 2.253 + AS '$libdir/latlon-v0002', 'pgl_epoint_lat'; 2.254 + 2.255 +CREATE OR REPLACE FUNCTION longitude(epoint) 2.256 + RETURNS float8 2.257 + LANGUAGE C IMMUTABLE STRICT 2.258 + AS '$libdir/latlon-v0002', 'pgl_epoint_lon'; 2.259 + 2.260 +CREATE OR REPLACE FUNCTION min_latitude(ebox) 2.261 + RETURNS float8 2.262 + LANGUAGE C IMMUTABLE STRICT 2.263 + AS '$libdir/latlon-v0002', 'pgl_ebox_lat_min'; 2.264 + 2.265 +CREATE OR REPLACE FUNCTION max_latitude(ebox) 2.266 + RETURNS float8 2.267 + LANGUAGE C IMMUTABLE STRICT 2.268 + AS '$libdir/latlon-v0002', 'pgl_ebox_lat_max'; 2.269 + 2.270 +CREATE OR REPLACE FUNCTION min_longitude(ebox) 2.271 + RETURNS float8 2.272 + LANGUAGE C IMMUTABLE STRICT 2.273 + AS '$libdir/latlon-v0002', 'pgl_ebox_lon_min'; 2.274 + 2.275 +CREATE OR REPLACE FUNCTION max_longitude(ebox) 2.276 + RETURNS float8 2.277 + LANGUAGE C IMMUTABLE STRICT 2.278 + AS '$libdir/latlon-v0002', 'pgl_ebox_lon_max'; 2.279 + 2.280 +CREATE OR REPLACE FUNCTION center(ecircle) 2.281 + RETURNS epoint 2.282 + LANGUAGE C IMMUTABLE STRICT 2.283 + AS '$libdir/latlon-v0002', 'pgl_ecircle_center'; 2.284 + 2.285 +CREATE OR REPLACE FUNCTION radius(ecircle) 2.286 + RETURNS float8 2.287 + LANGUAGE C IMMUTABLE STRICT 2.288 + AS '$libdir/latlon-v0002', 'pgl_ecircle_radius'; 2.289 + 2.290 +CREATE OR REPLACE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 2.291 + RETURNS boolean 2.292 + LANGUAGE C IMMUTABLE STRICT 2.293 + AS '$libdir/latlon-v0002', 'pgl_epoint_ebox_overlap'; 2.294 + 2.295 +CREATE OR REPLACE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 2.296 + RETURNS boolean 2.297 + LANGUAGE C IMMUTABLE STRICT 2.298 + AS '$libdir/latlon-v0002', 'pgl_epoint_ecircle_overlap'; 2.299 + 2.300 +CREATE OR REPLACE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 2.301 + RETURNS boolean 2.302 + LANGUAGE C IMMUTABLE STRICT 2.303 + AS '$libdir/latlon-v0002', 'pgl_epoint_ecluster_overlap'; 2.304 + 2.305 +CREATE OR REPLACE FUNCTION ebox_overlap_proc(ebox, ebox) 2.306 + RETURNS boolean 2.307 + LANGUAGE C IMMUTABLE STRICT 2.308 + AS '$libdir/latlon-v0002', 'pgl_ebox_overlap'; 2.309 + 2.310 +CREATE OR REPLACE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 2.311 + RETURNS boolean 2.312 + LANGUAGE C IMMUTABLE STRICT 2.313 + AS '$libdir/latlon-v0002', 'pgl_ecircle_overlap'; 2.314 + 2.315 +CREATE OR REPLACE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 2.316 + RETURNS boolean 2.317 + LANGUAGE C IMMUTABLE STRICT 2.318 + AS '$libdir/latlon-v0002', 'pgl_ecircle_ecluster_overlap'; 2.319 + 2.320 +CREATE OR REPLACE FUNCTION epoint_distance_proc(epoint, epoint) 2.321 + RETURNS float8 2.322 + LANGUAGE C IMMUTABLE STRICT 2.323 + AS '$libdir/latlon-v0002', 'pgl_epoint_distance'; 2.324 + 2.325 +CREATE OR REPLACE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 2.326 + RETURNS float8 2.327 + LANGUAGE C IMMUTABLE STRICT 2.328 + AS '$libdir/latlon-v0002', 'pgl_epoint_ecircle_distance'; 2.329 + 2.330 +CREATE OR REPLACE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 2.331 + RETURNS float8 2.332 + LANGUAGE C IMMUTABLE STRICT 2.333 + AS '$libdir/latlon-v0002', 'pgl_epoint_ecluster_distance'; 2.334 + 2.335 +CREATE OR REPLACE FUNCTION ecircle_distance_proc(ecircle, ecircle) 2.336 + RETURNS float8 2.337 + LANGUAGE C IMMUTABLE STRICT 2.338 + AS '$libdir/latlon-v0002', 'pgl_ecircle_distance'; 2.339 + 2.340 +CREATE OR REPLACE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 2.341 + RETURNS float8 2.342 + LANGUAGE C IMMUTABLE STRICT 2.343 + AS '$libdir/latlon-v0002', 'pgl_ecircle_ecluster_distance'; 2.344 + 2.345 +CREATE OR REPLACE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 2.346 + RETURNS boolean 2.347 + LANGUAGE C STRICT 2.348 + AS '$libdir/latlon-v0002', 'pgl_gist_consistent'; 2.349 + 2.350 +CREATE OR REPLACE FUNCTION pgl_gist_union(internal, internal) 2.351 + RETURNS internal 2.352 + LANGUAGE C STRICT 2.353 + AS '$libdir/latlon-v0002', 'pgl_gist_union'; 2.354 + 2.355 +CREATE OR REPLACE FUNCTION pgl_gist_compress_epoint(internal) 2.356 + RETURNS internal 2.357 + LANGUAGE C STRICT 2.358 + AS '$libdir/latlon-v0002', 'pgl_gist_compress_epoint'; 2.359 + 2.360 +CREATE OR REPLACE FUNCTION pgl_gist_compress_ecircle(internal) 2.361 + RETURNS internal 2.362 + LANGUAGE C STRICT 2.363 + AS '$libdir/latlon-v0002', 'pgl_gist_compress_ecircle'; 2.364 + 2.365 +CREATE OR REPLACE FUNCTION pgl_gist_compress_ecluster(internal) 2.366 + RETURNS internal 2.367 + LANGUAGE C STRICT 2.368 + AS '$libdir/latlon-v0002', 'pgl_gist_compress_ecluster'; 2.369 + 2.370 +CREATE OR REPLACE FUNCTION pgl_gist_decompress(internal) 2.371 + RETURNS internal 2.372 + LANGUAGE C STRICT 2.373 + AS '$libdir/latlon-v0002', 'pgl_gist_decompress'; 2.374 + 2.375 +CREATE OR REPLACE FUNCTION pgl_gist_penalty(internal, internal, internal) 2.376 + RETURNS internal 2.377 + LANGUAGE C STRICT 2.378 + AS '$libdir/latlon-v0002', 'pgl_gist_penalty'; 2.379 + 2.380 +CREATE OR REPLACE FUNCTION pgl_gist_picksplit(internal, internal) 2.381 + RETURNS internal 2.382 + LANGUAGE C STRICT 2.383 + AS '$libdir/latlon-v0002', 'pgl_gist_picksplit'; 2.384 + 2.385 +CREATE OR REPLACE FUNCTION pgl_gist_same(internal, internal, internal) 2.386 + RETURNS internal 2.387 + LANGUAGE C STRICT 2.388 + AS '$libdir/latlon-v0002', 'pgl_gist_same'; 2.389 + 2.390 +CREATE OR REPLACE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 2.391 + RETURNS internal 2.392 + LANGUAGE C STRICT 2.393 + AS '$libdir/latlon-v0002', 'pgl_gist_distance'; 2.394 +
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/latlon--0.2.sql Mon Aug 22 21:51:33 2016 +0200 3.3 @@ -0,0 +1,1205 @@ 3.4 + 3.5 +---------------------------------------- 3.6 +-- forward declarations (shell types) -- 3.7 +---------------------------------------- 3.8 + 3.9 +CREATE TYPE epoint; 3.10 +CREATE TYPE ebox; 3.11 +CREATE TYPE ecircle; 3.12 +CREATE TYPE ecluster; 3.13 + 3.14 + 3.15 +------------------------------------------------------------ 3.16 +-- dummy input/output functions for dummy index key types -- 3.17 +------------------------------------------------------------ 3.18 + 3.19 +CREATE FUNCTION ekey_point_in_dummy(cstring) 3.20 + RETURNS ekey_point 3.21 + LANGUAGE C IMMUTABLE STRICT 3.22 + AS '$libdir/latlon-v0002', 'pgl_notimpl'; 3.23 + 3.24 +CREATE FUNCTION ekey_point_out_dummy(ekey_point) 3.25 + RETURNS cstring 3.26 + LANGUAGE C IMMUTABLE STRICT 3.27 + AS '$libdir/latlon-v0002', 'pgl_notimpl'; 3.28 + 3.29 +CREATE FUNCTION ekey_area_in_dummy(cstring) 3.30 + RETURNS ekey_area 3.31 + LANGUAGE C IMMUTABLE STRICT 3.32 + AS '$libdir/latlon-v0002', 'pgl_notimpl'; 3.33 + 3.34 +CREATE FUNCTION ekey_area_out_dummy(ekey_area) 3.35 + RETURNS cstring 3.36 + LANGUAGE C IMMUTABLE STRICT 3.37 + AS '$libdir/latlon-v0002', 'pgl_notimpl'; 3.38 + 3.39 + 3.40 +-------------------------- 3.41 +-- text input functions -- 3.42 +-------------------------- 3.43 + 3.44 +CREATE FUNCTION epoint_in(cstring) 3.45 + RETURNS epoint 3.46 + LANGUAGE C IMMUTABLE STRICT 3.47 + AS '$libdir/latlon-v0002', 'pgl_epoint_in'; 3.48 + 3.49 +CREATE FUNCTION ebox_in(cstring) 3.50 + RETURNS ebox 3.51 + LANGUAGE C IMMUTABLE STRICT 3.52 + AS '$libdir/latlon-v0002', 'pgl_ebox_in'; 3.53 + 3.54 +CREATE FUNCTION ecircle_in(cstring) 3.55 + RETURNS ecircle 3.56 + LANGUAGE C IMMUTABLE STRICT 3.57 + AS '$libdir/latlon-v0002', 'pgl_ecircle_in'; 3.58 + 3.59 +CREATE FUNCTION ecluster_in(cstring) 3.60 + RETURNS ecluster 3.61 + LANGUAGE C IMMUTABLE STRICT 3.62 + AS '$libdir/latlon-v0002', 'pgl_ecluster_in'; 3.63 + 3.64 + 3.65 +--------------------------- 3.66 +-- text output functions -- 3.67 +--------------------------- 3.68 + 3.69 +CREATE FUNCTION epoint_out(epoint) 3.70 + RETURNS cstring 3.71 + LANGUAGE C IMMUTABLE STRICT 3.72 + AS '$libdir/latlon-v0002', 'pgl_epoint_out'; 3.73 + 3.74 +CREATE FUNCTION ebox_out(ebox) 3.75 + RETURNS cstring 3.76 + LANGUAGE C IMMUTABLE STRICT 3.77 + AS '$libdir/latlon-v0002', 'pgl_ebox_out'; 3.78 + 3.79 +CREATE FUNCTION ecircle_out(ecircle) 3.80 + RETURNS cstring 3.81 + LANGUAGE C IMMUTABLE STRICT 3.82 + AS '$libdir/latlon-v0002', 'pgl_ecircle_out'; 3.83 + 3.84 +CREATE FUNCTION ecluster_out(ecluster) 3.85 + RETURNS cstring 3.86 + LANGUAGE C IMMUTABLE STRICT 3.87 + AS '$libdir/latlon-v0002', 'pgl_ecluster_out'; 3.88 + 3.89 + 3.90 +-------------------------- 3.91 +-- binary I/O functions -- 3.92 +-------------------------- 3.93 + 3.94 +CREATE FUNCTION epoint_recv(internal) 3.95 + RETURNS epoint 3.96 + LANGUAGE C IMMUTABLE STRICT 3.97 + AS '$libdir/latlon-v0002', 'pgl_epoint_recv'; 3.98 + 3.99 +CREATE FUNCTION ebox_recv(internal) 3.100 + RETURNS ebox 3.101 + LANGUAGE C IMMUTABLE STRICT 3.102 + AS '$libdir/latlon-v0002', 'pgl_ebox_recv'; 3.103 + 3.104 +CREATE FUNCTION ecircle_recv(internal) 3.105 + RETURNS ecircle 3.106 + LANGUAGE C IMMUTABLE STRICT 3.107 + AS '$libdir/latlon-v0002', 'pgl_ecircle_recv'; 3.108 + 3.109 +CREATE FUNCTION epoint_send(epoint) 3.110 + RETURNS bytea 3.111 + LANGUAGE C IMMUTABLE STRICT 3.112 + AS '$libdir/latlon-v0002', 'pgl_epoint_send'; 3.113 + 3.114 +CREATE FUNCTION ebox_send(ebox) 3.115 + RETURNS bytea 3.116 + LANGUAGE C IMMUTABLE STRICT 3.117 + AS '$libdir/latlon-v0002', 'pgl_ebox_send'; 3.118 + 3.119 +CREATE FUNCTION ecircle_send(ecircle) 3.120 + RETURNS bytea 3.121 + LANGUAGE C IMMUTABLE STRICT 3.122 + AS '$libdir/latlon-v0002', 'pgl_ecircle_send'; 3.123 + 3.124 + 3.125 +----------------------------------------------- 3.126 +-- type definitions of dummy index key types -- 3.127 +----------------------------------------------- 3.128 + 3.129 +CREATE TYPE ekey_point ( 3.130 + internallength = 8, 3.131 + input = ekey_point_in_dummy, 3.132 + output = ekey_point_out_dummy, 3.133 + alignment = char ); 3.134 + 3.135 +CREATE TYPE ekey_area ( 3.136 + internallength = 9, 3.137 + input = ekey_area_in_dummy, 3.138 + output = ekey_area_out_dummy, 3.139 + alignment = char ); 3.140 + 3.141 + 3.142 +------------------------------------------ 3.143 +-- definitions of geographic data types -- 3.144 +------------------------------------------ 3.145 + 3.146 +CREATE TYPE epoint ( 3.147 + internallength = 16, 3.148 + input = epoint_in, 3.149 + output = epoint_out, 3.150 + receive = epoint_recv, 3.151 + send = epoint_send, 3.152 + alignment = double ); 3.153 + 3.154 +CREATE TYPE ebox ( 3.155 + internallength = 32, 3.156 + input = ebox_in, 3.157 + output = ebox_out, 3.158 + receive = ebox_recv, 3.159 + send = ebox_send, 3.160 + alignment = double ); 3.161 + 3.162 +CREATE TYPE ecircle ( 3.163 + internallength = 24, 3.164 + input = ecircle_in, 3.165 + output = ecircle_out, 3.166 + receive = ecircle_recv, 3.167 + send = ecircle_send, 3.168 + alignment = double ); 3.169 + 3.170 +CREATE TYPE ecluster ( 3.171 + internallength = VARIABLE, 3.172 + input = ecluster_in, 3.173 + output = ecluster_out, 3.174 + alignment = double, 3.175 + storage = external ); 3.176 + 3.177 + 3.178 +-------------------- 3.179 +-- B-tree support -- 3.180 +-------------------- 3.181 + 3.182 +-- begin of B-tree support for epoint 3.183 + 3.184 +CREATE FUNCTION epoint_btree_lt(epoint, epoint) 3.185 + RETURNS boolean 3.186 + LANGUAGE C IMMUTABLE STRICT 3.187 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_lt'; 3.188 + 3.189 +CREATE FUNCTION epoint_btree_le(epoint, epoint) 3.190 + RETURNS boolean 3.191 + LANGUAGE C IMMUTABLE STRICT 3.192 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_le'; 3.193 + 3.194 +CREATE FUNCTION epoint_btree_eq(epoint, epoint) 3.195 + RETURNS boolean 3.196 + LANGUAGE C IMMUTABLE STRICT 3.197 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_eq'; 3.198 + 3.199 +CREATE FUNCTION epoint_btree_ne(epoint, epoint) 3.200 + RETURNS boolean 3.201 + LANGUAGE C IMMUTABLE STRICT 3.202 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_ne'; 3.203 + 3.204 +CREATE FUNCTION epoint_btree_ge(epoint, epoint) 3.205 + RETURNS boolean 3.206 + LANGUAGE C IMMUTABLE STRICT 3.207 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_ge'; 3.208 + 3.209 +CREATE FUNCTION epoint_btree_gt(epoint, epoint) 3.210 + RETURNS boolean 3.211 + LANGUAGE C IMMUTABLE STRICT 3.212 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_gt'; 3.213 + 3.214 +CREATE OPERATOR <<< ( 3.215 + leftarg = epoint, 3.216 + rightarg = epoint, 3.217 + procedure = epoint_btree_lt, 3.218 + commutator = >>>, 3.219 + negator = >>>=, 3.220 + restrict = scalarltsel, 3.221 + join = scalarltjoinsel 3.222 +); 3.223 + 3.224 +CREATE OPERATOR <<<= ( 3.225 + leftarg = epoint, 3.226 + rightarg = epoint, 3.227 + procedure = epoint_btree_le, 3.228 + commutator = >>>=, 3.229 + negator = >>>, 3.230 + restrict = scalarltsel, 3.231 + join = scalarltjoinsel 3.232 +); 3.233 + 3.234 +CREATE OPERATOR = ( 3.235 + leftarg = epoint, 3.236 + rightarg = epoint, 3.237 + procedure = epoint_btree_eq, 3.238 + commutator = =, 3.239 + negator = <>, 3.240 + restrict = eqsel, 3.241 + join = eqjoinsel, 3.242 + merges 3.243 +); 3.244 + 3.245 +CREATE OPERATOR <> ( 3.246 + leftarg = epoint, 3.247 + rightarg = epoint, 3.248 + procedure = epoint_btree_eq, 3.249 + commutator = <>, 3.250 + negator = =, 3.251 + restrict = neqsel, 3.252 + join = neqjoinsel 3.253 +); 3.254 + 3.255 +CREATE OPERATOR >>>= ( 3.256 + leftarg = epoint, 3.257 + rightarg = epoint, 3.258 + procedure = epoint_btree_ge, 3.259 + commutator = <<<=, 3.260 + negator = <<<, 3.261 + restrict = scalargtsel, 3.262 + join = scalargtjoinsel 3.263 +); 3.264 + 3.265 +CREATE OPERATOR >>> ( 3.266 + leftarg = epoint, 3.267 + rightarg = epoint, 3.268 + procedure = epoint_btree_gt, 3.269 + commutator = <<<, 3.270 + negator = <<<=, 3.271 + restrict = scalargtsel, 3.272 + join = scalargtjoinsel 3.273 +); 3.274 + 3.275 +CREATE FUNCTION epoint_btree_cmp(epoint, epoint) 3.276 + RETURNS int4 3.277 + LANGUAGE C IMMUTABLE STRICT 3.278 + AS '$libdir/latlon-v0002', 'pgl_btree_epoint_cmp'; 3.279 + 3.280 +CREATE OPERATOR CLASS epoint_btree_ops 3.281 + DEFAULT FOR TYPE epoint USING btree AS 3.282 + OPERATOR 1 <<< , 3.283 + OPERATOR 2 <<<= , 3.284 + OPERATOR 3 = , 3.285 + OPERATOR 4 >>>= , 3.286 + OPERATOR 5 >>> , 3.287 + FUNCTION 1 epoint_btree_cmp(epoint, epoint); 3.288 + 3.289 +-- end of B-tree support for epoint 3.290 + 3.291 +-- begin of B-tree support for ebox 3.292 + 3.293 +CREATE FUNCTION ebox_btree_lt(ebox, ebox) 3.294 + RETURNS boolean 3.295 + LANGUAGE C IMMUTABLE STRICT 3.296 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_lt'; 3.297 + 3.298 +CREATE FUNCTION ebox_btree_le(ebox, ebox) 3.299 + RETURNS boolean 3.300 + LANGUAGE C IMMUTABLE STRICT 3.301 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_le'; 3.302 + 3.303 +CREATE FUNCTION ebox_btree_eq(ebox, ebox) 3.304 + RETURNS boolean 3.305 + LANGUAGE C IMMUTABLE STRICT 3.306 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_eq'; 3.307 + 3.308 +CREATE FUNCTION ebox_btree_ne(ebox, ebox) 3.309 + RETURNS boolean 3.310 + LANGUAGE C IMMUTABLE STRICT 3.311 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_ne'; 3.312 + 3.313 +CREATE FUNCTION ebox_btree_ge(ebox, ebox) 3.314 + RETURNS boolean 3.315 + LANGUAGE C IMMUTABLE STRICT 3.316 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_ge'; 3.317 + 3.318 +CREATE FUNCTION ebox_btree_gt(ebox, ebox) 3.319 + RETURNS boolean 3.320 + LANGUAGE C IMMUTABLE STRICT 3.321 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_gt'; 3.322 + 3.323 +CREATE OPERATOR <<< ( 3.324 + leftarg = ebox, 3.325 + rightarg = ebox, 3.326 + procedure = ebox_btree_lt, 3.327 + commutator = >>>, 3.328 + negator = >>>=, 3.329 + restrict = scalarltsel, 3.330 + join = scalarltjoinsel 3.331 +); 3.332 + 3.333 +CREATE OPERATOR <<<= ( 3.334 + leftarg = ebox, 3.335 + rightarg = ebox, 3.336 + procedure = ebox_btree_le, 3.337 + commutator = >>>=, 3.338 + negator = >>>, 3.339 + restrict = scalarltsel, 3.340 + join = scalarltjoinsel 3.341 +); 3.342 + 3.343 +CREATE OPERATOR = ( 3.344 + leftarg = ebox, 3.345 + rightarg = ebox, 3.346 + procedure = ebox_btree_eq, 3.347 + commutator = =, 3.348 + negator = <>, 3.349 + restrict = eqsel, 3.350 + join = eqjoinsel, 3.351 + merges 3.352 +); 3.353 + 3.354 +CREATE OPERATOR <> ( 3.355 + leftarg = ebox, 3.356 + rightarg = ebox, 3.357 + procedure = ebox_btree_eq, 3.358 + commutator = <>, 3.359 + negator = =, 3.360 + restrict = neqsel, 3.361 + join = neqjoinsel 3.362 +); 3.363 + 3.364 +CREATE OPERATOR >>>= ( 3.365 + leftarg = ebox, 3.366 + rightarg = ebox, 3.367 + procedure = ebox_btree_ge, 3.368 + commutator = <<<=, 3.369 + negator = <<<, 3.370 + restrict = scalargtsel, 3.371 + join = scalargtjoinsel 3.372 +); 3.373 + 3.374 +CREATE OPERATOR >>> ( 3.375 + leftarg = ebox, 3.376 + rightarg = ebox, 3.377 + procedure = ebox_btree_gt, 3.378 + commutator = <<<, 3.379 + negator = <<<=, 3.380 + restrict = scalargtsel, 3.381 + join = scalargtjoinsel 3.382 +); 3.383 + 3.384 +CREATE FUNCTION ebox_btree_cmp(ebox, ebox) 3.385 + RETURNS int4 3.386 + LANGUAGE C IMMUTABLE STRICT 3.387 + AS '$libdir/latlon-v0002', 'pgl_btree_ebox_cmp'; 3.388 + 3.389 +CREATE OPERATOR CLASS ebox_btree_ops 3.390 + DEFAULT FOR TYPE ebox USING btree AS 3.391 + OPERATOR 1 <<< , 3.392 + OPERATOR 2 <<<= , 3.393 + OPERATOR 3 = , 3.394 + OPERATOR 4 >>>= , 3.395 + OPERATOR 5 >>> , 3.396 + FUNCTION 1 ebox_btree_cmp(ebox, ebox); 3.397 + 3.398 +-- end of B-tree support for ebox 3.399 + 3.400 +-- begin of B-tree support for ecircle 3.401 + 3.402 +CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle) 3.403 + RETURNS boolean 3.404 + LANGUAGE C IMMUTABLE STRICT 3.405 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_lt'; 3.406 + 3.407 +CREATE FUNCTION ecircle_btree_le(ecircle, ecircle) 3.408 + RETURNS boolean 3.409 + LANGUAGE C IMMUTABLE STRICT 3.410 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_le'; 3.411 + 3.412 +CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle) 3.413 + RETURNS boolean 3.414 + LANGUAGE C IMMUTABLE STRICT 3.415 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_eq'; 3.416 + 3.417 +CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle) 3.418 + RETURNS boolean 3.419 + LANGUAGE C IMMUTABLE STRICT 3.420 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_ne'; 3.421 + 3.422 +CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle) 3.423 + RETURNS boolean 3.424 + LANGUAGE C IMMUTABLE STRICT 3.425 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_ge'; 3.426 + 3.427 +CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle) 3.428 + RETURNS boolean 3.429 + LANGUAGE C IMMUTABLE STRICT 3.430 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_gt'; 3.431 + 3.432 +CREATE OPERATOR <<< ( 3.433 + leftarg = ecircle, 3.434 + rightarg = ecircle, 3.435 + procedure = ecircle_btree_lt, 3.436 + commutator = >>>, 3.437 + negator = >>>=, 3.438 + restrict = scalarltsel, 3.439 + join = scalarltjoinsel 3.440 +); 3.441 + 3.442 +CREATE OPERATOR <<<= ( 3.443 + leftarg = ecircle, 3.444 + rightarg = ecircle, 3.445 + procedure = ecircle_btree_le, 3.446 + commutator = >>>=, 3.447 + negator = >>>, 3.448 + restrict = scalarltsel, 3.449 + join = scalarltjoinsel 3.450 +); 3.451 + 3.452 +CREATE OPERATOR = ( 3.453 + leftarg = ecircle, 3.454 + rightarg = ecircle, 3.455 + procedure = ecircle_btree_eq, 3.456 + commutator = =, 3.457 + negator = <>, 3.458 + restrict = eqsel, 3.459 + join = eqjoinsel, 3.460 + merges 3.461 +); 3.462 + 3.463 +CREATE OPERATOR <> ( 3.464 + leftarg = ecircle, 3.465 + rightarg = ecircle, 3.466 + procedure = ecircle_btree_eq, 3.467 + commutator = <>, 3.468 + negator = =, 3.469 + restrict = neqsel, 3.470 + join = neqjoinsel 3.471 +); 3.472 + 3.473 +CREATE OPERATOR >>>= ( 3.474 + leftarg = ecircle, 3.475 + rightarg = ecircle, 3.476 + procedure = ecircle_btree_ge, 3.477 + commutator = <<<=, 3.478 + negator = <<<, 3.479 + restrict = scalargtsel, 3.480 + join = scalargtjoinsel 3.481 +); 3.482 + 3.483 +CREATE OPERATOR >>> ( 3.484 + leftarg = ecircle, 3.485 + rightarg = ecircle, 3.486 + procedure = ecircle_btree_gt, 3.487 + commutator = <<<, 3.488 + negator = <<<=, 3.489 + restrict = scalargtsel, 3.490 + join = scalargtjoinsel 3.491 +); 3.492 + 3.493 +CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 3.494 + RETURNS int4 3.495 + LANGUAGE C IMMUTABLE STRICT 3.496 + AS '$libdir/latlon-v0002', 'pgl_btree_ecircle_cmp'; 3.497 + 3.498 +CREATE OPERATOR CLASS ecircle_btree_ops 3.499 + DEFAULT FOR TYPE ecircle USING btree AS 3.500 + OPERATOR 1 <<< , 3.501 + OPERATOR 2 <<<= , 3.502 + OPERATOR 3 = , 3.503 + OPERATOR 4 >>>= , 3.504 + OPERATOR 5 >>> , 3.505 + FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle); 3.506 + 3.507 +-- end of B-tree support for ecircle 3.508 + 3.509 + 3.510 +---------------- 3.511 +-- type casts -- 3.512 +---------------- 3.513 + 3.514 +CREATE FUNCTION cast_epoint_to_ebox(epoint) 3.515 + RETURNS ebox 3.516 + LANGUAGE C IMMUTABLE STRICT 3.517 + AS '$libdir/latlon-v0002', 'pgl_epoint_to_ebox'; 3.518 + 3.519 +CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint); 3.520 + 3.521 +CREATE FUNCTION cast_epoint_to_ecircle(epoint) 3.522 + RETURNS ecircle 3.523 + LANGUAGE C IMMUTABLE STRICT 3.524 + AS '$libdir/latlon-v0002', 'pgl_epoint_to_ecircle'; 3.525 + 3.526 +CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint); 3.527 + 3.528 +CREATE FUNCTION cast_epoint_to_ecluster(epoint) 3.529 + RETURNS ecluster 3.530 + LANGUAGE C IMMUTABLE STRICT 3.531 + AS '$libdir/latlon-v0002', 'pgl_epoint_to_ecluster'; 3.532 + 3.533 +CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint); 3.534 + 3.535 +CREATE FUNCTION cast_ebox_to_ecluster(ebox) 3.536 + RETURNS ecluster 3.537 + LANGUAGE C IMMUTABLE STRICT 3.538 + AS '$libdir/latlon-v0002', 'pgl_ebox_to_ecluster'; 3.539 + 3.540 +CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox); 3.541 + 3.542 + 3.543 +--------------------------- 3.544 +-- constructor functions -- 3.545 +--------------------------- 3.546 + 3.547 +CREATE FUNCTION epoint(float8, float8) 3.548 + RETURNS epoint 3.549 + LANGUAGE C IMMUTABLE STRICT 3.550 + AS '$libdir/latlon-v0002', 'pgl_create_epoint'; 3.551 + 3.552 +CREATE FUNCTION epoint_latlon(float8, float8) 3.553 + RETURNS epoint 3.554 + LANGUAGE SQL IMMUTABLE STRICT AS $$ 3.555 + SELECT epoint($1, $2) 3.556 + $$; 3.557 + 3.558 +CREATE FUNCTION epoint_lonlat(float8, float8) 3.559 + RETURNS epoint 3.560 + LANGUAGE SQL IMMUTABLE STRICT AS $$ 3.561 + SELECT epoint($2, $1) 3.562 + $$; 3.563 + 3.564 +CREATE FUNCTION empty_ebox() 3.565 + RETURNS ebox 3.566 + LANGUAGE C IMMUTABLE STRICT 3.567 + AS '$libdir/latlon-v0002', 'pgl_create_empty_ebox'; 3.568 + 3.569 +CREATE FUNCTION ebox(float8, float8, float8, float8) 3.570 + RETURNS ebox 3.571 + LANGUAGE C IMMUTABLE STRICT 3.572 + AS '$libdir/latlon-v0002', 'pgl_create_ebox'; 3.573 + 3.574 +CREATE FUNCTION ebox(epoint, epoint) 3.575 + RETURNS ebox 3.576 + LANGUAGE C IMMUTABLE STRICT 3.577 + AS '$libdir/latlon-v0002', 'pgl_create_ebox_from_epoints'; 3.578 + 3.579 +CREATE FUNCTION ecircle(float8, float8, float8) 3.580 + RETURNS ecircle 3.581 + LANGUAGE C IMMUTABLE STRICT 3.582 + AS '$libdir/latlon-v0002', 'pgl_create_ecircle'; 3.583 + 3.584 +CREATE FUNCTION ecircle(epoint, float8) 3.585 + RETURNS ecircle 3.586 + LANGUAGE C IMMUTABLE STRICT 3.587 + AS '$libdir/latlon-v0002', 'pgl_create_ecircle_from_epoint'; 3.588 + 3.589 +CREATE FUNCTION ecluster_concat(ecluster[]) 3.590 + RETURNS ecluster 3.591 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.592 + SELECT array_to_string($1, ' ')::ecluster 3.593 + $$; 3.594 + 3.595 +CREATE FUNCTION ecluster_concat(ecluster, ecluster) 3.596 + RETURNS ecluster 3.597 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.598 + SELECT ($1::text || ' ' || $2::text)::ecluster 3.599 + $$; 3.600 + 3.601 +CREATE FUNCTION ecluster_create_multipoint(epoint[]) 3.602 + RETURNS ecluster 3.603 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.604 + SELECT 3.605 + array_to_string(array_agg('point (' || unnest || ')'), ' ')::ecluster 3.606 + FROM unnest($1) 3.607 + $$; 3.608 + 3.609 +CREATE FUNCTION ecluster_create_path(epoint[]) 3.610 + RETURNS ecluster 3.611 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.612 + SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 3.613 + ('path (' || array_to_string($1, ' ') || ')')::ecluster 3.614 + END 3.615 + FROM array_to_string($1, ' ') AS "str" 3.616 + $$; 3.617 + 3.618 +CREATE FUNCTION ecluster_create_outline(epoint[]) 3.619 + RETURNS ecluster 3.620 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.621 + SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 3.622 + ('outline (' || array_to_string($1, ' ') || ')')::ecluster 3.623 + END 3.624 + FROM array_to_string($1, ' ') AS "str" 3.625 + $$; 3.626 + 3.627 +CREATE FUNCTION ecluster_create_polygon(epoint[]) 3.628 + RETURNS ecluster 3.629 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.630 + SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 3.631 + ('polygon (' || array_to_string($1, ' ') || ')')::ecluster 3.632 + END 3.633 + FROM array_to_string($1, ' ') AS "str" 3.634 + $$; 3.635 + 3.636 + 3.637 +---------------------- 3.638 +-- getter functions -- 3.639 +---------------------- 3.640 + 3.641 +CREATE FUNCTION latitude(epoint) 3.642 + RETURNS float8 3.643 + LANGUAGE C IMMUTABLE STRICT 3.644 + AS '$libdir/latlon-v0002', 'pgl_epoint_lat'; 3.645 + 3.646 +CREATE FUNCTION longitude(epoint) 3.647 + RETURNS float8 3.648 + LANGUAGE C IMMUTABLE STRICT 3.649 + AS '$libdir/latlon-v0002', 'pgl_epoint_lon'; 3.650 + 3.651 +CREATE FUNCTION min_latitude(ebox) 3.652 + RETURNS float8 3.653 + LANGUAGE C IMMUTABLE STRICT 3.654 + AS '$libdir/latlon-v0002', 'pgl_ebox_lat_min'; 3.655 + 3.656 +CREATE FUNCTION max_latitude(ebox) 3.657 + RETURNS float8 3.658 + LANGUAGE C IMMUTABLE STRICT 3.659 + AS '$libdir/latlon-v0002', 'pgl_ebox_lat_max'; 3.660 + 3.661 +CREATE FUNCTION min_longitude(ebox) 3.662 + RETURNS float8 3.663 + LANGUAGE C IMMUTABLE STRICT 3.664 + AS '$libdir/latlon-v0002', 'pgl_ebox_lon_min'; 3.665 + 3.666 +CREATE FUNCTION max_longitude(ebox) 3.667 + RETURNS float8 3.668 + LANGUAGE C IMMUTABLE STRICT 3.669 + AS '$libdir/latlon-v0002', 'pgl_ebox_lon_max'; 3.670 + 3.671 +CREATE FUNCTION center(ecircle) 3.672 + RETURNS epoint 3.673 + LANGUAGE C IMMUTABLE STRICT 3.674 + AS '$libdir/latlon-v0002', 'pgl_ecircle_center'; 3.675 + 3.676 +CREATE FUNCTION radius(ecircle) 3.677 + RETURNS float8 3.678 + LANGUAGE C IMMUTABLE STRICT 3.679 + AS '$libdir/latlon-v0002', 'pgl_ecircle_radius'; 3.680 + 3.681 +CREATE FUNCTION ecluster_extract_points(ecluster) 3.682 + RETURNS SETOF epoint 3.683 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.684 + SELECT "match"[2]::epoint 3.685 + FROM regexp_matches($1::text, e'(^| )point \\(([^)]+)\\)', 'g') AS "match" 3.686 + $$; 3.687 + 3.688 +CREATE FUNCTION ecluster_extract_paths(ecluster) 3.689 + RETURNS SETOF epoint[] 3.690 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.691 + SELECT ( 3.692 + SELECT array_agg("m2"[1]::epoint) 3.693 + FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 3.694 + ) 3.695 + FROM regexp_matches($1::text, e'(^| )path \\(([^)]+)\\)', 'g') AS "m1" 3.696 + $$; 3.697 + 3.698 +CREATE FUNCTION ecluster_extract_outlines(ecluster) 3.699 + RETURNS SETOF epoint[] 3.700 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.701 + SELECT ( 3.702 + SELECT array_agg("m2"[1]::epoint) 3.703 + FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 3.704 + ) 3.705 + FROM regexp_matches($1::text, e'(^| )outline \\(([^)]+)\\)', 'g') AS "m1" 3.706 + $$; 3.707 + 3.708 +CREATE FUNCTION ecluster_extract_polygons(ecluster) 3.709 + RETURNS SETOF epoint[] 3.710 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.711 + SELECT ( 3.712 + SELECT array_agg("m2"[1]::epoint) 3.713 + FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 3.714 + ) 3.715 + FROM regexp_matches($1::text, e'(^| )polygon \\(([^)]+)\\)', 'g') AS "m1" 3.716 + $$; 3.717 + 3.718 + 3.719 +--------------- 3.720 +-- operators -- 3.721 +--------------- 3.722 + 3.723 +CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 3.724 + RETURNS boolean 3.725 + LANGUAGE C IMMUTABLE STRICT 3.726 + AS '$libdir/latlon-v0002', 'pgl_epoint_ebox_overlap'; 3.727 + 3.728 +CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 3.729 + RETURNS boolean 3.730 + LANGUAGE C IMMUTABLE STRICT 3.731 + AS '$libdir/latlon-v0002', 'pgl_epoint_ecircle_overlap'; 3.732 + 3.733 +CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 3.734 + RETURNS boolean 3.735 + LANGUAGE C IMMUTABLE STRICT 3.736 + AS '$libdir/latlon-v0002', 'pgl_epoint_ecluster_overlap'; 3.737 + 3.738 +CREATE FUNCTION ebox_overlap_proc(ebox, ebox) 3.739 + RETURNS boolean 3.740 + LANGUAGE C IMMUTABLE STRICT 3.741 + AS '$libdir/latlon-v0002', 'pgl_ebox_overlap'; 3.742 + 3.743 +CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 3.744 + RETURNS boolean 3.745 + LANGUAGE C IMMUTABLE STRICT 3.746 + AS '$libdir/latlon-v0002', 'pgl_ecircle_overlap'; 3.747 + 3.748 +CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 3.749 + RETURNS boolean 3.750 + LANGUAGE C IMMUTABLE STRICT 3.751 + AS '$libdir/latlon-v0002', 'pgl_ecircle_ecluster_overlap'; 3.752 + 3.753 +CREATE FUNCTION epoint_distance_proc(epoint, epoint) 3.754 + RETURNS float8 3.755 + LANGUAGE C IMMUTABLE STRICT 3.756 + AS '$libdir/latlon-v0002', 'pgl_epoint_distance'; 3.757 + 3.758 +CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 3.759 + RETURNS float8 3.760 + LANGUAGE C IMMUTABLE STRICT 3.761 + AS '$libdir/latlon-v0002', 'pgl_epoint_ecircle_distance'; 3.762 + 3.763 +CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 3.764 + RETURNS float8 3.765 + LANGUAGE C IMMUTABLE STRICT 3.766 + AS '$libdir/latlon-v0002', 'pgl_epoint_ecluster_distance'; 3.767 + 3.768 +CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle) 3.769 + RETURNS float8 3.770 + LANGUAGE C IMMUTABLE STRICT 3.771 + AS '$libdir/latlon-v0002', 'pgl_ecircle_distance'; 3.772 + 3.773 +CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 3.774 + RETURNS float8 3.775 + LANGUAGE C IMMUTABLE STRICT 3.776 + AS '$libdir/latlon-v0002', 'pgl_ecircle_ecluster_distance'; 3.777 + 3.778 +CREATE OPERATOR && ( 3.779 + leftarg = epoint, 3.780 + rightarg = ebox, 3.781 + procedure = epoint_ebox_overlap_proc, 3.782 + commutator = &&, 3.783 + restrict = areasel, 3.784 + join = areajoinsel 3.785 +); 3.786 + 3.787 +CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint) 3.788 + RETURNS boolean 3.789 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 3.790 + 3.791 +CREATE OPERATOR && ( 3.792 + leftarg = ebox, 3.793 + rightarg = epoint, 3.794 + procedure = epoint_ebox_overlap_commutator, 3.795 + commutator = &&, 3.796 + restrict = areasel, 3.797 + join = areajoinsel 3.798 +); 3.799 + 3.800 +CREATE OPERATOR && ( 3.801 + leftarg = epoint, 3.802 + rightarg = ecircle, 3.803 + procedure = epoint_ecircle_overlap_proc, 3.804 + commutator = &&, 3.805 + restrict = areasel, 3.806 + join = areajoinsel 3.807 +); 3.808 + 3.809 +CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint) 3.810 + RETURNS boolean 3.811 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 3.812 + 3.813 +CREATE OPERATOR && ( 3.814 + leftarg = ecircle, 3.815 + rightarg = epoint, 3.816 + procedure = epoint_ecircle_overlap_commutator, 3.817 + commutator = &&, 3.818 + restrict = areasel, 3.819 + join = areajoinsel 3.820 +); 3.821 + 3.822 +CREATE OPERATOR && ( 3.823 + leftarg = epoint, 3.824 + rightarg = ecluster, 3.825 + procedure = epoint_ecluster_overlap_proc, 3.826 + commutator = &&, 3.827 + restrict = areasel, 3.828 + join = areajoinsel 3.829 +); 3.830 + 3.831 +CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint) 3.832 + RETURNS boolean 3.833 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 3.834 + 3.835 +CREATE OPERATOR && ( 3.836 + leftarg = ecluster, 3.837 + rightarg = epoint, 3.838 + procedure = epoint_ecluster_overlap_commutator, 3.839 + commutator = &&, 3.840 + restrict = areasel, 3.841 + join = areajoinsel 3.842 +); 3.843 + 3.844 +CREATE OPERATOR && ( 3.845 + leftarg = ebox, 3.846 + rightarg = ebox, 3.847 + procedure = ebox_overlap_proc, 3.848 + commutator = &&, 3.849 + restrict = areasel, 3.850 + join = areajoinsel 3.851 +); 3.852 + 3.853 +CREATE OPERATOR && ( 3.854 + leftarg = ecircle, 3.855 + rightarg = ecircle, 3.856 + procedure = ecircle_overlap_proc, 3.857 + commutator = &&, 3.858 + restrict = areasel, 3.859 + join = areajoinsel 3.860 +); 3.861 + 3.862 +CREATE OPERATOR && ( 3.863 + leftarg = ecircle, 3.864 + rightarg = ecluster, 3.865 + procedure = ecircle_ecluster_overlap_proc, 3.866 + commutator = &&, 3.867 + restrict = areasel, 3.868 + join = areajoinsel 3.869 +); 3.870 + 3.871 +CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle) 3.872 + RETURNS boolean 3.873 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 3.874 + 3.875 +CREATE OPERATOR && ( 3.876 + leftarg = ecluster, 3.877 + rightarg = ecircle, 3.878 + procedure = ecircle_ecluster_overlap_commutator, 3.879 + commutator = &&, 3.880 + restrict = areasel, 3.881 + join = areajoinsel 3.882 +); 3.883 + 3.884 +CREATE OPERATOR <-> ( 3.885 + leftarg = epoint, 3.886 + rightarg = epoint, 3.887 + procedure = epoint_distance_proc, 3.888 + commutator = <-> 3.889 +); 3.890 + 3.891 +CREATE OPERATOR <-> ( 3.892 + leftarg = epoint, 3.893 + rightarg = ecircle, 3.894 + procedure = epoint_ecircle_distance_proc, 3.895 + commutator = <-> 3.896 +); 3.897 + 3.898 +CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint) 3.899 + RETURNS float8 3.900 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 3.901 + 3.902 +CREATE OPERATOR <-> ( 3.903 + leftarg = ecircle, 3.904 + rightarg = epoint, 3.905 + procedure = epoint_ecircle_distance_commutator, 3.906 + commutator = <-> 3.907 +); 3.908 + 3.909 +CREATE OPERATOR <-> ( 3.910 + leftarg = epoint, 3.911 + rightarg = ecluster, 3.912 + procedure = epoint_ecluster_distance_proc, 3.913 + commutator = <-> 3.914 +); 3.915 + 3.916 +CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint) 3.917 + RETURNS float8 3.918 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 3.919 + 3.920 +CREATE OPERATOR <-> ( 3.921 + leftarg = ecluster, 3.922 + rightarg = epoint, 3.923 + procedure = epoint_ecluster_distance_commutator, 3.924 + commutator = <-> 3.925 +); 3.926 + 3.927 +CREATE OPERATOR <-> ( 3.928 + leftarg = ecircle, 3.929 + rightarg = ecircle, 3.930 + procedure = ecircle_distance_proc, 3.931 + commutator = <-> 3.932 +); 3.933 + 3.934 +CREATE OPERATOR <-> ( 3.935 + leftarg = ecircle, 3.936 + rightarg = ecluster, 3.937 + procedure = ecircle_ecluster_distance_proc, 3.938 + commutator = <-> 3.939 +); 3.940 + 3.941 +CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle) 3.942 + RETURNS float8 3.943 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 3.944 + 3.945 +CREATE OPERATOR <-> ( 3.946 + leftarg = ecluster, 3.947 + rightarg = ecircle, 3.948 + procedure = ecircle_ecluster_distance_commutator, 3.949 + commutator = <-> 3.950 +); 3.951 + 3.952 + 3.953 +---------------- 3.954 +-- GiST index -- 3.955 +---------------- 3.956 + 3.957 +CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 3.958 + RETURNS boolean 3.959 + LANGUAGE C STRICT 3.960 + AS '$libdir/latlon-v0002', 'pgl_gist_consistent'; 3.961 + 3.962 +CREATE FUNCTION pgl_gist_union(internal, internal) 3.963 + RETURNS internal 3.964 + LANGUAGE C STRICT 3.965 + AS '$libdir/latlon-v0002', 'pgl_gist_union'; 3.966 + 3.967 +CREATE FUNCTION pgl_gist_compress_epoint(internal) 3.968 + RETURNS internal 3.969 + LANGUAGE C STRICT 3.970 + AS '$libdir/latlon-v0002', 'pgl_gist_compress_epoint'; 3.971 + 3.972 +CREATE FUNCTION pgl_gist_compress_ecircle(internal) 3.973 + RETURNS internal 3.974 + LANGUAGE C STRICT 3.975 + AS '$libdir/latlon-v0002', 'pgl_gist_compress_ecircle'; 3.976 + 3.977 +CREATE FUNCTION pgl_gist_compress_ecluster(internal) 3.978 + RETURNS internal 3.979 + LANGUAGE C STRICT 3.980 + AS '$libdir/latlon-v0002', 'pgl_gist_compress_ecluster'; 3.981 + 3.982 +CREATE FUNCTION pgl_gist_decompress(internal) 3.983 + RETURNS internal 3.984 + LANGUAGE C STRICT 3.985 + AS '$libdir/latlon-v0002', 'pgl_gist_decompress'; 3.986 + 3.987 +CREATE FUNCTION pgl_gist_penalty(internal, internal, internal) 3.988 + RETURNS internal 3.989 + LANGUAGE C STRICT 3.990 + AS '$libdir/latlon-v0002', 'pgl_gist_penalty'; 3.991 + 3.992 +CREATE FUNCTION pgl_gist_picksplit(internal, internal) 3.993 + RETURNS internal 3.994 + LANGUAGE C STRICT 3.995 + AS '$libdir/latlon-v0002', 'pgl_gist_picksplit'; 3.996 + 3.997 +CREATE FUNCTION pgl_gist_same(internal, internal, internal) 3.998 + RETURNS internal 3.999 + LANGUAGE C STRICT 3.1000 + AS '$libdir/latlon-v0002', 'pgl_gist_same'; 3.1001 + 3.1002 +CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 3.1003 + RETURNS internal 3.1004 + LANGUAGE C STRICT 3.1005 + AS '$libdir/latlon-v0002', 'pgl_gist_distance'; 3.1006 + 3.1007 +CREATE OPERATOR CLASS epoint_ops 3.1008 + DEFAULT FOR TYPE epoint USING gist AS 3.1009 + OPERATOR 11 = , 3.1010 + OPERATOR 22 && (epoint, ebox), 3.1011 + OPERATOR 23 && (epoint, ecircle), 3.1012 + OPERATOR 24 && (epoint, ecluster), 3.1013 + OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 3.1014 + OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 3.1015 + OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 3.1016 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 3.1017 + FUNCTION 2 pgl_gist_union(internal, internal), 3.1018 + FUNCTION 3 pgl_gist_compress_epoint(internal), 3.1019 + FUNCTION 4 pgl_gist_decompress(internal), 3.1020 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 3.1021 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 3.1022 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 3.1023 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 3.1024 + STORAGE ekey_point; 3.1025 + 3.1026 +CREATE OPERATOR CLASS ecircle_ops 3.1027 + DEFAULT FOR TYPE ecircle USING gist AS 3.1028 + OPERATOR 13 = , 3.1029 + OPERATOR 21 && (ecircle, epoint), 3.1030 + OPERATOR 23 && (ecircle, ecircle), 3.1031 + OPERATOR 24 && (ecircle, ecluster), 3.1032 + OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 3.1033 + OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 3.1034 + OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 3.1035 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 3.1036 + FUNCTION 2 pgl_gist_union(internal, internal), 3.1037 + FUNCTION 3 pgl_gist_compress_ecircle(internal), 3.1038 + FUNCTION 4 pgl_gist_decompress(internal), 3.1039 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 3.1040 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 3.1041 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 3.1042 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 3.1043 + STORAGE ekey_area; 3.1044 + 3.1045 +CREATE OPERATOR CLASS ecluster_ops 3.1046 + DEFAULT FOR TYPE ecluster USING gist AS 3.1047 + OPERATOR 21 && (ecluster, epoint), 3.1048 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 3.1049 + FUNCTION 2 pgl_gist_union(internal, internal), 3.1050 + FUNCTION 3 pgl_gist_compress_ecluster(internal), 3.1051 + FUNCTION 4 pgl_gist_decompress(internal), 3.1052 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 3.1053 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 3.1054 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 3.1055 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 3.1056 + STORAGE ekey_area; 3.1057 + 3.1058 + 3.1059 +--------------------- 3.1060 +-- alias functions -- 3.1061 +--------------------- 3.1062 + 3.1063 +CREATE FUNCTION distance(epoint, epoint) 3.1064 + RETURNS float8 3.1065 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2'; 3.1066 + 3.1067 +CREATE FUNCTION distance(ecluster, epoint) 3.1068 + RETURNS float8 3.1069 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2'; 3.1070 + 3.1071 +CREATE FUNCTION distance_within(epoint, epoint, float8) 3.1072 + RETURNS boolean 3.1073 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)'; 3.1074 + 3.1075 +CREATE FUNCTION distance_within(ecluster, epoint, float8) 3.1076 + RETURNS boolean 3.1077 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)'; 3.1078 + 3.1079 + 3.1080 +-------------------------------- 3.1081 +-- other data storage formats -- 3.1082 +-------------------------------- 3.1083 + 3.1084 +CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint_lonlat') 3.1085 + RETURNS epoint 3.1086 + LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 3.1087 + DECLARE 3.1088 + "result" epoint; 3.1089 + BEGIN 3.1090 + IF $3 = 'epoint_lonlat' THEN 3.1091 + -- avoid dynamic command execution for better performance 3.1092 + RETURN epoint($2, $1); 3.1093 + END IF; 3.1094 + IF $3 = 'epoint' OR $3 = 'epoint_latlon' THEN 3.1095 + -- avoid dynamic command execution for better performance 3.1096 + RETURN epoint($1, $2); 3.1097 + END IF; 3.1098 + EXECUTE 'SELECT ' || $3 || '($1, $2)' INTO STRICT "result" USING $1, $2; 3.1099 + RETURN "result"; 3.1100 + END; 3.1101 + $$; 3.1102 + 3.1103 +CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat') 3.1104 + RETURNS epoint 3.1105 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.1106 + SELECT CASE 3.1107 + WHEN $1->>'type' = 'Point' THEN 3.1108 + coords_to_epoint( 3.1109 + ($1->'coordinates'->>1)::float8, 3.1110 + ($1->'coordinates'->>0)::float8, 3.1111 + $2 3.1112 + ) 3.1113 + WHEN $1->>'type' = 'Feature' THEN 3.1114 + GeoJSON_to_epoint($1->'geometry', $2) 3.1115 + ELSE 3.1116 + NULL 3.1117 + END 3.1118 + $$; 3.1119 + 3.1120 +CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat') 3.1121 + RETURNS ecluster 3.1122 + LANGUAGE sql IMMUTABLE STRICT AS $$ 3.1123 + SELECT CASE $1->>'type' 3.1124 + WHEN 'Point' THEN 3.1125 + coords_to_epoint( 3.1126 + ($1->'coordinates'->>1)::float8, 3.1127 + ($1->'coordinates'->>0)::float8, 3.1128 + $2 3.1129 + )::ecluster 3.1130 + WHEN 'MultiPoint' THEN 3.1131 + ( SELECT ecluster_create_multipoint(array_agg( 3.1132 + coords_to_epoint( 3.1133 + ("coord"->>1)::float8, 3.1134 + ("coord"->>0)::float8, 3.1135 + $2 3.1136 + ) 3.1137 + )) 3.1138 + FROM jsonb_array_elements($1->'coordinates') AS "coord" 3.1139 + ) 3.1140 + WHEN 'LineString' THEN 3.1141 + ( SELECT ecluster_create_path(array_agg( 3.1142 + coords_to_epoint( 3.1143 + ("coord"->>1)::float8, 3.1144 + ("coord"->>0)::float8, 3.1145 + $2 3.1146 + ) 3.1147 + )) 3.1148 + FROM jsonb_array_elements($1->'coordinates') AS "coord" 3.1149 + ) 3.1150 + WHEN 'MultiLineString' THEN 3.1151 + ( SELECT ecluster_concat(array_agg( 3.1152 + ( SELECT ecluster_create_path(array_agg( 3.1153 + coords_to_epoint( 3.1154 + ("coord"->>1)::float8, 3.1155 + ("coord"->>0)::float8, 3.1156 + $2 3.1157 + ) 3.1158 + )) 3.1159 + FROM jsonb_array_elements("coord_array") AS "coord" 3.1160 + ) 3.1161 + )) 3.1162 + FROM jsonb_array_elements($1->'coordinates') AS "coord_array" 3.1163 + ) 3.1164 + WHEN 'Polygon' THEN 3.1165 + ( SELECT ecluster_concat(array_agg( 3.1166 + ( SELECT ecluster_create_polygon(array_agg( 3.1167 + coords_to_epoint( 3.1168 + ("coord"->>1)::float8, 3.1169 + ("coord"->>0)::float8, 3.1170 + $2 3.1171 + ) 3.1172 + )) 3.1173 + FROM jsonb_array_elements("coord_array") AS "coord" 3.1174 + ) 3.1175 + )) 3.1176 + FROM jsonb_array_elements($1->'coordinates') AS "coord_array" 3.1177 + ) 3.1178 + WHEN 'MultiPolygon' THEN 3.1179 + ( SELECT ecluster_concat(array_agg( 3.1180 + ( SELECT ecluster_concat(array_agg( 3.1181 + ( SELECT ecluster_create_polygon(array_agg( 3.1182 + coords_to_epoint( 3.1183 + ("coord"->>1)::float8, 3.1184 + ("coord"->>0)::float8, 3.1185 + $2 3.1186 + ) 3.1187 + )) 3.1188 + FROM jsonb_array_elements("coord_array") AS "coord" 3.1189 + ) 3.1190 + )) 3.1191 + FROM jsonb_array_elements("coord_array_array") AS "coord_array" 3.1192 + ) 3.1193 + )) 3.1194 + FROM jsonb_array_elements($1->'coordinates') AS "coord_array_array" 3.1195 + ) 3.1196 + WHEN 'Feature' THEN 3.1197 + GeoJSON_to_ecluster($1->'geometry', $2) 3.1198 + WHEN 'FeatureCollection' THEN 3.1199 + ( SELECT ecluster_concat(array_agg( 3.1200 + GeoJSON_to_ecluster("feature", $2) 3.1201 + )) 3.1202 + FROM jsonb_array_elements($1->'features') AS "feature" 3.1203 + ) 3.1204 + ELSE 3.1205 + NULL 3.1206 + END 3.1207 + $$; 3.1208 +