mirror of
https://git.osgeo.org/gitea/postgis/postgis
synced 2024-10-25 09:32:46 +00:00
c6924639f4
git-svn-id: http://svn.osgeo.org/postgis/trunk@682 b70326c6-7e19-0410-871a-916f4a2858ee
415 lines
10 KiB
MySQL
415 lines
10 KiB
MySQL
#if USE_VERSION > 71
|
|
#define CREATEFUNCTION CREATE OR REPLACE FUNCTION
|
|
#else
|
|
#define CREATEFUNCTION CREATE FUNCTION
|
|
#endif
|
|
|
|
BEGIN;
|
|
|
|
CREATEFUNCTION lwgeom_in(cstring)
|
|
RETURNS lwgeom
|
|
AS '@MODULE_FILENAME@','LWGEOM_in'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION lwgeom_out(lwgeom)
|
|
RETURNS cstring
|
|
AS '@MODULE_FILENAME@','LWGEOM_out'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE TYPE lwgeom (
|
|
internallength = variable,
|
|
input = lwgeom_in,
|
|
output = lwgeom_out,
|
|
storage = main
|
|
);
|
|
|
|
CREATEFUNCTION box2d_in(cstring)
|
|
RETURNS box2d
|
|
AS '@MODULE_FILENAME@','BOX2DFLOAT4_in'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION box2d_out(box2d)
|
|
RETURNS cstring
|
|
AS '@MODULE_FILENAME@','BOX2DFLOAT4_out'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE TYPE box2d (
|
|
internallength = 16,
|
|
input = box2d_in,
|
|
output = box2d_out,
|
|
storage = plain
|
|
);
|
|
|
|
CREATEFUNCTION box2d(LWGEOM)
|
|
RETURNS box2d
|
|
AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
|
|
|
|
|
|
CREATEFUNCTION lwgeom(text)
|
|
RETURNS lwgeom
|
|
AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
---- BOX2D support functions
|
|
|
|
|
|
CREATEFUNCTION box2d_overleft(box2d, box2d)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION box2d_overright(box2d, box2d)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION box2d_left(box2d, box2d)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION box2d_right(box2d, box2d)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION box2d_contain(box2d, box2d)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION box2d_contained(box2d, box2d)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION box2d_overlap(box2d, box2d)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION box2d_same(box2d, box2d)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
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
|
|
|
|
|
|
CREATEFUNCTION lwgeom_overleft(lwgeom, lwgeom)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION lwgeom_overright(lwgeom, lwgeom)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION lwgeom_left(lwgeom, lwgeom)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION lwgeom_right(lwgeom, lwgeom)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION lwgeom_contain(lwgeom, lwgeom)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION lwgeom_contained(lwgeom, lwgeom)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION lwgeom_overlap(lwgeom, lwgeom)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION lwgeom_same(lwgeom, lwgeom)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@'
|
|
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
|
|
|
|
|
|
CREATEFUNCTION gist_lwgeom_consistent(internal,lwgeom,int4)
|
|
RETURNS bool
|
|
AS '@MODULE_FILENAME@' ,'gist_lwgeom_consistent'
|
|
LANGUAGE 'C';
|
|
|
|
CREATEFUNCTION gist_lwgeom_compress(internal)
|
|
RETURNS internal
|
|
AS '@MODULE_FILENAME@','gist_lwgeom_compress'
|
|
LANGUAGE 'C';
|
|
|
|
CREATEFUNCTION gist_lwgeom_penalty(internal,internal,internal)
|
|
RETURNS internal
|
|
AS '@MODULE_FILENAME@' ,'lwgeom_box_penalty'
|
|
LANGUAGE 'C';
|
|
|
|
CREATEFUNCTION gist_lwgeom_picksplit(internal, internal)
|
|
RETURNS internal
|
|
AS '@MODULE_FILENAME@' ,'lwgeom_gbox_picksplit'
|
|
LANGUAGE 'C';
|
|
|
|
CREATEFUNCTION gist_lwgeom_union(bytea, internal)
|
|
RETURNS internal
|
|
AS '@MODULE_FILENAME@' ,'lwgeom_box_union'
|
|
LANGUAGE 'C';
|
|
|
|
CREATEFUNCTION gist_lwgeom_same(box2d, box2d, internal)
|
|
RETURNS internal
|
|
AS '@MODULE_FILENAME@' ,'lwgeom_gbox_same'
|
|
LANGUAGE 'C';
|
|
|
|
CREATEFUNCTION gist_lwgeom_decompress(internal)
|
|
RETURNS internal
|
|
AS '@MODULE_FILENAME@' ,'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
|
|
|
|
CREATEFUNCTION addBBOX(lwgeom)
|
|
RETURNS lwgeom
|
|
AS '@MODULE_FILENAME@','LWGEOM_addBBOX'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
|
|
CREATEFUNCTION getSRID(lwgeom)
|
|
RETURNS int4
|
|
AS '@MODULE_FILENAME@','LWGEOM_getSRID'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
-- defined for backward compatibility (pre LWGEOM)
|
|
CREATEFUNCTION SRID(lwgeom)
|
|
RETURNS int4
|
|
AS '@MODULE_FILENAME@','LWGEOM_getSRID'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION setSRID(lwgeom,int4)
|
|
RETURNS lwgeom
|
|
AS '@MODULE_FILENAME@','LWGEOM_setSRID'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
|
|
CREATEFUNCTION asText(lwgeom)
|
|
RETURNS TEXT
|
|
AS '@MODULE_FILENAME@','LWGEOM_asText'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION getbbox(LWGEOM)
|
|
RETURNS box2d
|
|
AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION geometrytype(LWGEOM)
|
|
RETURNS text
|
|
AS '@MODULE_FILENAME@', 'LWGEOM_getTYPE'
|
|
LANGUAGE 'C' WITH (isstrict);
|
|
|
|
|
|
COMMIT;
|
|
|
|
begin;
|
|
-- extra conversions (might not work if there's no postgis install)
|
|
|
|
CREATEFUNCTION lwgeom(wkb,int4)
|
|
RETURNS lwgeom
|
|
AS '@MODULE_FILENAME@','LWGEOMFromWKB'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
|
|
|
|
CREATEFUNCTION wkb(lwgeom)
|
|
RETURNS wkb
|
|
AS '@MODULE_FILENAME@','WKBFromLWGEOM'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION asbinary(lwgeom)
|
|
RETURNS wkb
|
|
AS '@MODULE_FILENAME@','WKBFromLWGEOM'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATEFUNCTION lwgeom(wkb)
|
|
RETURNS lwgeom
|
|
AS '@MODULE_FILENAME@','LWGEOMFromWKB'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
|
|
CREATEFUNCTION geometry(lwgeom)
|
|
RETURNS geometry
|
|
AS
|
|
'BEGIN
|
|
RETURN GeomFromWKB(asBinary($1),getSRID($1) );
|
|
END;'
|
|
LANGUAGE 'plpgsql' WITH (iscachable,isstrict);
|
|
|
|
|
|
CREATEFUNCTION 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 ;
|
|
|
|
--
|
|
-- Aggregate functions
|
|
--
|
|
|
|
CREATEFUNCTION combine_bbox(box2d,lwgeom)
|
|
RETURNS box2d
|
|
AS '@MODULE_FILENAME@', 'combine_box2d'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE AGGREGATE extent(
|
|
sfunc = combine_bbox,
|
|
basetype = lwgeom,
|
|
stype = box2d
|
|
);
|
|
|
|
COMMIT;
|
|
|
|
|