postgis/lwgeom/lwgeom.sql.in

382 lines
12 KiB
MySQL
Raw Normal View History

BEGIN;
CREATE OR REPLACE FUNCTION lwgeom_in(cstring)
RETURNS lwgeom
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','LWGEOM_in'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE OR REPLACE FUNCTION lwgeom_out(lwgeom)
RETURNS cstring
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','LWGEOM_out'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE TYPE lwgeom (
internallength = variable,
input = lwgeom_in,
output = lwgeom_out,
storage = main
);
CREATE OR REPLACE FUNCTION box2d_in(cstring)
RETURNS box2d
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','BOX2DFLOAT4_in'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE OR REPLACE FUNCTION box2d_out(box2d)
RETURNS cstring
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','BOX2DFLOAT4_out'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE TYPE box2d (
internallength = 16,
input = box2d_in,
output = box2d_out,
storage = plain
);
CREATE OR REPLACE FUNCTION box2d(LWGEOM)
RETURNS box2d
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','LWGEOM_to_BOX2DFLOAT4'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE OR REPLACE FUNCTION lwgeom(text)
RETURNS lwgeom
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','parse_WKT_lwgeom'
LANGUAGE 'C' WITH (isstrict,iscachable);
---- BOX2D support functions
CREATE FUNCTION box2d_overleft(box2d, box2d)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION box2d_overright(box2d, box2d)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION box2d_left(box2d, box2d)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION box2d_right(box2d, box2d)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION box2d_contain(box2d, box2d)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION box2d_contained(box2d, box2d)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION box2d_overlap(box2d, box2d)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION box2d_same(box2d, box2d)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE OPERATOR << (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_left,
COMMUTATOR = '>>',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR &< (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overleft,
COMMUTATOR = '&>',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR && (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overlap,
COMMUTATOR = '&&',
RESTRICT = areasel, JOIN = positionjoinsel
);
CREATE OPERATOR &> (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overright,
COMMUTATOR = '&<',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR >> (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_right,
COMMUTATOR = '<<',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR ~= (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_same,
COMMUTATOR = '~=',
RESTRICT = eqsel, JOIN = eqjoinsel
);
CREATE OPERATOR @ (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_contained,
COMMUTATOR = '~',
RESTRICT = contsel, JOIN = contjoinsel
);
CREATE OPERATOR ~ (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_contain,
COMMUTATOR = '@',
RESTRICT = contsel, JOIN = contjoinsel
);
-- lwgeom operator support functions
CREATE FUNCTION lwgeom_overleft(lwgeom, lwgeom)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION lwgeom_overright(lwgeom, lwgeom)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION lwgeom_left(lwgeom, lwgeom)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION lwgeom_right(lwgeom, lwgeom)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION lwgeom_contain(lwgeom, lwgeom)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION lwgeom_contained(lwgeom, lwgeom)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION lwgeom_overlap(lwgeom, lwgeom)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION lwgeom_same(lwgeom, lwgeom)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE OPERATOR << (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_left,
COMMUTATOR = '>>',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR &< (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_overleft,
COMMUTATOR = '&>',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR && (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_overlap,
COMMUTATOR = '&&',
RESTRICT = areasel, JOIN = positionjoinsel
);
CREATE OPERATOR &> (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_overright,
COMMUTATOR = '&<',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR >> (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_right,
COMMUTATOR = '<<',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR ~= (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_same,
COMMUTATOR = '~=',
RESTRICT = eqsel, JOIN = eqjoinsel
);
CREATE OPERATOR @ (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_contained,
COMMUTATOR = '~',
RESTRICT = contsel, JOIN = contjoinsel
);
CREATE OPERATOR ~ (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_contain,
COMMUTATOR = '@',
RESTRICT = contsel, JOIN = contjoinsel
);
-- gist support functions
CREATE FUNCTION gist_lwgeom_consistent(internal,lwgeom,int4)
RETURNS bool
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1' ,'gist_lwgeom_consistent'
LANGUAGE 'C';
CREATE FUNCTION gist_lwgeom_compress(internal)
RETURNS internal
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','gist_lwgeom_compress'
LANGUAGE 'C';
CREATE FUNCTION gist_lwgeom_penalty(internal,internal,internal)
RETURNS internal
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1' ,'lwgeom_box_penalty'
LANGUAGE 'C';
CREATE FUNCTION gist_lwgeom_picksplit(internal, internal)
RETURNS internal
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1' ,'lwgeom_gbox_picksplit'
LANGUAGE 'C';
CREATE FUNCTION gist_lwgeom_union(bytea, internal)
RETURNS internal
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1' ,'lwgeom_box_union'
LANGUAGE 'C';
CREATE FUNCTION gist_lwgeom_same(box2d, box2d, internal)
RETURNS internal
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1' ,'lwgeom_gbox_same'
LANGUAGE 'C';
CREATE FUNCTION gist_lwgeom_decompress(internal)
RETURNS internal
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1' ,'gist_rtree_decompress'
LANGUAGE 'C';
-- gist opclass
CREATE OPERATOR CLASS gist_lwgeom_ops
DEFAULT FOR TYPE lwgeom USING gist AS
OPERATOR 1 << ,
OPERATOR 2 &< ,
OPERATOR 3 && ,
OPERATOR 4 &> ,
OPERATOR 5 >> ,
OPERATOR 6 ~= ,
OPERATOR 7 ~ ,
OPERATOR 8 @ ,
FUNCTION 1 gist_lwgeom_consistent (internal, lwgeom, int4),
FUNCTION 2 gist_lwgeom_union (bytea, internal),
FUNCTION 3 gist_lwgeom_compress (internal),
FUNCTION 4 gist_lwgeom_decompress (internal),
FUNCTION 5 gist_lwgeom_penalty (internal, internal, internal),
FUNCTION 6 gist_lwgeom_picksplit (internal, internal),
FUNCTION 7 gist_lwgeom_same (box2d, box2d, internal);
UPDATE pg_opclass
SET opckeytype = (select oid from pg_type where typname = 'box2d')
WHERE opcname = 'gist_lwgeom_ops';
-- other lwgeom functions
CREATE FUNCTION addBBOX(lwgeom)
RETURNS lwgeom
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','LWGEOM_addBBOX'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION getSRID(lwgeom)
RETURNS int4
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','LWGEOM_getSRID'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION setSRID(lwgeom,int4)
RETURNS lwgeom
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','LWGEOM_setSRID'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION asText(lwgeom)
RETURNS TEXT
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','LWGEOM_asText'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE OR REPLACE FUNCTION getbbox(LWGEOM)
RETURNS box2d
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','LWGEOM_to_BOX2DFLOAT4'
LANGUAGE 'C' WITH (isstrict,iscachable);
commit;
begin;
-- extra conversions (might not work if there's no postgis install)
CREATE FUNCTION geometry(lwgeom)
RETURNS geometry
AS
'BEGIN
RETURN GeomFromWKB(asBinary($1),getSRID($1) );
END;'
LANGUAGE 'plpgsql' WITH (iscachable,isstrict);
CREATE OR REPLACE FUNCTION lwgeom(geometry)
RETURNS lwgeom
AS
'BEGIN
RETURN setSRID(lwgeom(asBinary($1)),SRID($1) );
END;'
LANGUAGE 'plpgsql' WITH (iscachable,isstrict);
CREATE CAST (lwgeom as geometry) WITH FUNCTION geometry(lwgeom) AS IMPLICIT ;
CREATE CAST (geometry as lwgeom) WITH FUNCTION lwgeom(geometry) AS IMPLICIT ;
CREATE CAST (lwgeom as box2d) WITH FUNCTION box2d(lwgeom) AS IMPLICIT ;
CREATE CAST (lwgeom as wkb) WITH FUNCTION wkb(lwgeom) AS IMPLICIT ;
CREATE CAST (wkb as lwgeom) WITH FUNCTION lwgeom(wkb) AS IMPLICIT ;
CREATE FUNCTION lwgeom(wkb)
RETURNS lwgeom
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','LWGEOMFromWKB'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION lwgeom(wkb,int4)
RETURNS lwgeom
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','LWGEOMFromWKB'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION wkb(lwgeom)
RETURNS wkb
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','WKBFromLWGEOM'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE FUNCTION asbinary(lwgeom)
RETURNS wkb
AS '/data/Refractions/Projects/PostGIS/work_dave2/postgis/lwgeom/liblwgeom.so.0.1','WKBFromLWGEOM'
LANGUAGE 'C' WITH (isstrict,iscachable);
COMMIT;