- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - $Id: postgis.sql.in.c 7360 2011-06-10 16:55:53Z robe $
- -
- - PostGIS - Spatial Types for PostgreSQL
- - Copyright 2001-2003 Refractions Research Inc.
- -
- - This is free software; you can redistribute and/or modify it under
- - the terms of the GNU General Public Licence. See the COPYING file.
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - WARNING: Any change in this file must be evaluated for compatibility.
- - Changes cleanly handled by postgis_upgrade.sql are fine,
- - other changes will require a bump in Major version.
- - Currently only function replaceble by CREATE OR REPLACE
- - are cleanly handled.
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - INSTALL VERSION: 1.5.3
SET client_min_messages TO warning;
BEGIN; ------------------------------------------------------------------- -- SPHEROID TYPE ------------------------------------------------------------------- -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_spheroid_in(cstring) RETURNS spheroid AS '$libdir/postgis-1.5','ellipsoid_in' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_spheroid_out(spheroid) RETURNS cstring AS '$libdir/postgis-1.5','ellipsoid_out' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION spheroid_in(cstring) RETURNS spheroid AS '$libdir/postgis-1.5','ellipsoid_in' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION spheroid_out(spheroid) RETURNS cstring AS '$libdir/postgis-1.5','ellipsoid_out' LANGUAGE 'C' IMMUTABLE STRICT; CREATE TYPE spheroid ( alignment = double, internallength = 65, input = spheroid_in, output = spheroid_out ); ------------------------------------------------------------------- -- GEOMETRY TYPE (lwgeom) ------------------------------------------------------------------- -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_in(cstring) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_in' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_out(geometry) RETURNS cstring AS '$libdir/postgis-1.5','LWGEOM_out' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_analyze(internal) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_analyze' LANGUAGE 'C' VOLATILE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_recv(internal) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_recv' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_send(geometry) RETURNS bytea AS '$libdir/postgis-1.5','LWGEOM_send' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_in(cstring) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_in' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_out(geometry) RETURNS cstring AS '$libdir/postgis-1.5','LWGEOM_out' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_analyze(internal) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_analyze' LANGUAGE 'C' VOLATILE STRICT; CREATE OR REPLACE FUNCTION geometry_recv(internal) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_recv' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_send(geometry) RETURNS bytea AS '$libdir/postgis-1.5','LWGEOM_send' LANGUAGE 'C' IMMUTABLE STRICT; CREATE TYPE geometry ( internallength = variable, input = geometry_in, output = geometry_out, send = geometry_send, receive = geometry_recv, delimiter = ':', analyze = geometry_analyze, storage = main ); ------------------------------------------- -- Affine transforms ------------------------------------------- -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_affine' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_affine' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8) RETURNS geometry AS 'SELECT affine($1, $2, $3, 0, $4, $5, 0, 0, 0, 1, $6, $7, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8) RETURNS geometry AS 'SELECT affine($1, $2, $3, 0, $4, $5, 0, 0, 0, 1, $6, $7, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION RotateZ(geometry,float8) RETURNS geometry AS 'SELECT affine($1, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0, 1, 0, 0, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_RotateZ(geometry,float8) RETURNS geometry AS 'SELECT affine($1, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0, 1, 0, 0, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Rotate(geometry,float8) RETURNS geometry AS 'SELECT rotateZ($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Rotate(geometry,float8) RETURNS geometry AS 'SELECT rotateZ($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION RotateX(geometry,float8) RETURNS geometry AS 'SELECT affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_RotateX(geometry,float8) RETURNS geometry AS 'SELECT affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.1.2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION RotateY(geometry,float8) RETURNS geometry AS 'SELECT affine($1, cos($2), 0, sin($2), 0, 1, 0, -sin($2), 0, cos($2), 0, 0, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_RotateY(geometry,float8) RETURNS geometry AS 'SELECT affine($1, cos($2), 0, sin($2), 0, 1, 0, -sin($2), 0, cos($2), 0, 0, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Translate(geometry,float8,float8,float8) RETURNS geometry AS 'SELECT affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Translate(geometry,float8,float8,float8) RETURNS geometry AS 'SELECT affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Translate(geometry,float8,float8) RETURNS geometry AS 'SELECT translate($1, $2, $3, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Translate(geometry,float8,float8) RETURNS geometry AS 'SELECT translate($1, $2, $3, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.1.0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Scale(geometry,float8,float8,float8) RETURNS geometry AS 'SELECT affine($1, $2, 0, 0, 0, $3, 0, 0, 0, $4, 0, 0, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Scale(geometry,float8,float8,float8) RETURNS geometry AS 'SELECT affine($1, $2, 0, 0, 0, $3, 0, 0, 0, $4, 0, 0, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.1.0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Scale(geometry,float8,float8) RETURNS geometry AS 'SELECT scale($1, $2, $3, 1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Scale(geometry,float8,float8) RETURNS geometry AS 'SELECT scale($1, $2, $3, 1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.1.0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION transscale(geometry,float8,float8,float8,float8) RETURNS geometry AS 'SELECT affine($1, $4, 0, 0, 0, $5, 0, 0, 0, 1, $2 * $4, $3 * $5, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_transscale(geometry,float8,float8,float8,float8) RETURNS geometry AS 'SELECT affine($1, $4, 0, 0, 0, $5, 0, 0, 0, 1, $2 * $4, $3 * $5, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.1.0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION shift_longitude(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_longitude_shift' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_shift_longitude(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_longitude_shift' LANGUAGE 'C' IMMUTABLE STRICT; ------------------------------------------------------------------- -- BOX3D TYPE ------------------------------------------------------------------- -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box3d_in(cstring) RETURNS box3d AS '$libdir/postgis-1.5', 'BOX3D_in' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box3d_out(box3d) RETURNS cstring AS '$libdir/postgis-1.5', 'BOX3D_out' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box3d_in(cstring) RETURNS box3d AS '$libdir/postgis-1.5', 'BOX3D_in' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box3d_out(box3d) RETURNS cstring AS '$libdir/postgis-1.5', 'BOX3D_out' LANGUAGE 'C' IMMUTABLE STRICT; CREATE TYPE box3d ( alignment = double, internallength = 48, input = box3d_in, output = box3d_out ); -- Temporary box3d aggregate type to retain full double precision -- for ST_Extent(). Should be removed when we change the output -- type of ST_Extent() to return something other than BOX2DFLOAT4. CREATE OR REPLACE FUNCTION box3d_extent_in(cstring) RETURNS box3d_extent AS '$libdir/postgis-1.5', 'BOX3D_in' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box3d_extent_out(box3d_extent) RETURNS cstring AS '$libdir/postgis-1.5', 'BOX3D_extent_out' LANGUAGE 'C' IMMUTABLE STRICT; CREATE TYPE box3d_extent ( alignment = double, internallength = 48, input = box3d_extent_in, output = box3d_extent_out ); -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION box3d_extent(box3d_extent) RETURNS box3d AS '$libdir/postgis-1.5', 'BOX3D_extent_to_BOX3D' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box2d(box3d_extent) RETURNS box2d AS '$libdir/postgis-1.5', 'BOX3D_to_BOX2DFLOAT4' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry(box3d_extent) RETURNS geometry AS '$libdir/postgis-1.5','BOX3D_to_LWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; -- End of temporary hack -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION xmin(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_xmin' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_XMin(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_xmin' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION ymin(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_ymin' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_YMin(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_ymin' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION zmin(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_zmin' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_ZMin(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_zmin' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION xmax(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_xmax' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_XMax(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_xmax' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION ymax(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_ymax' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_YMax(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_ymax' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION zmax(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_zmax' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_ZMax(box3d) RETURNS FLOAT8 AS '$libdir/postgis-1.5','BOX3D_zmax' LANGUAGE 'C' IMMUTABLE STRICT; ------------------------------------------------------------------- -- CHIP TYPE ------------------------------------------------------------------- CREATE OR REPLACE FUNCTION chip_in(cstring) RETURNS chip AS '$libdir/postgis-1.5','CHIP_in' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION chip_out(chip) RETURNS cstring AS '$libdir/postgis-1.5','CHIP_out' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION ST_chip_in(cstring) RETURNS chip AS '$libdir/postgis-1.5','CHIP_in' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION ST_chip_out(chip) RETURNS cstring AS '$libdir/postgis-1.5','CHIP_out' LANGUAGE 'C' IMMUTABLE STRICT; CREATE TYPE chip ( alignment = double, internallength = variable, input = chip_in, output = chip_out, storage = extended ); ----------------------------------------------------------------------- -- BOX2D ----------------------------------------------------------------------- -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box2d_in(cstring) RETURNS box2d AS '$libdir/postgis-1.5','BOX2DFLOAT4_in' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box2d_out(box2d) RETURNS cstring AS '$libdir/postgis-1.5','BOX2DFLOAT4_out' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box2d_in(cstring) RETURNS box2d AS '$libdir/postgis-1.5','BOX2DFLOAT4_in' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box2d_out(box2d) RETURNS cstring AS '$libdir/postgis-1.5','BOX2DFLOAT4_out' LANGUAGE 'C' IMMUTABLE STRICT; CREATE TYPE box2d ( internallength = 16, input = box2d_in, output = box2d_out, storage = plain ); ------------------------------------------------------------------- -- BTREE indexes ------------------------------------------------------------------- -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_lt(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'lwgeom_lt' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_le(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'lwgeom_le' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_gt(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'lwgeom_gt' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_ge(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'lwgeom_ge' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_eq(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'lwgeom_eq' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_cmp(geometry, geometry) RETURNS integer AS '$libdir/postgis-1.5', 'lwgeom_cmp' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_lt(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'lwgeom_lt' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_le(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'lwgeom_le' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_gt(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'lwgeom_gt' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_ge(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'lwgeom_ge' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_eq(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'lwgeom_eq' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_cmp(geometry, geometry) RETURNS integer AS '$libdir/postgis-1.5', 'lwgeom_cmp' LANGUAGE 'C' IMMUTABLE STRICT; -- -- Sorting operators for Btree -- CREATE OPERATOR < ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_lt, COMMUTATOR = '>', NEGATOR = '>=', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR <= ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_le, COMMUTATOR = '>=', NEGATOR = '>', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR = ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_eq, COMMUTATOR = '=', -- we might implement a faster negator here RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR >= ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_ge, COMMUTATOR = '<=', NEGATOR = '<', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR > ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_gt, COMMUTATOR = '<', NEGATOR = '<=', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR CLASS btree_geometry_ops DEFAULT FOR TYPE geometry USING btree AS OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 geometry_cmp (geometry, geometry); ------------------------------------------------------------------- -- GiST indexes ------------------------------------------------------------------- -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION postgis_gist_sel (internal, oid, internal, int4) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_gist_sel' LANGUAGE 'C'; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION postgis_gist_joinsel(internal, oid, internal, smallint) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_gist_joinsel' LANGUAGE 'C'; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_postgis_gist_sel (internal, oid, internal, int4) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_gist_sel' LANGUAGE 'C'; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_postgis_gist_joinsel(internal, oid, internal, smallint) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_gist_joinsel' LANGUAGE 'C'; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_overleft(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_overleft' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_overright(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_overright' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_overabove(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_overabove' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_overbelow(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_overbelow' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_left(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_left' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_right(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_right' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_above(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_above' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_below(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_below' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_contain(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_contain' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_contained(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_contained' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_overlap(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_overlap' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry_same(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_samebox' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION geometry_same(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_samebox' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_gist_sel (internal, oid, internal, int4) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_gist_sel' LANGUAGE 'C'; CREATE OR REPLACE FUNCTION geometry_gist_joinsel(internal, oid, internal, smallint) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_gist_joinsel' LANGUAGE 'C'; CREATE OR REPLACE FUNCTION geometry_overleft(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_overleft' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_overright(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_overright' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_overabove(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_overabove' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_overbelow(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_overbelow' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_left(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_left' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_right(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_right' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_above(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_above' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_below(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_below' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_contain(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_contain' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_contained(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_contained' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_overlap(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_overlap' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry_samebox(geometry, geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_samebox' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OPERATOR << ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_left, COMMUTATOR = '>>', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR &< ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overleft, COMMUTATOR = '&>', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR <<| ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_below, COMMUTATOR = '|>>', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR &<| ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overbelow, COMMUTATOR = '|&>', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR && ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overlap, COMMUTATOR = '&&', RESTRICT = geometry_gist_sel, JOIN = geometry_gist_joinsel ); CREATE OPERATOR &> ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overright, COMMUTATOR = '&<', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR >> ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_right, COMMUTATOR = '<<', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR |&> ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_overabove, COMMUTATOR = '&<|', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR |>> ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_above, COMMUTATOR = '<<|', RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR ~= ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_samebox, COMMUTATOR = '~=', RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE OPERATOR @ ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_contained, COMMUTATOR = '~', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR ~ ( LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_contain, COMMUTATOR = '@', RESTRICT = contsel, JOIN = contjoinsel ); -- gist support functions CREATE OR REPLACE FUNCTION LWGEOM_gist_consistent(internal,geometry,int4) RETURNS bool AS '$libdir/postgis-1.5' ,'LWGEOM_gist_consistent' LANGUAGE 'C'; CREATE OR REPLACE FUNCTION LWGEOM_gist_compress(internal) RETURNS internal AS '$libdir/postgis-1.5','LWGEOM_gist_compress' LANGUAGE 'C'; CREATE OR REPLACE FUNCTION LWGEOM_gist_penalty(internal,internal,internal) RETURNS internal AS '$libdir/postgis-1.5' ,'LWGEOM_gist_penalty' LANGUAGE 'C'; CREATE OR REPLACE FUNCTION LWGEOM_gist_picksplit(internal, internal) RETURNS internal AS '$libdir/postgis-1.5' ,'LWGEOM_gist_picksplit' LANGUAGE 'C'; CREATE OR REPLACE FUNCTION LWGEOM_gist_union(bytea, internal) RETURNS internal AS '$libdir/postgis-1.5' ,'LWGEOM_gist_union' LANGUAGE 'C'; CREATE OR REPLACE FUNCTION LWGEOM_gist_same(box2d, box2d, internal) RETURNS internal AS '$libdir/postgis-1.5' ,'LWGEOM_gist_same' LANGUAGE 'C'; CREATE OR REPLACE FUNCTION LWGEOM_gist_decompress(internal) RETURNS internal AS '$libdir/postgis-1.5' ,'LWGEOM_gist_decompress' LANGUAGE 'C'; ------------------------------------------- -- GIST opclass index binding entries. ------------------------------------------- -- -- Create opclass index bindings for PG>=73 -- CREATE OPERATOR CLASS gist_geometry_ops DEFAULT FOR TYPE geometry USING gist AS STORAGE box2d, OPERATOR 1 << , OPERATOR 2 &< , OPERATOR 3 && , OPERATOR 4 &> , OPERATOR 5 >> , OPERATOR 6 ~= , OPERATOR 7 ~ , OPERATOR 8 @ , OPERATOR 9 &<| , OPERATOR 10 <<| , OPERATOR 11 |>> , OPERATOR 12 |&> , FUNCTION 1 LWGEOM_gist_consistent (internal, geometry, int4), FUNCTION 2 LWGEOM_gist_union (bytea, internal), FUNCTION 3 LWGEOM_gist_compress (internal), FUNCTION 4 LWGEOM_gist_decompress (internal), FUNCTION 5 LWGEOM_gist_penalty (internal, internal, internal), FUNCTION 6 LWGEOM_gist_picksplit (internal, internal), FUNCTION 7 LWGEOM_gist_same (box2d, box2d, internal); ------------------------------------------- -- other lwgeom functions ------------------------------------------- CREATE OR REPLACE FUNCTION addbbox(geometry) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_addBBOX' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_addbbox(geometry) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_addBBOX' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION dropbbox(geometry) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_dropBBOX' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_dropbbox(geometry) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_dropBBOX' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION getsrid(geometry) RETURNS int4 AS '$libdir/postgis-1.5','LWGEOM_getSRID' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION getbbox(geometry) RETURNS box2d AS '$libdir/postgis-1.5','LWGEOM_to_BOX2DFLOAT4' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_getbbox(geometry) RETURNS box2d AS '$libdir/postgis-1.5','LWGEOM_to_BOX2DFLOAT4' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION hasbbox(geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_hasBBOX' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_hasbbox(geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_hasBBOX' LANGUAGE 'C' IMMUTABLE STRICT; ------------------------------------------- --- CHIP functions ------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION srid(chip) RETURNS int4 AS '$libdir/postgis-1.5','CHIP_getSRID' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_srid(chip) RETURNS int4 AS '$libdir/postgis-1.5','CHIP_getSRID' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION height(chip) RETURNS int4 AS '$libdir/postgis-1.5','CHIP_getHeight' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_height(chip) RETURNS int4 AS '$libdir/postgis-1.5','CHIP_getHeight' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION factor(chip) RETURNS FLOAT4 AS '$libdir/postgis-1.5','CHIP_getFactor' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_factor(chip) RETURNS FLOAT4 AS '$libdir/postgis-1.5','CHIP_getFactor' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION width(chip) RETURNS int4 AS '$libdir/postgis-1.5','CHIP_getWidth' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_width(chip) RETURNS int4 AS '$libdir/postgis-1.5','CHIP_getWidth' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION datatype(chip) RETURNS int4 AS '$libdir/postgis-1.5','CHIP_getDatatype' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_datatype(chip) RETURNS int4 AS '$libdir/postgis-1.5','CHIP_getDatatype' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION compression(chip) RETURNS int4 AS '$libdir/postgis-1.5','CHIP_getCompression' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_compression(chip) RETURNS int4 AS '$libdir/postgis-1.5','CHIP_getCompression' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION setSRID(chip,int4) RETURNS chip AS '$libdir/postgis-1.5','CHIP_setSRID' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION setFactor(chip,float4) RETURNS chip AS '$libdir/postgis-1.5','CHIP_setFactor' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_setFactor(chip,float4) RETURNS chip AS '$libdir/postgis-1.5','CHIP_setFactor' LANGUAGE 'C' IMMUTABLE STRICT; ------------------------------------------------------------------------ -- DEBUG ------------------------------------------------------------------------ -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION mem_size(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_mem_size' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_mem_size(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_mem_size' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION summary(geometry) RETURNS text AS '$libdir/postgis-1.5', 'LWGEOM_summary' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_summary(geometry) RETURNS text AS '$libdir/postgis-1.5', 'LWGEOM_summary' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION npoints(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_npoints' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_npoints(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_npoints' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION nrings(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_nrings' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_nrings(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_nrings' LANGUAGE 'C' IMMUTABLE STRICT; ------------------------------------------------------------------------ -- Misures ------------------------------------------------------------------------ -- this is a fake (for back-compatibility) -- uses 3d if 3d is available, 2d otherwise -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION length3d(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_length_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_length3d(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_length_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION length2d(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_length2d_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_length2d(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_length2d_linestring' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION length(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_length_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: length2d(geometry) CREATE OR REPLACE FUNCTION ST_Length(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_length2d_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- this is a fake (for back-compatibility) -- uses 3d if 3d is available, 2d otherwise -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION length3d_spheroid(geometry, spheroid) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_length_ellipsoid_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_length3d_spheroid(geometry, spheroid) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_length_ellipsoid_linestring' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION length_spheroid(geometry, spheroid) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_length_ellipsoid_linestring' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_length_spheroid(geometry, spheroid) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_length_ellipsoid_linestring' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION length2d_spheroid(geometry, spheroid) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_length2d_ellipsoid' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_length2d_spheroid(geometry, spheroid) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_length2d_ellipsoid' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- this is a fake (for back-compatibility) -- uses 3d if 3d is available, 2d otherwise -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION perimeter3d(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_perimeter_poly' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_perimeter3d(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_perimeter_poly' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION perimeter2d(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_perimeter2d_poly' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_perimeter2d(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_perimeter2d_poly' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION perimeter(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_perimeter_poly' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: perimeter2d(geometry) CREATE OR REPLACE FUNCTION ST_Perimeter(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_perimeter2d_poly' LANGUAGE 'C' IMMUTABLE STRICT; -- this is an alias for 'area(geometry)' -- there is nothing such an 'area3d'... -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION area2d(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_area_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 -- Deprecation in 1.3.4 CREATE OR REPLACE FUNCTION ST_area2d(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'LWGEOM_area_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION area(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_area_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: area(geometry) CREATE OR REPLACE FUNCTION ST_Area(geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_area_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION distance_spheroid(geometry,geometry,spheroid) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_distance_ellipsoid' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_distance_spheroid(geometry,geometry,spheroid) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_distance_ellipsoid' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION distance_sphere(geometry,geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_distance_sphere' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_distance_sphere(geometry,geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5','LWGEOM_distance_sphere' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Minimum distance. 2d only. -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION distance(geometry,geometry) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_mindistance2d' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- PostGIS equivalent function: distance(geometry,geometry) CREATE OR REPLACE FUNCTION ST_Distance(geometry,geometry) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_mindistance2d' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION point_inside_circle(geometry,float8,float8,float8) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_inside_circle_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_point_inside_circle(geometry,float8,float8,float8) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_inside_circle_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION azimuth(geometry,geometry) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_azimuth' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_azimuth(geometry,geometry) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_azimuth' LANGUAGE 'C' IMMUTABLE STRICT; ------------------------------------------------------------------------ -- MISC ------------------------------------------------------------------------ -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION force_2d(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_2d' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_force_2d(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_2d' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION force_3dz(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_3dz' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_force_3dz(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_3dz' LANGUAGE 'C' IMMUTABLE STRICT; -- an alias for force_3dz -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION force_3d(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_3dz' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_force_3d(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_3dz' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION force_3dm(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_3dm' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_force_3dm(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_3dm' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION force_4d(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_4d' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_force_4d(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_4d' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION force_collection(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_collection' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_force_collection(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_collection' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_CollectionExtract(geometry, integer) RETURNS geometry AS '$libdir/postgis-1.5', 'ST_CollectionExtract' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION multi(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_multi' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_multi(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_force_multi' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION expand(box3d,float8) RETURNS box3d AS '$libdir/postgis-1.5', 'BOX3D_expand' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Expand(box3d,float8) RETURNS box3d AS '$libdir/postgis-1.5', 'BOX3D_expand' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION expand(box2d,float8) RETURNS box2d AS '$libdir/postgis-1.5', 'BOX2DFLOAT4_expand' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_expand(box2d,float8) RETURNS box2d AS '$libdir/postgis-1.5', 'BOX2DFLOAT4_expand' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION expand(geometry,float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_expand' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_expand(geometry,float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_expand' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION envelope(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_envelope' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: envelope(geometry) CREATE OR REPLACE FUNCTION ST_Envelope(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_envelope' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION reverse(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_reverse' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Reverse(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_reverse' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION ForceRHR(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_forceRHR_poly' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_ForceRHR(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_forceRHR_poly' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION noop(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_noop' LANGUAGE 'C' VOLATILE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_noop(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_noop' LANGUAGE 'C' VOLATILE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION zmflag(geometry) RETURNS smallint AS '$libdir/postgis-1.5', 'LWGEOM_zmflag' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION ST_zmflag(geometry) RETURNS smallint AS '$libdir/postgis-1.5', 'LWGEOM_zmflag' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION ndims(geometry) RETURNS smallint AS '$libdir/postgis-1.5', 'LWGEOM_ndims' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_NDims(geometry) RETURNS smallint AS '$libdir/postgis-1.5', 'LWGEOM_ndims' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsEWKT(geometry) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asEWKT' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsEWKT(geometry) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asEWKT' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsEWKB(geometry) RETURNS BYTEA AS '$libdir/postgis-1.5','WKBFromLWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsEWKB(geometry) RETURNS BYTEA AS '$libdir/postgis-1.5','WKBFromLWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsHEXEWKB(geometry) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asHEXEWKB' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsHEXEWKB(geometry) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asHEXEWKB' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsHEXEWKB(geometry, text) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asHEXEWKB' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsHEXEWKB(geometry, text) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asHEXEWKB' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsEWKB(geometry,text) RETURNS bytea AS '$libdir/postgis-1.5','WKBFromLWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsEWKB(geometry,text) RETURNS bytea AS '$libdir/postgis-1.5','WKBFromLWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromEWKB(bytea) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOMFromWKB' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomFromEWKB(bytea) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOMFromWKB' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromEWKT(text) RETURNS geometry AS '$libdir/postgis-1.5','parse_WKT_lwgeom' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomFromEWKT(text) RETURNS geometry AS '$libdir/postgis-1.5','parse_WKT_lwgeom' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION postgis_cache_bbox() RETURNS trigger AS '$libdir/postgis-1.5', 'cache_bbox' LANGUAGE 'C'; ------------------------------------------------------------------------ -- CONSTRUCTORS ------------------------------------------------------------------------ -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePoint(float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakePoint(float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePoint(float8, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakePoint(float8, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePoint(float8, float8, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakePoint(float8, float8, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePointM(float8, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoint3dm' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.3.4 CREATE OR REPLACE FUNCTION ST_MakePointM(float8, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoint3dm' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakeBox2d(geometry, geometry) RETURNS box2d AS '$libdir/postgis-1.5', 'BOX2DFLOAT4_construct' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakeBox2d(geometry, geometry) RETURNS box2d AS '$libdir/postgis-1.5', 'BOX2DFLOAT4_construct' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakeBox3d(geometry, geometry) RETURNS box3d AS '$libdir/postgis-1.5', 'BOX3D_construct' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakeBox3d(geometry, geometry) RETURNS box3d AS '$libdir/postgis-1.5', 'BOX3D_construct' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION makeline_garray (geometry[]) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makeline_garray' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakeLine_GArray (geometry[]) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makeline_garray' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_MakeLine (geometry[]) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makeline_garray' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineFromMultiPoint(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_line_from_mpoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LineFromMultiPoint(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_line_from_mpoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakeLine(geometry, geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makeline' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakeLine(geometry, geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makeline' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AddPoint(geometry, geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_addpoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AddPoint(geometry, geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_addpoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AddPoint(geometry, geometry, integer) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_addpoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AddPoint(geometry, geometry, integer) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_addpoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION RemovePoint(geometry, integer) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_removepoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_RemovePoint(geometry, integer) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_removepoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SetPoint(geometry, integer, geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_setpoint_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SetPoint(geometry, integer, geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_setpoint_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_MakeEnvelope(float8, float8, float8, float8, integer) RETURNS geometry AS '$libdir/postgis-1.5', 'ST_MakeEnvelope' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePolygon(geometry, geometry[]) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoly' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakePolygon(geometry, geometry[]) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoly' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MakePolygon(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoly' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MakePolygon(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoly' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION BuildArea(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_buildarea' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_BuildArea(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_buildarea' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Polygonize_GArray (geometry[]) RETURNS geometry AS '$libdir/postgis-1.5', 'polygonize_garray' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION ST_Polygonize_GArray (geometry[]) RETURNS geometry AS '$libdir/postgis-1.5', 'polygonize_garray' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_Polygonize (geometry[]) RETURNS geometry AS '$libdir/postgis-1.5', 'polygonize_garray' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineMerge(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'linemerge' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LineMerge(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'linemerge' LANGUAGE 'C' IMMUTABLE STRICT COST 100; CREATE TYPE geometry_dump AS (path integer[], geom geometry); -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Dump(geometry) RETURNS SETOF geometry_dump AS '$libdir/postgis-1.5', 'LWGEOM_dump' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Dump(geometry) RETURNS SETOF geometry_dump AS '$libdir/postgis-1.5', 'LWGEOM_dump' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION DumpRings(geometry) RETURNS SETOF geometry_dump AS '$libdir/postgis-1.5', 'LWGEOM_dump_rings' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_DumpRings(geometry) RETURNS SETOF geometry_dump AS '$libdir/postgis-1.5', 'LWGEOM_dump_rings' LANGUAGE 'C' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- _ST_DumpPoints() ----------------------------------------------------------------------- -- A helper function for ST_DumpPoints(geom) -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_DumpPoints(the_geom geometry, cur_path integer[]) RETURNS SETOF geometry_dump AS $$ DECLARE tmp geometry_dump; tmp2 geometry_dump; nb_points integer; nb_geom integer; i integer; j integer; g geometry; BEGIN RAISE DEBUG '%,%', cur_path, ST_GeometryType(the_geom); -- Special case (MULTI* OR GEOMETRYCOLLECTION) : iterate and return the DumpPoints of the geometries SELECT ST_NumGeometries(the_geom) INTO nb_geom; IF (nb_geom IS NOT NULL) THEN i = 1; FOR tmp2 IN SELECT (ST_Dump(the_geom)).* LOOP FOR tmp IN SELECT * FROM _ST_DumpPoints(tmp2.geom, cur_path || tmp2.path) LOOP RETURN NEXT tmp; END LOOP; i = i + 1; END LOOP; RETURN; END IF; -- Special case (POLYGON) : return the points of the rings of a polygon IF (ST_GeometryType(the_geom) = 'ST_Polygon') THEN FOR tmp IN SELECT * FROM _ST_DumpPoints(ST_ExteriorRing(the_geom), cur_path || ARRAY[1]) LOOP RETURN NEXT tmp; END LOOP; j := ST_NumInteriorRings(the_geom); FOR i IN 1..j LOOP FOR tmp IN SELECT * FROM _ST_DumpPoints(ST_InteriorRingN(the_geom, i), cur_path || ARRAY[i+1]) LOOP RETURN NEXT tmp; END LOOP; END LOOP; RETURN; END IF; -- Special case (POINT) : return the point IF (ST_GeometryType(the_geom) = 'ST_Point') THEN tmp.path = cur_path || ARRAY[1]; tmp.geom = the_geom; RETURN NEXT tmp; RETURN; END IF; -- Use ST_NumPoints rather than ST_NPoints to have a NULL value if the_geom isn't -- a LINESTRING or CIRCULARSTRING. SELECT ST_NumPoints(the_geom) INTO nb_points; -- This should never happen IF (nb_points IS NULL) THEN RAISE EXCEPTION 'Unexpected error while dumping geometry %', ST_AsText(the_geom); END IF; FOR i IN 1..nb_points LOOP tmp.path = cur_path || ARRAY[i]; tmp.geom := ST_PointN(the_geom, i); RETURN NEXT tmp; END LOOP; END $$ LANGUAGE plpgsql; ----------------------------------------------------------------------- -- ST_DumpPoints() ----------------------------------------------------------------------- -- This function mimicks that of ST_Dump for collections, but this function -- that returns a path and all the points that make up a particular geometry. -- This current implementation in plpgsql does not scale very well at all. -- and should be ported to C at some point. -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_DumpPoints(geometry) RETURNS SETOF geometry_dump AS $$ SELECT * FROM _ST_DumpPoints($1, NULL); $$ LANGUAGE SQL STRICT; ------------------------------------------------------------------------ -- -- Aggregate functions -- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION combine_bbox(box2d,geometry) RETURNS box2d AS '$libdir/postgis-1.5', 'BOX2DFLOAT4_combine' LANGUAGE 'C' IMMUTABLE; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Combine_BBox(box2d,geometry) RETURNS box2d AS '$libdir/postgis-1.5', 'BOX2DFLOAT4_combine' LANGUAGE 'C' IMMUTABLE; -- Temporary hack function CREATE OR REPLACE FUNCTION combine_bbox(box3d_extent,geometry) RETURNS box3d_extent AS '$libdir/postgis-1.5', 'BOX3D_combine' LANGUAGE 'C' IMMUTABLE; -- Temporary hack function CREATE OR REPLACE FUNCTION ST_Combine_BBox(box3d_extent,geometry) RETURNS box3d_extent AS '$libdir/postgis-1.5', 'BOX3D_combine' LANGUAGE 'C' IMMUTABLE; -- Deprecation in 1.2.3 CREATE AGGREGATE Extent( sfunc = ST_combine_bbox, basetype = geometry, stype = box3d_extent ); -- Availability: 1.2.2 CREATE AGGREGATE ST_Extent( sfunc = ST_combine_bbox, basetype = geometry, stype = box3d_extent ); -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION combine_bbox(box3d,geometry) RETURNS box3d AS '$libdir/postgis-1.5', 'BOX3D_combine' LANGUAGE 'C' IMMUTABLE; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Combine_BBox(box3d,geometry) RETURNS box3d AS '$libdir/postgis-1.5', 'BOX3D_combine' LANGUAGE 'C' IMMUTABLE; -- Deprecation in 1.2.3 CREATE AGGREGATE Extent3d( sfunc = combine_bbox, basetype = geometry, stype = box3d ); -- Availability: 1.2.2 CREATE AGGREGATE ST_Extent3d( sfunc = ST_combine_bbox, basetype = geometry, stype = box3d ); ----------------------------------------------------------------------- -- ESTIMATED_EXTENT( <schema name>, <table name>, <column name> ) ----------------------------------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION estimated_extent(text,text,text) RETURNS box2d AS '$libdir/postgis-1.5', 'LWGEOM_estimated_extent' LANGUAGE 'C' IMMUTABLE STRICT SECURITY DEFINER; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_estimated_extent(text,text,text) RETURNS box2d AS '$libdir/postgis-1.5', 'LWGEOM_estimated_extent' LANGUAGE 'C' IMMUTABLE STRICT SECURITY DEFINER; ----------------------------------------------------------------------- -- ESTIMATED_EXTENT( <table name>, <column name> ) ----------------------------------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION estimated_extent(text,text) RETURNS box2d AS '$libdir/postgis-1.5', 'LWGEOM_estimated_extent' LANGUAGE 'C' IMMUTABLE STRICT SECURITY DEFINER; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_estimated_extent(text,text) RETURNS box2d AS '$libdir/postgis-1.5', 'LWGEOM_estimated_extent' LANGUAGE 'C' IMMUTABLE STRICT SECURITY DEFINER; ----------------------------------------------------------------------- -- FIND_EXTENT( <schema name>, <table name>, <column name> ) ----------------------------------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION find_extent(text,text,text) RETURNS box2d AS $$ DECLARE schemaname alias for $1; tablename alias for $2; columnname alias for $3; myrec RECORD; BEGIN FOR myrec IN EXECUTE 'SELECT extent("' || columnname || '") FROM "' || schemaname || '"."' || tablename || '"' LOOP return myrec.extent; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_find_extent(text,text,text) RETURNS box2d AS $$ DECLARE schemaname alias for $1; tablename alias for $2; columnname alias for $3; myrec RECORD; BEGIN FOR myrec IN EXECUTE 'SELECT extent("' || columnname || '") FROM "' || schemaname || '"."' || tablename || '"' LOOP return myrec.extent; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- FIND_EXTENT( <table name>, <column name> ) ----------------------------------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION find_extent(text,text) RETURNS box2d AS $$ DECLARE tablename alias for $1; columnname alias for $2; myrec RECORD; BEGIN FOR myrec IN EXECUTE 'SELECT extent("' || columnname || '") FROM "' || tablename || '"' LOOP return myrec.extent; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_find_extent(text,text) RETURNS box2d AS $$ DECLARE tablename alias for $1; columnname alias for $2; myrec RECORD; BEGIN FOR myrec IN EXECUTE 'SELECT extent("' || columnname || '") FROM "' || tablename || '"' LOOP return myrec.extent; END LOOP; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; ------------------------------------------------------------------- -- SPATIAL_REF_SYS ------------------------------------------------------------------- CREATE TABLE spatial_ref_sys ( srid integer not null primary key, auth_name varchar(256), auth_srid integer, srtext varchar(2048), proj4text varchar(2048) ); ------------------------------------------------------------------- -- GEOMETRY_COLUMNS ------------------------------------------------------------------- CREATE TABLE geometry_columns ( f_table_catalog varchar(256) not null, f_table_schema varchar(256) not null, f_table_name varchar(256) not null, f_geometry_column varchar(256) not null, coord_dimension integer not null, srid integer not null, type varchar(30) not null, CONSTRAINT geometry_columns_pk primary key ( f_table_catalog, f_table_schema, f_table_name, f_geometry_column ) ) WITH OIDS; ----------------------------------------------------------------------- -- RENAME_GEOMETRY_TABLE_CONSTRAINTS() ----------------------------------------------------------------------- -- This function has been obsoleted for the difficulty in -- finding attribute on which the constraint is applied. -- AddGeometryColumn will name the constraints in a meaningful -- way, but nobody can rely on it since old postgis versions did -- not do that. ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION rename_geometry_table_constraints() RETURNS text AS $$ SELECT 'rename_geometry_table_constraint() is obsoleted'::text $$ LANGUAGE 'SQL' IMMUTABLE; ----------------------------------------------------------------------- -- FIX_GEOMETRY_COLUMNS() ----------------------------------------------------------------------- -- This function will: -- -- o try to fix the schema of records with an integer one -- (for PG>=73) -- -- o link records to system tables through attrelid and varattnum -- (for PG<75) -- -- o delete all records for which no linking was possible -- (for PG<75) -- -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION fix_geometry_columns() RETURNS text AS $$ DECLARE mislinked record; result text; linked integer; deleted integer; foundschema integer; BEGIN -- Since 7.3 schema support has been added. -- Previous postgis versions used to put the database name in -- the schema column. This needs to be fixed, so we try to -- set the correct schema for each geometry_colums record -- looking at table, column, type and srid. UPDATE geometry_columns SET f_table_schema = n.nspname FROM pg_namespace n, pg_class c, pg_attribute a, pg_constraint sridcheck, pg_constraint typecheck WHERE ( f_table_schema is NULL OR f_table_schema = '' OR f_table_schema NOT IN ( SELECT nspname::varchar FROM pg_namespace nn, pg_class cc, pg_attribute aa WHERE cc.relnamespace = nn.oid AND cc.relname = f_table_name::name AND aa.attrelid = cc.oid AND aa.attname = f_geometry_column::name)) AND f_table_name::name = c.relname AND c.oid = a.attrelid AND c.relnamespace = n.oid AND f_geometry_column::name = a.attname AND sridcheck.conrelid = c.oid AND sridcheck.consrc LIKE '(srid(% = %)' AND sridcheck.consrc ~ textcat(' = ', srid::text) AND typecheck.conrelid = c.oid AND typecheck.consrc LIKE '((geometrytype(%) = ''%''::text) OR (% IS NULL))' AND typecheck.consrc ~ textcat(' = ''', type::text) AND NOT EXISTS ( SELECT oid FROM geometry_columns gc WHERE c.relname::varchar = gc.f_table_name AND n.nspname::varchar = gc.f_table_schema AND a.attname::varchar = gc.f_geometry_column ); GET DIAGNOSTICS foundschema = ROW_COUNT; -- no linkage to system table needed return 'fixed:'||foundschema::text; END; $$ LANGUAGE 'plpgsql' VOLATILE; ----------------------------------------------------------------------- -- POPULATE_GEOMETRY_COLUMNS() ----------------------------------------------------------------------- -- Truncates and refills the geometry_columns table from all tables and -- views in the database that contain geometry columns. This function -- is a simple wrapper for populate_geometry_columns(oid). In essence, -- this function ensures every geometry column in the database has the -- appropriate spatial contraints (for tables) and exists in the -- geometry_columns table. -- Availability: 1.4.0 ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION populate_geometry_columns() RETURNS text AS $$ DECLARE inserted integer; oldcount integer; probed integer; stale integer; gcs RECORD; gc RECORD; gsrid integer; gndims integer; gtype text; query text; gc_is_valid boolean; BEGIN SELECT count(*) INTO oldcount FROM geometry_columns; inserted := 0; EXECUTE 'TRUNCATE geometry_columns'; -- Count the number of geometry columns in all tables and views SELECT count(DISTINCT c.oid) INTO probed FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE (c.relkind = 'r' OR c.relkind = 'v') AND t.typname = 'geometry' AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND n.nspname NOT ILIKE 'pg_temp%'; -- Iterate through all non-dropped geometry columns RAISE DEBUG 'Processing Tables.....'; FOR gcs IN SELECT DISTINCT ON (c.oid) c.oid, n.nspname, c.relname FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE c.relkind = 'r' AND t.typname = 'geometry' AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND n.nspname NOT ILIKE 'pg_temp%' LOOP inserted := inserted + populate_geometry_columns(gcs.oid); END LOOP; -- Add views to geometry columns table RAISE DEBUG 'Processing Views.....'; FOR gcs IN SELECT DISTINCT ON (c.oid) c.oid, n.nspname, c.relname FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE c.relkind = 'v' AND t.typname = 'geometry' AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid LOOP inserted := inserted + populate_geometry_columns(gcs.oid); END LOOP; IF oldcount > inserted THEN stale = oldcount-inserted; ELSE stale = 0; END IF; RETURN 'probed:' ||probed|| ' inserted:'||inserted|| ' conflicts:'||probed-inserted|| ' deleted:'||stale; END $$ LANGUAGE 'plpgsql' VOLATILE; ----------------------------------------------------------------------- -- POPULATE_GEOMETRY_COLUMNS(tbl_oid oid) ----------------------------------------------------------------------- -- DELETEs from and reINSERTs into the geometry_columns table all entries -- associated with the oid of a particular table or view. -- -- If the provided oid is for a table, this function tries to determine -- the srid, dimension, and geometry type of the all geometries -- in the table, adding contraints as necessary to the table. If -- successful, an appropriate row is inserted into the geometry_columns -- table, otherwise, the exception is caught and an error notice is -- raised describing the problem. (This is so the wrapper function -- populate_geometry_columns() can apply spatial constraints to all -- geometry columns across an entire database at once without erroring -- out) -- -- If the provided oid is for a view, as with a table oid, this function -- tries to determine the srid, dimension, and type of all the geometries -- in the view, inserting appropriate entries into the geometry_columns -- table. -- Availability: 1.4.0 ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION populate_geometry_columns(tbl_oid oid) RETURNS integer AS $$ DECLARE gcs RECORD; gc RECORD; gsrid integer; gndims integer; gtype text; query text; gc_is_valid boolean; inserted integer; BEGIN inserted := 0; -- Iterate through all geometry columns in this table FOR gcs IN SELECT n.nspname, c.relname, a.attname FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE c.relkind = 'r' AND t.typname = 'geometry' AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND n.nspname NOT ILIKE 'pg_temp%' AND c.oid = tbl_oid LOOP RAISE DEBUG 'Processing table %.%.%', gcs.nspname, gcs.relname, gcs.attname; DELETE FROM geometry_columns WHERE f_table_schema = gcs.nspname AND f_table_name = gcs.relname AND f_geometry_column = gcs.attname; gc_is_valid := true; -- Try to find srid check from system tables (pg_constraint) gsrid := (SELECT replace(replace(split_part(s.consrc, ' = ', 2), ')', ''), '(', '') FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = gcs.nspname AND c.relname = gcs.relname AND a.attname = gcs.attname AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%srid(% = %'); IF (gsrid IS NULL) THEN -- Try to find srid from the geometry itself EXECUTE 'SELECT srid(' || quote_ident(gcs.attname) || ') FROM ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' INTO gc; gsrid := gc.srid; -- Try to apply srid check to column IF (gsrid IS NOT NULL) THEN BEGIN EXECUTE 'ALTER TABLE ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' ADD CONSTRAINT ' || quote_ident('enforce_srid_' || gcs.attname) || ' CHECK (srid(' || quote_ident(gcs.attname) || ') = ' || gsrid || ')'; EXCEPTION WHEN check_violation THEN RAISE WARNING 'Not inserting ''%'' in ''%.%'' into geometry_columns: could not apply constraint CHECK (srid(%) = %)', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname), quote_ident(gcs.attname), gsrid; gc_is_valid := false; END; END IF; END IF; -- Try to find ndims check from system tables (pg_constraint) gndims := (SELECT replace(split_part(s.consrc, ' = ', 2), ')', '') FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = gcs.nspname AND c.relname = gcs.relname AND a.attname = gcs.attname AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%ndims(% = %'); IF (gndims IS NULL) THEN -- Try to find ndims from the geometry itself EXECUTE 'SELECT ndims(' || quote_ident(gcs.attname) || ') FROM ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' INTO gc; gndims := gc.ndims; -- Try to apply ndims check to column IF (gndims IS NOT NULL) THEN BEGIN EXECUTE 'ALTER TABLE ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' ADD CONSTRAINT ' || quote_ident('enforce_dims_' || gcs.attname) || ' CHECK (ndims(' || quote_ident(gcs.attname) || ') = '||gndims||')'; EXCEPTION WHEN check_violation THEN RAISE WARNING 'Not inserting ''%'' in ''%.%'' into geometry_columns: could not apply constraint CHECK (ndims(%) = %)', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname), quote_ident(gcs.attname), gndims; gc_is_valid := false; END; END IF; END IF; -- Try to find geotype check from system tables (pg_constraint) gtype := (SELECT replace(split_part(s.consrc, '''', 2), ')', '') FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s WHERE n.nspname = gcs.nspname AND c.relname = gcs.relname AND a.attname = gcs.attname AND a.attrelid = c.oid AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) AND s.consrc LIKE '%geometrytype(% = %'); IF (gtype IS NULL) THEN -- Try to find geotype from the geometry itself EXECUTE 'SELECT geometrytype(' || quote_ident(gcs.attname) || ') FROM ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' INTO gc; gtype := gc.geometrytype; --IF (gtype IS NULL) THEN -- gtype := 'GEOMETRY'; --END IF; -- Try to apply geometrytype check to column IF (gtype IS NOT NULL) THEN BEGIN EXECUTE 'ALTER TABLE ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' ADD CONSTRAINT ' || quote_ident('enforce_geotype_' || gcs.attname) || ' CHECK ((geometrytype(' || quote_ident(gcs.attname) || ') = ' || quote_literal(gtype) || ') OR (' || quote_ident(gcs.attname) || ' IS NULL))'; EXCEPTION WHEN check_violation THEN -- No geometry check can be applied. This column contains a number of geometry types. RAISE WARNING 'Could not add geometry type check (%) to table column: %.%.%', gtype, quote_ident(gcs.nspname),quote_ident(gcs.relname),quote_ident(gcs.attname); END; END IF; END IF; IF (gsrid IS NULL) THEN RAISE WARNING 'Not inserting ''%'' in ''%.%'' into geometry_columns: could not determine the srid', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname); ELSIF (gndims IS NULL) THEN RAISE WARNING 'Not inserting ''%'' in ''%.%'' into geometry_columns: could not determine the number of dimensions', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname); ELSIF (gtype IS NULL) THEN RAISE WARNING 'Not inserting ''%'' in ''%.%'' into geometry_columns: could not determine the geometry type', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname); ELSE -- Only insert into geometry_columns if table constraints could be applied. IF (gc_is_valid) THEN INSERT INTO geometry_columns (f_table_catalog,f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) VALUES ('', gcs.nspname, gcs.relname, gcs.attname, gndims, gsrid, gtype); inserted := inserted + 1; END IF; END IF; END LOOP; -- Add views to geometry columns table FOR gcs IN SELECT n.nspname, c.relname, a.attname FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE c.relkind = 'v' AND t.typname = 'geometry' AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND n.nspname NOT ILIKE 'pg_temp%' AND c.oid = tbl_oid LOOP RAISE DEBUG 'Processing view %.%.%', gcs.nspname, gcs.relname, gcs.attname; DELETE FROM geometry_columns WHERE f_table_schema = gcs.nspname AND f_table_name = gcs.relname AND f_geometry_column = gcs.attname; EXECUTE 'SELECT ndims(' || quote_ident(gcs.attname) || ') FROM ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' INTO gc; gndims := gc.ndims; EXECUTE 'SELECT srid(' || quote_ident(gcs.attname) || ') FROM ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' INTO gc; gsrid := gc.srid; EXECUTE 'SELECT geometrytype(' || quote_ident(gcs.attname) || ') FROM ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' INTO gc; gtype := gc.geometrytype; IF (gndims IS NULL) THEN RAISE WARNING 'Not inserting ''%'' in ''%.%'' into geometry_columns: could not determine ndims', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname); ELSIF (gsrid IS NULL) THEN RAISE WARNING 'Not inserting ''%'' in ''%.%'' into geometry_columns: could not determine srid', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname); ELSIF (gtype IS NULL) THEN RAISE WARNING 'Not inserting ''%'' in ''%.%'' into geometry_columns: could not determine gtype', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname); ELSE query := 'INSERT INTO geometry_columns (f_table_catalog,f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) ' || 'VALUES ('''', ' || quote_literal(gcs.nspname) || ',' || quote_literal(gcs.relname) || ',' || quote_literal(gcs.attname) || ',' || gndims || ',' || gsrid || ',' || quote_literal(gtype) || ')'; EXECUTE query; inserted := inserted + 1; END IF; END LOOP; RETURN inserted; END $$ LANGUAGE 'plpgsql' VOLATILE; ----------------------------------------------------------------------- -- PROBE_GEOMETRY_COLUMNS() ----------------------------------------------------------------------- -- Fill the geometry_columns table with values probed from the system -- catalogues. This is done by simply looking up constraints previously -- added to a geometry column. If geometry constraints are missing, no -- attempt is made to add the necessary constraints to the geometry -- column, nor is it recorded in the geometry_columns table. -- 3d flag cannot be probed, it defaults to 2 -- -- Note that bogus records already in geometry_columns are not -- overridden (a check for schema.table.column is performed), so -- to have a fresh probe backup your geometry_columns, delete from -- it and probe. ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION probe_geometry_columns() RETURNS text AS $$ DECLARE inserted integer; oldcount integer; probed integer; stale integer; BEGIN SELECT count(*) INTO oldcount FROM geometry_columns; SELECT count(*) INTO probed FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, pg_constraint sridcheck, pg_constraint typecheck WHERE t.typname = 'geometry' AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND sridcheck.connamespace = n.oid AND typecheck.connamespace = n.oid AND sridcheck.conrelid = c.oid AND sridcheck.consrc LIKE '(srid('||a.attname||') = %)' AND typecheck.conrelid = c.oid AND typecheck.consrc LIKE '((geometrytype('||a.attname||') = ''%''::text) OR (% IS NULL))' ; INSERT INTO geometry_columns SELECT ''::varchar as f_table_catalogue, n.nspname::varchar as f_table_schema, c.relname::varchar as f_table_name, a.attname::varchar as f_geometry_column, 2 as coord_dimension, trim(both ' =)' from replace(replace(split_part( sridcheck.consrc, ' = ', 2), ')', ''), '(', ''))::integer AS srid, trim(both ' =)''' from substr(typecheck.consrc, strpos(typecheck.consrc, '='), strpos(typecheck.consrc, '::')- strpos(typecheck.consrc, '=') ))::varchar as type FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, pg_constraint sridcheck, pg_constraint typecheck WHERE t.typname = 'geometry' AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND sridcheck.connamespace = n.oid AND typecheck.connamespace = n.oid AND sridcheck.conrelid = c.oid AND sridcheck.consrc LIKE '(st_srid('||a.attname||') = %)' AND typecheck.conrelid = c.oid AND typecheck.consrc LIKE '((geometrytype('||a.attname||') = ''%''::text) OR (% IS NULL))' AND NOT EXISTS ( SELECT oid FROM geometry_columns gc WHERE c.relname::varchar = gc.f_table_name AND n.nspname::varchar = gc.f_table_schema AND a.attname::varchar = gc.f_geometry_column ); GET DIAGNOSTICS inserted = ROW_COUNT; IF oldcount > probed THEN stale = oldcount-probed; ELSE stale = 0; END IF; RETURN 'probed:'||probed::text|| ' inserted:'||inserted::text|| ' conflicts:'||(probed-inserted)::text|| ' stale:'||stale::text; END $$ LANGUAGE 'plpgsql' VOLATILE; ----------------------------------------------------------------------- -- ADDGEOMETRYCOLUMN -- <catalogue>, <schema>, <table>, <column>, <srid>, <type>, <dim> ----------------------------------------------------------------------- -- -- Type can be one of GEOMETRY, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON, -- MULTIPOLYGON, LINESTRING, or MULTILINESTRING. -- -- Geometry types (except GEOMETRY) are checked for consistency using a CHECK constraint. -- Uses an ALTER TABLE command to add the geometry column to the table. -- Addes a row to geometry_columns. -- Addes a constraint on the table that all the geometries MUST have the same -- SRID. Checks the coord_dimension to make sure its between 0 and 3. -- Should also check the precision grid (future expansion). -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION AddGeometryColumn(varchar,varchar,varchar,varchar,integer,varchar,integer) RETURNS text AS $$ DECLARE catalog_name alias for $1; schema_name alias for $2; table_name alias for $3; column_name alias for $4; new_srid alias for $5; new_type alias for $6; new_dim alias for $7; rec RECORD; sr varchar; real_schema name; sql text; BEGIN -- Verify geometry type IF ( NOT ( (new_type = 'GEOMETRY') OR (new_type = 'GEOMETRYCOLLECTION') OR (new_type = 'POINT') OR (new_type = 'MULTIPOINT') OR (new_type = 'POLYGON') OR (new_type = 'MULTIPOLYGON') OR (new_type = 'LINESTRING') OR (new_type = 'MULTILINESTRING') OR (new_type = 'GEOMETRYCOLLECTIONM') OR (new_type = 'POINTM') OR (new_type = 'MULTIPOINTM') OR (new_type = 'POLYGONM') OR (new_type = 'MULTIPOLYGONM') OR (new_type = 'LINESTRINGM') OR (new_type = 'MULTILINESTRINGM') OR (new_type = 'CIRCULARSTRING') OR (new_type = 'CIRCULARSTRINGM') OR (new_type = 'COMPOUNDCURVE') OR (new_type = 'COMPOUNDCURVEM') OR (new_type = 'CURVEPOLYGON') OR (new_type = 'CURVEPOLYGONM') OR (new_type = 'MULTICURVE') OR (new_type = 'MULTICURVEM') OR (new_type = 'MULTISURFACE') OR (new_type = 'MULTISURFACEM')) ) THEN RAISE EXCEPTION 'Invalid type name - valid ones are: POINT, MULTIPOINT, LINESTRING, MULTILINESTRING, POLYGON, MULTIPOLYGON, CIRCULARSTRING, COMPOUNDCURVE, MULTICURVE, CURVEPOLYGON, MULTISURFACE, GEOMETRY, GEOMETRYCOLLECTION, POINTM, MULTIPOINTM, LINESTRINGM, MULTILINESTRINGM, POLYGONM, MULTIPOLYGONM, CIRCULARSTRINGM, COMPOUNDCURVEM, MULTICURVEM CURVEPOLYGONM, MULTISURFACEM, or GEOMETRYCOLLECTIONM'; RETURN 'fail'; END IF; -- Verify dimension IF ( (new_dim >4) OR (new_dim <0) ) THEN RAISE EXCEPTION 'invalid dimension'; RETURN 'fail'; END IF; IF ( (new_type LIKE '%M') AND (new_dim!=3) ) THEN RAISE EXCEPTION 'TypeM needs 3 dimensions'; RETURN 'fail'; END IF; -- Verify SRID IF ( new_srid != -1 ) THEN SELECT SRID INTO sr FROM spatial_ref_sys WHERE SRID = new_srid; IF NOT FOUND THEN RAISE EXCEPTION 'AddGeometryColumns() - invalid SRID'; RETURN 'fail'; END IF; END IF; -- Verify schema IF ( schema_name IS NOT NULL AND schema_name != '' ) THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE text(nspname) = ' || quote_literal(schema_name) || 'LIMIT 1'; RAISE DEBUG '%', sql; EXECUTE sql INTO real_schema; IF ( real_schema IS NULL ) THEN RAISE EXCEPTION 'Schema % is not a valid schemaname', quote_literal(schema_name); RETURN 'fail'; END IF; END IF; IF ( real_schema IS NULL ) THEN RAISE DEBUG 'Detecting schema'; sql := 'SELECT n.nspname AS schemaname ' || 'FROM pg_catalog.pg_class c ' || 'JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ' || 'WHERE c.relkind = ' || quote_literal('r') || ' AND n.nspname NOT IN (' || quote_literal('pg_catalog') || ', ' || quote_literal('pg_toast') || ')' || ' AND pg_catalog.pg_table_is_visible(c.oid)' || ' AND c.relname = ' || quote_literal(table_name); RAISE DEBUG '%', sql; EXECUTE sql INTO real_schema; IF ( real_schema IS NULL ) THEN RAISE EXCEPTION 'Table % does not occur in the search_path', quote_literal(table_name); RETURN 'fail'; END IF; END IF; -- Add geometry column to table sql := 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD COLUMN ' || quote_ident(column_name) || ' geometry '; RAISE DEBUG '%', sql; EXECUTE sql; -- Delete stale record in geometry_columns (if any) sql := 'DELETE FROM geometry_columns WHERE f_table_catalog = ' || quote_literal('') || ' AND f_table_schema = ' || quote_literal(real_schema) || ' AND f_table_name = ' || quote_literal(table_name) || ' AND f_geometry_column = ' || quote_literal(column_name); RAISE DEBUG '%', sql; EXECUTE sql; -- Add record in geometry_columns sql := 'INSERT INTO geometry_columns (f_table_catalog,f_table_schema,f_table_name,' || 'f_geometry_column,coord_dimension,srid,type)' || ' VALUES (' || quote_literal('') || ',' || quote_literal(real_schema) || ',' || quote_literal(table_name) || ',' || quote_literal(column_name) || ',' || new_dim::text || ',' || new_srid::text || ',' || quote_literal(new_type) || ')'; RAISE DEBUG '%', sql; EXECUTE sql; -- Add table CHECKs sql := 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD CONSTRAINT ' || quote_ident('enforce_srid_' || column_name) || ' CHECK (ST_SRID(' || quote_ident(column_name) || ') = ' || new_srid::text || ')' ; RAISE DEBUG '%', sql; EXECUTE sql; sql := 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD CONSTRAINT ' || quote_ident('enforce_dims_' || column_name) || ' CHECK (ST_NDims(' || quote_ident(column_name) || ') = ' || new_dim::text || ')' ; RAISE DEBUG '%', sql; EXECUTE sql; IF ( NOT (new_type = 'GEOMETRY')) THEN sql := 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD CONSTRAINT ' || quote_ident('enforce_geotype_' || column_name) || ' CHECK (GeometryType(' || quote_ident(column_name) || ')=' || quote_literal(new_type) || ' OR (' || quote_ident(column_name) || ') is null)'; RAISE DEBUG '%', sql; EXECUTE sql; END IF; RETURN real_schema || '.' || table_name || '.' || column_name || ' SRID:' || new_srid::text || ' TYPE:' || new_type || ' DIMS:' || new_dim::text || ' '; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ---------------------------------------------------------------------------- -- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> ) ---------------------------------------------------------------------------- -- -- This is a wrapper to the real AddGeometryColumn, for use -- when catalogue is undefined -- ---------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION AddGeometryColumn(varchar,varchar,varchar,integer,varchar,integer) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT AddGeometryColumn('',$1,$2,$3,$4,$5,$6) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' STABLE STRICT; ---------------------------------------------------------------------------- -- ADDGEOMETRYCOLUMN ( <table>, <column>, <srid>, <type>, <dim> ) ---------------------------------------------------------------------------- -- -- This is a wrapper to the real AddGeometryColumn, for use -- when catalogue and schema are undefined -- ---------------------------------------------------------------------------- CREATE OR REPLACE FUNCTION AddGeometryColumn(varchar,varchar,integer,varchar,integer) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT AddGeometryColumn('','',$1,$2,$3,$4,$5) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYCOLUMN -- <catalogue>, <schema>, <table>, <column> ----------------------------------------------------------------------- -- -- Removes geometry column reference from geometry_columns table. -- Drops the column with pgsql >= 73. -- Make some silly enforcements on it for pgsql < 73 -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryColumn(varchar, varchar,varchar,varchar) RETURNS text AS $$ DECLARE catalog_name alias for $1; schema_name alias for $2; table_name alias for $3; column_name alias for $4; myrec RECORD; okay boolean; real_schema name; BEGIN -- Find, check or fix schema_name IF ( schema_name != '' ) THEN okay = 'f'; FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP okay := 't'; END LOOP; IF ( okay <> 't' ) THEN RAISE NOTICE 'Invalid schema name - using current_schema()'; SELECT current_schema() into real_schema; ELSE real_schema = schema_name; END IF; ELSE SELECT current_schema() into real_schema; END IF; -- Find out if the column is in the geometry_columns table okay = 'f'; FOR myrec IN SELECT * from geometry_columns where f_table_schema = text(real_schema) and f_table_name = table_name and f_geometry_column = column_name LOOP okay := 't'; END LOOP; IF (okay <> 't') THEN RAISE EXCEPTION 'column not found in geometry_columns table'; RETURN 'f'; END IF; -- Remove ref from geometry_columns table EXECUTE 'delete from geometry_columns where f_table_schema = ' || quote_literal(real_schema) || ' and f_table_name = ' || quote_literal(table_name) || ' and f_geometry_column = ' || quote_literal(column_name); -- Remove table column EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' DROP COLUMN ' || quote_ident(column_name); RETURN real_schema || '.' || table_name || '.' || column_name ||' effectively removed.'; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYCOLUMN -- <schema>, <table>, <column> ----------------------------------------------------------------------- -- -- This is a wrapper to the real DropGeometryColumn, for use -- when catalogue is undefined -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryColumn(varchar,varchar,varchar) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT DropGeometryColumn('',$1,$2,$3) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYCOLUMN -- <table>, <column> ----------------------------------------------------------------------- -- -- This is a wrapper to the real DropGeometryColumn, for use -- when catalogue and schema is undefined. -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryColumn(varchar,varchar) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT DropGeometryColumn('','',$1,$2) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYTABLE -- <catalogue>, <schema>, <table> ----------------------------------------------------------------------- -- -- Drop a table and all its references in geometry_columns -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryTable(varchar, varchar,varchar) RETURNS text AS $$ DECLARE catalog_name alias for $1; schema_name alias for $2; table_name alias for $3; real_schema name; BEGIN IF ( schema_name = '' ) THEN SELECT current_schema() into real_schema; ELSE real_schema = schema_name; END IF; -- Remove refs from geometry_columns table EXECUTE 'DELETE FROM geometry_columns WHERE ' || 'f_table_schema = ' || quote_literal(real_schema) || ' AND ' || ' f_table_name = ' || quote_literal(table_name); -- Remove table EXECUTE 'DROP TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name); RETURN real_schema || '.' || table_name ||' dropped.'; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- DROPGEOMETRYTABLE -- <schema>, <table> ----------------------------------------------------------------------- -- -- Drop a table and all its references in geometry_columns -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryTable(varchar,varchar) RETURNS text AS $$ SELECT DropGeometryTable('',$1,$2) $$ LANGUAGE 'sql' WITH (isstrict); ----------------------------------------------------------------------- -- DROPGEOMETRYTABLE -- <table> ----------------------------------------------------------------------- -- -- Drop a table and all its references in geometry_columns -- For PG>=73 use current_schema() -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION DropGeometryTable(varchar) RETURNS text AS $$ SELECT DropGeometryTable('','',$1) $$ LANGUAGE 'sql' VOLATILE STRICT; ----------------------------------------------------------------------- -- UPDATEGEOMETRYSRID -- <catalogue>, <schema>, <table>, <column>, <srid> ----------------------------------------------------------------------- -- -- Change SRID of all features in a spatially-enabled table -- ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION UpdateGeometrySRID(varchar,varchar,varchar,varchar,integer) RETURNS text AS $$ DECLARE catalog_name alias for $1; schema_name alias for $2; table_name alias for $3; column_name alias for $4; new_srid alias for $5; myrec RECORD; okay boolean; cname varchar; real_schema name; BEGIN -- Find, check or fix schema_name IF ( schema_name != '' ) THEN okay = 'f'; FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP okay := 't'; END LOOP; IF ( okay <> 't' ) THEN RAISE EXCEPTION 'Invalid schema name'; ELSE real_schema = schema_name; END IF; ELSE SELECT INTO real_schema current_schema()::text; END IF; -- Find out if the column is in the geometry_columns table okay = 'f'; FOR myrec IN SELECT * from geometry_columns where f_table_schema = text(real_schema) and f_table_name = table_name and f_geometry_column = column_name LOOP okay := 't'; END LOOP; IF (okay <> 't') THEN RAISE EXCEPTION 'column not found in geometry_columns table'; RETURN 'f'; END IF; -- Update ref from geometry_columns table EXECUTE 'UPDATE geometry_columns SET SRID = ' || new_srid::text || ' where f_table_schema = ' || quote_literal(real_schema) || ' and f_table_name = ' || quote_literal(table_name) || ' and f_geometry_column = ' || quote_literal(column_name); -- Make up constraint name cname = 'enforce_srid_' || column_name; -- Drop enforce_srid constraint EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' DROP constraint ' || quote_ident(cname); -- Update geometries SRID EXECUTE 'UPDATE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' SET ' || quote_ident(column_name) || ' = setSRID(' || quote_ident(column_name) || ', ' || new_srid::text || ')'; -- Reset enforce_srid constraint EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD constraint ' || quote_ident(cname) || ' CHECK (srid(' || quote_ident(column_name) || ') = ' || new_srid::text || ')'; RETURN real_schema || '.' || table_name || '.' || column_name ||' SRID changed to ' || new_srid::text; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- UPDATEGEOMETRYSRID -- <schema>, <table>, <column>, <srid> ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION UpdateGeometrySRID(varchar,varchar,varchar,integer) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT UpdateGeometrySRID('',$1,$2,$3,$4) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- UPDATEGEOMETRYSRID -- <table>, <column>, <srid> ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION UpdateGeometrySRID(varchar,varchar,integer) RETURNS text AS $$ DECLARE ret text; BEGIN SELECT UpdateGeometrySRID('','',$1,$2,$3) into ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; ----------------------------------------------------------------------- -- FIND_SRID( <schema>, <table>, <geom col> ) ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION find_srid(varchar,varchar,varchar) RETURNS int4 AS $$ DECLARE schem text; tabl text; sr int4; BEGIN IF $1 IS NULL THEN RAISE EXCEPTION 'find_srid() - schema is NULL!'; END IF; IF $2 IS NULL THEN RAISE EXCEPTION 'find_srid() - table name is NULL!'; END IF; IF $3 IS NULL THEN RAISE EXCEPTION 'find_srid() - column name is NULL!'; END IF; schem = $1; tabl = $2; -- if the table contains a . and the schema is empty -- split the table into a schema and a table -- otherwise drop through to default behavior IF ( schem = '' and tabl LIKE '%.%' ) THEN schem = substr(tabl,1,strpos(tabl,'.')-1); tabl = substr(tabl,length(schem)+2); ELSE schem = schem || '%'; END IF; select SRID into sr from geometry_columns where f_table_schema like schem and f_table_name = tabl and f_geometry_column = $3; IF NOT FOUND THEN RAISE EXCEPTION 'find_srid() - couldnt find the corresponding SRID - is the geometry registered in the GEOMETRY_COLUMNS table? Is there an uppercase/lowercase missmatch?'; END IF; return sr; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; --------------------------------------------------------------- -- PROJ support --------------------------------------------------------------- CREATE OR REPLACE FUNCTION get_proj4_from_srid(integer) RETURNS text AS $$ BEGIN RETURN proj4text::text FROM spatial_ref_sys WHERE srid= $1; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION postgis_transform_geometry(geometry,text,text,int) RETURNS geometry AS '$libdir/postgis-1.5','transform_geom' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION transform(geometry,integer) RETURNS geometry AS '$libdir/postgis-1.5','transform' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: transform(geometry,integer) CREATE OR REPLACE FUNCTION ST_Transform(geometry,integer) RETURNS geometry AS '$libdir/postgis-1.5','transform' LANGUAGE 'C' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- POSTGIS_VERSION() ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION postgis_version() RETURNS text AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_proj_version() RETURNS text AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE; -- -- IMPORTANT: -- Starting at 1.1.0 this function is used by postgis_proc_upgrade.pl -- to extract version of postgis being installed. -- Do not modify this w/out also changing postgis_proc_upgrade.pl -- CREATE OR REPLACE FUNCTION postgis_scripts_installed() RETURNS text AS 'SELECT ''1.5 r7360''::text AS version' LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_lib_version() RETURNS text AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE; -- a new lib will require a new session -- NOTE: starting at 1.1.0 this is the same of postgis_lib_version() CREATE OR REPLACE FUNCTION postgis_scripts_released() RETURNS text AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_uses_stats() RETURNS bool AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_geos_version() RETURNS text AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_libxml_version() RETURNS text AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_scripts_build_date() RETURNS text AS 'SELECT ''2012-07-21 19:51:14''::text AS version' LANGUAGE 'sql' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_lib_build_date() RETURNS text AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE; CREATE OR REPLACE FUNCTION postgis_full_version() RETURNS text AS $$ DECLARE libver text; projver text; geosver text; libxmlver text; usestats bool; dbproc text; relproc text; fullver text; BEGIN SELECT postgis_lib_version() INTO libver; SELECT postgis_proj_version() INTO projver; SELECT postgis_geos_version() INTO geosver; SELECT postgis_libxml_version() INTO libxmlver; SELECT postgis_uses_stats() INTO usestats; SELECT postgis_scripts_installed() INTO dbproc; SELECT postgis_scripts_released() INTO relproc; fullver = 'POSTGIS="' || libver || '"'; IF geosver IS NOT NULL THEN fullver = fullver || ' GEOS="' || geosver || '"'; END IF; IF projver IS NOT NULL THEN fullver = fullver || ' PROJ="' || projver || '"'; END IF; IF libxmlver IS NOT NULL THEN fullver = fullver || ' LIBXML="' || libxmlver || '"'; END IF; IF usestats THEN fullver = fullver || ' USE_STATS'; END IF; -- fullver = fullver || ' DBPROC="' || dbproc || '"'; -- fullver = fullver || ' RELPROC="' || relproc || '"'; IF dbproc != relproc THEN fullver = fullver || ' (procs from ' || dbproc || ' need upgrade)'; END IF; RETURN fullver; END $$ LANGUAGE 'plpgsql' IMMUTABLE; --------------------------------------------------------------- -- CASTS --------------------------------------------------------------- -- Legacy ST_ variants of casts, to be removed in 2.0 -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box2d(geometry) RETURNS box2d AS '$libdir/postgis-1.5','LWGEOM_to_BOX2DFLOAT4' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box3d(geometry) RETURNS box3d AS '$libdir/postgis-1.5','LWGEOM_to_BOX3D' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box(geometry) RETURNS box AS '$libdir/postgis-1.5','LWGEOM_to_BOX' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box2d(box3d) RETURNS box2d AS '$libdir/postgis-1.5','BOX3D_to_BOX2DFLOAT4' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box3d(box2d) RETURNS box3d AS '$libdir/postgis-1.5','BOX2DFLOAT4_to_BOX3D' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box(box3d) RETURNS box AS '$libdir/postgis-1.5','BOX3D_to_BOX' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_text(geometry) RETURNS text AS '$libdir/postgis-1.5','LWGEOM_to_text' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry(box2d) RETURNS geometry AS '$libdir/postgis-1.5','BOX2DFLOAT4_to_LWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry(box3d) RETURNS geometry AS '$libdir/postgis-1.5','BOX3D_to_LWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry(text) RETURNS geometry AS '$libdir/postgis-1.5','parse_WKT_lwgeom' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry(chip) RETURNS geometry AS '$libdir/postgis-1.5','CHIP_to_LWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry(bytea) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_bytea' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_bytea(geometry) RETURNS bytea AS '$libdir/postgis-1.5','LWGEOM_to_bytea' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box3d_extent(box3d_extent) RETURNS box3d AS '$libdir/postgis-1.5', 'BOX3D_extent_to_BOX3D' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_box2d(box3d_extent) RETURNS box2d AS '$libdir/postgis-1.5', 'BOX3D_to_BOX2DFLOAT4' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.5.0 CREATE OR REPLACE FUNCTION st_geometry(box3d_extent) RETURNS geometry AS '$libdir/postgis-1.5','BOX3D_to_LWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CREATE OR REPLACE FUNCTION box2d(geometry) RETURNS box2d AS '$libdir/postgis-1.5','LWGEOM_to_BOX2DFLOAT4' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box3d(geometry) RETURNS box3d AS '$libdir/postgis-1.5','LWGEOM_to_BOX3D' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box(geometry) RETURNS box AS '$libdir/postgis-1.5','LWGEOM_to_BOX' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box2d(box3d) RETURNS box2d AS '$libdir/postgis-1.5','BOX3D_to_BOX2DFLOAT4' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box3d(box2d) RETURNS box3d AS '$libdir/postgis-1.5','BOX2DFLOAT4_to_BOX3D' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION box(box3d) RETURNS box AS '$libdir/postgis-1.5','BOX3D_to_BOX' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION text(geometry) RETURNS text AS '$libdir/postgis-1.5','LWGEOM_to_text' LANGUAGE 'C' IMMUTABLE STRICT; -- this is kept for backward-compatibility -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION box3dtobox(box3d) RETURNS box AS 'SELECT box($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry(box2d) RETURNS geometry AS '$libdir/postgis-1.5','BOX2DFLOAT4_to_LWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry(box3d) RETURNS geometry AS '$libdir/postgis-1.5','BOX3D_to_LWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry(text) RETURNS geometry AS '$libdir/postgis-1.5','parse_WKT_lwgeom' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry(chip) RETURNS geometry AS '$libdir/postgis-1.5','CHIP_to_LWGEOM' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geometry(bytea) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_bytea' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION bytea(geometry) RETURNS bytea AS '$libdir/postgis-1.5','LWGEOM_to_bytea' LANGUAGE 'C' IMMUTABLE STRICT; -- 7.3+ explicit casting definitions CREATE CAST (geometry AS box2d) WITH FUNCTION box2d(geometry) AS IMPLICIT; CREATE CAST (geometry AS box3d) WITH FUNCTION box3d(geometry) AS IMPLICIT; CREATE CAST (geometry AS box) WITH FUNCTION box(geometry) AS IMPLICIT; CREATE CAST (box3d AS box2d) WITH FUNCTION box2d(box3d) AS IMPLICIT; CREATE CAST (box2d AS box3d) WITH FUNCTION box3d(box2d) AS IMPLICIT; CREATE CAST (box2d AS geometry) WITH FUNCTION geometry(box2d) AS IMPLICIT; CREATE CAST (box3d AS box) WITH FUNCTION box(box3d) AS IMPLICIT; CREATE CAST (box3d AS geometry) WITH FUNCTION geometry(box3d) AS IMPLICIT; CREATE CAST (text AS geometry) WITH FUNCTION geometry(text) AS IMPLICIT; CREATE CAST (geometry AS text) WITH FUNCTION text(geometry) AS IMPLICIT; CREATE CAST (chip AS geometry) WITH FUNCTION geometry(chip) AS IMPLICIT; CREATE CAST (bytea AS geometry) WITH FUNCTION geometry(bytea) AS IMPLICIT; CREATE CAST (geometry AS bytea) WITH FUNCTION bytea(geometry) AS IMPLICIT; -- Casts to allow the box3d_extent type to automatically cast to box3d/box2d in queries CREATE CAST (box3d_extent AS box3d) WITH FUNCTION box3d_extent(box3d_extent) AS IMPLICIT; CREATE CAST (box3d_extent AS box2d) WITH FUNCTION box2d(box3d_extent) AS IMPLICIT; CREATE CAST (box3d_extent AS geometry) WITH FUNCTION geometry(box3d_extent) AS IMPLICIT; --------------------------------------------------------------- -- Algorithms --------------------------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Simplify(geometry, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_simplify2d' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Simplify(geometry, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_simplify2d' LANGUAGE 'C' IMMUTABLE STRICT; -- SnapToGrid(input, xoff, yoff, xsize, ysize) -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SnapToGrid(geometry, float8, float8, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_snaptogrid' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, float8, float8, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_snaptogrid' LANGUAGE 'C' IMMUTABLE STRICT; -- SnapToGrid(input, xsize, ysize) # offsets=0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SnapToGrid(geometry, float8, float8) RETURNS geometry AS 'SELECT SnapToGrid($1, 0, 0, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, float8, float8) RETURNS geometry AS 'SELECT ST_SnapToGrid($1, 0, 0, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- SnapToGrid(input, size) # xsize=ysize=size, offsets=0 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SnapToGrid(geometry, float8) RETURNS geometry AS 'SELECT SnapToGrid($1, 0, 0, $2, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, float8) RETURNS geometry AS 'SELECT ST_SnapToGrid($1, 0, 0, $2, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- SnapToGrid(input, point_offsets, xsize, ysize, zsize, msize) -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SnapToGrid(geometry, geometry, float8, float8, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_snaptogrid_pointoff' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, geometry, float8, float8, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_snaptogrid_pointoff' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Segmentize(geometry, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_segmentize2d' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Segmentize(geometry, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_segmentize2d' LANGUAGE 'C' IMMUTABLE STRICT; --------------------------------------------------------------- -- LRS --------------------------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION line_interpolate_point(geometry, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_line_interpolate_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_line_interpolate_point(geometry, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_line_interpolate_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION line_substring(geometry, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_line_substring' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_line_substring(geometry, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_line_substring' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION line_locate_point(geometry, geometry) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_line_locate_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_line_locate_point(geometry, geometry) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_line_locate_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION locate_between_measures(geometry, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_locate_between_m' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_locate_between_measures(geometry, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_locate_between_m' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION locate_along_measure(geometry, float8) RETURNS geometry AS $$ SELECT locate_between_measures($1, $2, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_locate_along_measure(geometry, float8) RETURNS geometry AS $$ SELECT locate_between_measures($1, $2, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_AddMeasure(geometry, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'ST_AddMeasure' LANGUAGE 'C' IMMUTABLE STRICT; --------------------------------------------------------------- -- GEOS --------------------------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION intersection(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5','intersection' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: intersection(geometry,geometry) CREATE OR REPLACE FUNCTION ST_Intersection(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5','intersection' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION buffer(geometry,float8) RETURNS geometry AS '$libdir/postgis-1.5','buffer' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- PostGIS equivalent function: buffer(geometry,float8) CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8) RETURNS geometry AS '$libdir/postgis-1.5','buffer' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.5.0 - requires GEOS-3.2 or higher CREATE OR REPLACE FUNCTION _ST_Buffer(geometry,float8,cstring) RETURNS geometry AS '$libdir/postgis-1.5','buffer' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8,integer) RETURNS geometry AS $$ SELECT _ST_Buffer($1, $2, CAST('quad_segs='||CAST($3 AS text) as cstring)) $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_buffer(geometry,float8,text) RETURNS geometry AS $$ SELECT _ST_Buffer($1, $2, CAST( regexp_replace($3, '^[0123456789]+$', 'quad_segs='||$3) AS cstring) ) $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION buffer(geometry,float8,integer) RETURNS geometry AS 'SELECT ST_Buffer($1, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION convexhull(geometry) RETURNS geometry AS '$libdir/postgis-1.5','convexhull' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- PostGIS equivalent function: convexhull(geometry) CREATE OR REPLACE FUNCTION ST_ConvexHull(geometry) RETURNS geometry AS '$libdir/postgis-1.5','convexhull' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Only accepts LINESTRING as parameters. -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION _ST_LineCrossingDirection(geometry, geometry) RETURNS integer AS '$libdir/postgis-1.5', 'ST_LineCrossingDirection' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_LineCrossingDirection(geometry, geometry) RETURNS integer AS $$ SELECT CASE WHEN NOT $1 && $2 THEN 0 ELSE _ST_LineCrossingDirection($1,$2) END $$ LANGUAGE 'sql' IMMUTABLE; -- Only accepts LINESTRING as parameters. -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_LocateBetweenElevations(geometry, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'ST_LocateBetweenElevations' LANGUAGE 'C' IMMUTABLE STRICT; -- Requires GEOS >= 3.0.0 -- Availability: 1.3.3 CREATE OR REPLACE FUNCTION ST_SimplifyPreserveTopology(geometry, float8) RETURNS geometry AS '$libdir/postgis-1.5','topologypreservesimplify' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Requires GEOS >= 3.1.0 -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_IsValidReason(geometry) RETURNS text AS '$libdir/postgis-1.5', 'isvalidreason' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Requires GEOS >= 3.2.0 -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_HausdorffDistance(geometry, geometry) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'hausdorffdistance' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Requires GEOS >= 3.2.0 -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_HausdorffDistance(geometry, geometry, float8) RETURNS FLOAT8 AS '$libdir/postgis-1.5', 'hausdorffdistancedensify' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION difference(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5','difference' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: difference(geometry,geometry) CREATE OR REPLACE FUNCTION ST_Difference(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5','difference' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION boundary(geometry) RETURNS geometry AS '$libdir/postgis-1.5','boundary' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: boundary(geometry) CREATE OR REPLACE FUNCTION ST_Boundary(geometry) RETURNS geometry AS '$libdir/postgis-1.5','boundary' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION symdifference(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5','symdifference' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: symdifference(geometry,geometry) CREATE OR REPLACE FUNCTION ST_SymDifference(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5','symdifference' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION symmetricdifference(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5','symdifference' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_symmetricdifference(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5','symdifference' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomUnion(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5','geomunion' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: GeomUnion(geometry,geometry) CREATE OR REPLACE FUNCTION ST_Union(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5','geomunion' LANGUAGE 'C' IMMUTABLE STRICT; -------------------------------------------------------------------------------- -- Aggregates and their supporting functions -------------------------------------------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION collect(geometry, geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_collect' LANGUAGE 'C' IMMUTABLE; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_collect(geometry, geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_collect' LANGUAGE 'C' IMMUTABLE; -- Deprecation in 1.2.3 CREATE AGGREGATE memcollect( sfunc = ST_collect, basetype = geometry, stype = geometry ); -- Availability: 1.2.2 CREATE AGGREGATE ST_memcollect( sfunc = ST_collect, basetype = geometry, stype = geometry ); -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_collect (geometry[]) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_collect_garray' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE AGGREGATE MemGeomUnion ( basetype = geometry, sfunc = geomunion, stype = geometry ); -- Availability: 1.2.2 CREATE AGGREGATE ST_MemUnion ( basetype = geometry, sfunc = ST_Union, stype = geometry ); -- -- pgis_abs -- Container type to hold the ArrayBuildState pointer as it passes through -- the geometry array accumulation aggregate. -- CREATE OR REPLACE FUNCTION pgis_abs_in(cstring) RETURNS pgis_abs AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION pgis_abs_out(pgis_abs) RETURNS cstring AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; CREATE TYPE pgis_abs ( internallength = 8, input = pgis_abs_in, output = pgis_abs_out, alignment = double ); -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_accum_transfn(pgis_abs, geometry) RETURNS pgis_abs AS '$libdir/postgis-1.5' LANGUAGE 'C'; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_accum_finalfn(pgis_abs) RETURNS geometry[] AS '$libdir/postgis-1.5' LANGUAGE 'C'; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_union_finalfn(pgis_abs) RETURNS geometry AS '$libdir/postgis-1.5' LANGUAGE 'C'; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_collect_finalfn(pgis_abs) RETURNS geometry AS '$libdir/postgis-1.5' LANGUAGE 'C'; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_polygonize_finalfn(pgis_abs) RETURNS geometry AS '$libdir/postgis-1.5' LANGUAGE 'C'; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION pgis_geometry_makeline_finalfn(pgis_abs) RETURNS geometry AS '$libdir/postgis-1.5' LANGUAGE 'C'; -- Deprecation in: 1.2.3 CREATE AGGREGATE accum ( sfunc = pgis_geometry_accum_transfn, basetype = geometry, stype = pgis_abs, finalfunc = pgis_geometry_accum_finalfn ); -- Availability: 1.2.2 CREATE AGGREGATE ST_Accum ( sfunc = pgis_geometry_accum_transfn, basetype = geometry, stype = pgis_abs, finalfunc = pgis_geometry_accum_finalfn ); -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION unite_garray (geometry[]) RETURNS geometry AS '$libdir/postgis-1.5', 'pgis_union_geometry_array' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.4.0 CREATE OR REPLACE FUNCTION ST_unite_garray (geometry[]) RETURNS geometry AS '$libdir/postgis-1.5','pgis_union_geometry_array' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_Union (geometry[]) RETURNS geometry AS '$libdir/postgis-1.5','pgis_union_geometry_array' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE AGGREGATE ST_Union ( basetype = geometry, sfunc = pgis_geometry_accum_transfn, stype = pgis_abs, finalfunc = pgis_geometry_union_finalfn ); -- Deprecation in 1.2.3 CREATE AGGREGATE collect ( basetype = geometry, sfunc = pgis_geometry_accum_transfn, stype = pgis_abs, finalfunc = pgis_geometry_collect_finalfn ); -- Availability: 1.2.2 CREATE AGGREGATE ST_Collect ( BASETYPE = geometry, SFUNC = pgis_geometry_accum_transfn, STYPE = pgis_abs, FINALFUNC = pgis_geometry_collect_finalfn ); -- Deprecation in 1.2.3 CREATE AGGREGATE Polygonize ( BASETYPE = geometry, SFUNC = pgis_geometry_accum_transfn, STYPE = pgis_abs, FINALFUNC = pgis_geometry_polygonize_finalfn ); -- Availability: 1.2.2 CREATE AGGREGATE ST_Polygonize ( BASETYPE = geometry, SFUNC = pgis_geometry_accum_transfn, STYPE = pgis_abs, FINALFUNC = pgis_geometry_polygonize_finalfn ); -- Deprecation in 1.2.3 CREATE AGGREGATE makeline ( BASETYPE = geometry, SFUNC = pgis_geometry_accum_transfn, STYPE = pgis_abs, FINALFUNC = pgis_geometry_makeline_finalfn ); -- Availability: 1.2.2 CREATE AGGREGATE ST_MakeLine ( BASETYPE = geometry, SFUNC = pgis_geometry_accum_transfn, STYPE = pgis_abs, FINALFUNC = pgis_geometry_makeline_finalfn ); -------------------------------------------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION relate(geometry,geometry) RETURNS text AS '$libdir/postgis-1.5','relate_full' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_relate(geometry,geometry) RETURNS text AS '$libdir/postgis-1.5','relate_full' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION relate(geometry,geometry,text) RETURNS boolean AS '$libdir/postgis-1.5','relate_pattern' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: relate(geometry,geometry,text) CREATE OR REPLACE FUNCTION ST_Relate(geometry,geometry,text) RETURNS boolean AS '$libdir/postgis-1.5','relate_pattern' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION disjoint(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: disjoint(geometry,geometry) CREATE OR REPLACE FUNCTION ST_Disjoint(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5','disjoint' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION touches(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: touches(geometry,geometry) CREATE OR REPLACE FUNCTION _ST_Touches(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5','touches' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Touches(geometry,geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Touches($1,$2)' LANGUAGE 'SQL' IMMUTABLE; -- Availability: 1.3.4 CREATE OR REPLACE FUNCTION _ST_DWithin(geometry,geometry,float8) RETURNS boolean AS '$libdir/postgis-1.5', 'LWGEOM_dwithin' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_DWithin(geometry, geometry, float8) RETURNS boolean AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3)' LANGUAGE 'SQL' IMMUTABLE; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION intersects(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: intersects(geometry,geometry) CREATE OR REPLACE FUNCTION _ST_Intersects(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5','intersects' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Intersects(geometry,geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Intersects($1,$2)' LANGUAGE 'SQL' IMMUTABLE; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION crosses(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: crosses(geometry,geometry) CREATE OR REPLACE FUNCTION _ST_Crosses(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5','crosses' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Crosses(geometry,geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Crosses($1,$2)' LANGUAGE 'SQL' IMMUTABLE; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION within(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: within(geometry,geometry) CREATE OR REPLACE FUNCTION _ST_Within(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5','within' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Within(geometry,geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Within($1,$2)' LANGUAGE 'SQL' IMMUTABLE; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Contains(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: contains(geometry,geometry) CREATE OR REPLACE FUNCTION _ST_Contains(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5','contains' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Contains(geometry,geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Contains($1,$2)' LANGUAGE 'SQL' IMMUTABLE; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION _ST_CoveredBy(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'coveredby' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_CoveredBy(geometry,geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_CoveredBy($1,$2)' LANGUAGE 'SQL' IMMUTABLE; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION _ST_Covers(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'covers' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Covers(geometry,geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Covers($1,$2)' LANGUAGE 'SQL' IMMUTABLE; -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION _ST_ContainsProperly(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5','containsproperly' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.4.0 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_ContainsProperly(geometry,geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_ContainsProperly($1,$2)' LANGUAGE 'SQL' IMMUTABLE; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION overlaps(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: overlaps(geometry,geometry) CREATE OR REPLACE FUNCTION _ST_Overlaps(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5','overlaps' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.2 -- Inlines index magic CREATE OR REPLACE FUNCTION ST_Overlaps(geometry,geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Overlaps($1,$2)' LANGUAGE 'SQL' IMMUTABLE; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION IsValid(geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'isvalid' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- PostGIS equivalent function: IsValid(geometry) -- TODO: change null returns to true CREATE OR REPLACE FUNCTION ST_IsValid(geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'isvalid' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- This is also available w/out GEOS CREATE OR REPLACE FUNCTION Centroid(geometry) RETURNS geometry AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: Centroid(geometry) CREATE OR REPLACE FUNCTION ST_Centroid(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'centroid' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION IsRing(geometry) RETURNS boolean AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: IsRing(geometry) CREATE OR REPLACE FUNCTION ST_IsRing(geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'isring' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointOnSurface(geometry) RETURNS geometry AS '$libdir/postgis-1.5' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: PointOnSurface(geometry) CREATE OR REPLACE FUNCTION ST_PointOnSurface(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'pointonsurface' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION IsSimple(geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'issimple' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: IsSimple(geometry) CREATE OR REPLACE FUNCTION ST_IsSimple(geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'issimple' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Equals(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5','geomequals' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_Equals(geometry,geometry) RETURNS boolean AS '$libdir/postgis-1.5','geomequals' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.2.1 CREATE OR REPLACE FUNCTION ST_Equals(geometry,geometry) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Equals($1,$2)' LANGUAGE 'SQL' IMMUTABLE; ----------------------------------------------------------------------- -- GML & KML INPUT -- Availability: 1.5.0 ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_GeomFromGML(text) RETURNS geometry AS '$libdir/postgis-1.5','geom_from_gml' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_GMLToSQL(text) RETURNS geometry AS '$libdir/postgis-1.5','geom_from_gml' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_GeomFromKML(text) RETURNS geometry AS '$libdir/postgis-1.5','geom_from_kml' LANGUAGE 'C' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- SVG OUTPUT ----------------------------------------------------------------------- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsSVG(geometry,int4,int4) RETURNS TEXT AS '$libdir/postgis-1.5','assvg_geometry' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsSVG(geometry,int4,int4) RETURNS TEXT AS '$libdir/postgis-1.5','assvg_geometry' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsSVG(geometry,int4) RETURNS TEXT AS '$libdir/postgis-1.5','assvg_geometry' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsSVG(geometry,int4) RETURNS TEXT AS '$libdir/postgis-1.5','assvg_geometry' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsSVG(geometry) RETURNS TEXT AS '$libdir/postgis-1.5','assvg_geometry' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsSVG(geometry) RETURNS TEXT AS '$libdir/postgis-1.5','assvg_geometry' LANGUAGE 'C' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- GML OUTPUT ----------------------------------------------------------------------- -- _ST_AsGML(version, geom, precision, option) CREATE OR REPLACE FUNCTION _ST_AsGML(int4, geometry, int4, int4) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asGML' LANGUAGE 'C' IMMUTABLE STRICT; -- AsGML(geom, precision) / version=2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsGML(geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsGML(2, $1, $2, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsGML(geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsGML(2, $1, $2, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- AsGML(geom) / precision=15 version=2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsGML(geometry) RETURNS TEXT AS 'SELECT _ST_AsGML(2, $1, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsGML(geometry) RETURNS TEXT AS 'SELECT _ST_AsGML(2, $1, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML(version, geom) / precision=15 version=2 -- Availability: 1.3.2 CREATE OR REPLACE FUNCTION ST_AsGML(int4, geometry) RETURNS TEXT AS 'SELECT _ST_AsGML($1, $2, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML(version, geom, precision) -- Availability: 1.3.2 CREATE OR REPLACE FUNCTION ST_AsGML(int4, geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsGML($1, $2, $3, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML (geom, precision, option) / version=2 -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_AsGML(geometry, int4, int4) RETURNS TEXT AS 'SELECT _ST_AsGML(2, $1, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML(version, geom, precision, option) -- Availability: 1.4.0 CREATE OR REPLACE FUNCTION ST_AsGML(int4, geometry, int4, int4) RETURNS TEXT AS 'SELECT _ST_AsGML($1, $2, $3, $4)' LANGUAGE 'SQL' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- KML OUTPUT ----------------------------------------------------------------------- -- _ST_AsKML(version, geom, precision) CREATE OR REPLACE FUNCTION _ST_AsKML(int4, geometry, int4) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asKML' LANGUAGE 'C' IMMUTABLE STRICT; -- AsKML(geom, precision) / version=2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsKML(geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsKML(2, transform($1,4326), $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsKML(geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsKML(2, ST_Transform($1,4326), $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- AsKML(geom) / precision=15 version=2 -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsKML(geometry) RETURNS TEXT AS 'SELECT _ST_AsKML(2, transform($1,4326), 15)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- AsKML(version, geom, precision) -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsKML(int4, geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsKML($1, transform($2,4326), $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsKML(geometry) RETURNS TEXT AS 'SELECT _ST_AsKML(2, ST_Transform($1,4326), 15)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsKML(version, geom) / precision=15 version=2 -- Availability: 1.3.2 CREATE OR REPLACE FUNCTION ST_AsKML(int4, geometry) RETURNS TEXT AS 'SELECT _ST_AsKML($1, ST_Transform($2,4326), 15)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsKML(version, geom, precision) -- Availability: 1.3.2 CREATE OR REPLACE FUNCTION ST_AsKML(int4, geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsKML($1, ST_Transform($2,4326), $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; ----------------------------------------------------------------------- -- GEOJSON OUTPUT -- Availability: 1.3.4 ----------------------------------------------------------------------- -- _ST_AsGeoJson(version, geom, precision, options) CREATE OR REPLACE FUNCTION _ST_AsGeoJson(int4, geometry, int4, int4) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asGeoJson' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_AsGeoJson(geom, precision) / version=1 options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsGeoJson(1, $1, $2, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(geom) / precision=15 version=1 options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(geometry) RETURNS TEXT AS 'SELECT _ST_AsGeoJson(1, $1, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(version, geom) / precision=15 options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(int4, geometry) RETURNS TEXT AS 'SELECT _ST_AsGeoJson($1, $2, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(version, geom, precision) / options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(int4, geometry, int4) RETURNS TEXT AS 'SELECT _ST_AsGeoJson($1, $2, $3, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(geom, precision, options) / version=1 CREATE OR REPLACE FUNCTION ST_AsGeoJson(geometry, int4, int4) RETURNS TEXT AS 'SELECT _ST_AsGeoJson(1, $1, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(version, geom, precision,options) CREATE OR REPLACE FUNCTION ST_AsGeoJson(int4, geometry, int4, int4) RETURNS TEXT AS 'SELECT _ST_AsGeoJson($1, $2, $3, $4)' LANGUAGE 'SQL' IMMUTABLE STRICT; ------------------------------------------------------------------------ -- GeoHash (geohash.org) ------------------------------------------------------------------------ -- Availability 1.4.0 CREATE OR REPLACE FUNCTION ST_GeoHash(geometry, int4) RETURNS TEXT AS '$libdir/postgis-1.5', 'ST_GeoHash' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability 1.4.0 CREATE OR REPLACE FUNCTION ST_GeoHash(geometry) RETURNS TEXT AS 'SELECT ST_GeoHash($1, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; ------------------------------------------------------------------------ -- OGC defined ------------------------------------------------------------------------ -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION NumPoints(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_numpoints_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: NumPoints(geometry) CREATE OR REPLACE FUNCTION ST_NumPoints(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_numpoints_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION NumGeometries(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_numgeometries_collection' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: NumGeometries(geometry) CREATE OR REPLACE FUNCTION ST_NumGeometries(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_numgeometries_collection' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeometryN(geometry,integer) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_geometryn_collection' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: GeometryN(geometry) CREATE OR REPLACE FUNCTION ST_GeometryN(geometry,integer) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_geometryn_collection' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Dimension(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_dimension' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: Dimension(geometry) CREATE OR REPLACE FUNCTION ST_Dimension(geometry) RETURNS int4 AS '$libdir/postgis-1.5', 'LWGEOM_dimension' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION ExteriorRing(geometry) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_exteriorring_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: ExteriorRing(geometry) CREATE OR REPLACE FUNCTION ST_ExteriorRing(geometry) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_exteriorring_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION NumInteriorRings(geometry) RETURNS integer AS '$libdir/postgis-1.5','LWGEOM_numinteriorrings_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: NumInteriorRings(geometry) CREATE OR REPLACE FUNCTION ST_NumInteriorRings(geometry) RETURNS integer AS '$libdir/postgis-1.5','LWGEOM_numinteriorrings_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION NumInteriorRing(geometry) RETURNS integer AS '$libdir/postgis-1.5','LWGEOM_numinteriorrings_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_NumInteriorRing(geometry) RETURNS integer AS '$libdir/postgis-1.5','LWGEOM_numinteriorrings_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION InteriorRingN(geometry,integer) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_interiorringn_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: InteriorRingN(geometry) CREATE OR REPLACE FUNCTION ST_InteriorRingN(geometry,integer) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_interiorringn_polygon' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeometryType(geometry) RETURNS text AS '$libdir/postgis-1.5', 'LWGEOM_getTYPE' LANGUAGE 'C' IMMUTABLE STRICT; -- Not quite equivalent to GeometryType CREATE OR REPLACE FUNCTION ST_GeometryType(geometry) RETURNS text AS '$libdir/postgis-1.5', 'geometry_geometrytype' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointN(geometry,integer) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_pointn_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: PointN(geometry,integer) CREATE OR REPLACE FUNCTION ST_PointN(geometry,integer) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_pointn_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION X(geometry) RETURNS float8 AS '$libdir/postgis-1.5','LWGEOM_x_point' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: X(geometry) CREATE OR REPLACE FUNCTION ST_X(geometry) RETURNS float8 AS '$libdir/postgis-1.5','LWGEOM_x_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Y(geometry) RETURNS float8 AS '$libdir/postgis-1.5','LWGEOM_y_point' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: Y(geometry) CREATE OR REPLACE FUNCTION ST_Y(geometry) RETURNS float8 AS '$libdir/postgis-1.5','LWGEOM_y_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION Z(geometry) RETURNS float8 AS '$libdir/postgis-1.5','LWGEOM_z_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_Z(geometry) RETURNS float8 AS '$libdir/postgis-1.5','LWGEOM_z_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION M(geometry) RETURNS float8 AS '$libdir/postgis-1.5','LWGEOM_m_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_M(geometry) RETURNS float8 AS '$libdir/postgis-1.5','LWGEOM_m_point' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION StartPoint(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_startpoint_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: StartPoint(geometry)) CREATE OR REPLACE FUNCTION ST_StartPoint(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_startpoint_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION EndPoint(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_endpoint_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: EndPoint(geometry)) CREATE OR REPLACE FUNCTION ST_EndPoint(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_endpoint_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION IsClosed(geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'LWGEOM_isclosed_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: IsClosed(geometry) CREATE OR REPLACE FUNCTION ST_IsClosed(geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'LWGEOM_isclosed_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION IsEmpty(geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'LWGEOM_isempty' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: IsEmpty(geometry) CREATE OR REPLACE FUNCTION ST_IsEmpty(geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'LWGEOM_isempty' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SRID(geometry) RETURNS int4 AS '$libdir/postgis-1.5','LWGEOM_getSRID' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: getSRID(geometry) CREATE OR REPLACE FUNCTION ST_SRID(geometry) RETURNS int4 AS '$libdir/postgis-1.5','LWGEOM_getSRID' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION SetSRID(geometry,int4) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_setSRID' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_SetSRID(geometry,int4) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_setSRID' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsBinary(geometry) RETURNS bytea AS '$libdir/postgis-1.5','LWGEOM_asBinary' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: AsBinary(geometry) CREATE OR REPLACE FUNCTION ST_AsBinary(geometry) RETURNS bytea AS '$libdir/postgis-1.5','LWGEOM_asBinary' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsBinary(geometry,text) RETURNS bytea AS '$libdir/postgis-1.5','LWGEOM_asBinary' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_AsBinary(geometry,text) RETURNS bytea AS '$libdir/postgis-1.5','LWGEOM_asBinary' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION AsText(geometry) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asText' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: AsText(geometry) CREATE OR REPLACE FUNCTION ST_AsText(geometry) RETURNS TEXT AS '$libdir/postgis-1.5','LWGEOM_asText' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeometryFromText(text) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_text' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeometryFromText(text) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_text' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeometryFromText(text, int4) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_text' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeometryFromText(text, int4) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_text' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromText(text) RETURNS geometry AS 'SELECT geometryfromtext($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomFromText(text) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_text' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromText(text, int4) RETURNS geometry AS 'SELECT geometryfromtext($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: ST_GeometryFromText(text, int4) CREATE OR REPLACE FUNCTION ST_GeomFromText(text, int4) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_text' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POINT'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PointFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''POINT'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POINT'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: PointFromText(text, int4) -- TODO: improve this ... by not duplicating constructor time. CREATE OR REPLACE FUNCTION ST_PointFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''POINT'' THEN ST_GeomFromText($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''LINESTRING'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LineFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''LINESTRING'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: LineFromText(text, int4) CREATE OR REPLACE FUNCTION ST_LineFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineStringFromText(text) RETURNS geometry AS 'SELECT LineFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineStringFromText(text, int4) RETURNS geometry AS 'SELECT LineFromText($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolyFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POLYGON'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolyFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''POLYGON'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolyFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POLYGON'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: ST_PolygonFromText(text, int4) CREATE OR REPLACE FUNCTION ST_PolyFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''POLYGON'' THEN ST_GeomFromText($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolygonFromText(text, int4) RETURNS geometry AS 'SELECT PolyFromText($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolygonFromText(text, int4) RETURNS geometry AS 'SELECT PolyFromText($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolygonFromText(text) RETURNS geometry AS 'SELECT PolyFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolygonFromText(text) RETURNS geometry AS 'SELECT ST_PolyFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MLineFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: MLineFromText(text, int4) CREATE OR REPLACE FUNCTION ST_MLineFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MLineFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTILINESTRING'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MLineFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTILINESTRING'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiLineStringFromText(text) RETURNS geometry AS 'SELECT ST_MLineFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiLineStringFromText(text) RETURNS geometry AS 'SELECT ST_MLineFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiLineStringFromText(text, int4) RETURNS geometry AS 'SELECT MLineFromText($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiLineStringFromText(text, int4) RETURNS geometry AS 'SELECT MLineFromText($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPointFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1,$2)) = ''MULTIPOINT'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: MPointFromText(text, int4) CREATE OR REPLACE FUNCTION ST_MPointFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOINT'' THEN GeomFromText($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPointFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOINT'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MPointFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTIPOINT'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPointFromText(text, int4) RETURNS geometry AS 'SELECT MPointFromText($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPointFromText(text) RETURNS geometry AS 'SELECT MPointFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPointFromText(text) RETURNS geometry AS 'SELECT ST_MPointFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPointFromText(text) RETURNS geometry AS 'SELECT MPointFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPointFromText(text) RETURNS geometry AS 'SELECT MPointFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPolyFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOLYGON'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: MPolyFromText(text, int4) CREATE OR REPLACE FUNCTION ST_MPolyFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''MULTIPOLYGON'' THEN ST_GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPolyFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOLYGON'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; --Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MPolyFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTIPOLYGON'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPolygonFromText(text, int4) RETURNS geometry AS 'SELECT MPolyFromText($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPolygonFromText(text, int4) RETURNS geometry AS 'SELECT MPolyFromText($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPolygonFromText(text) RETURNS geometry AS 'SELECT MPolyFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPolygonFromText(text) RETURNS geometry AS 'SELECT MPolyFromText($1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomCollFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION'' THEN GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomCollFromText(text, int4) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION'' THEN ST_GeomFromText($1,$2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomCollFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''GEOMETRYCOLLECTION'' THEN GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomCollFromText(text) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''GEOMETRYCOLLECTION'' THEN ST_GeomFromText($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromWKB(bytea) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_WKB' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomFromWKB(bytea) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_WKB' LANGUAGE 'C' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomFromWKB(bytea, int) RETURNS geometry AS 'SELECT setSRID(GeomFromWKB($1), $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: GeomFromWKB(bytea, int) CREATE OR REPLACE FUNCTION ST_GeomFromWKB(bytea, int) RETURNS geometry AS 'SELECT ST_SetSRID(ST_GeomFromWKB($1), $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POINT'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: PointFromWKB(bytea, int) CREATE OR REPLACE FUNCTION ST_PointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''POINT'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POINT'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''POINT'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: LineFromWKB(bytea, int) CREATE OR REPLACE FUNCTION ST_LineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''LINESTRING'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''LINESTRING'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LinestringFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LinestringFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''LINESTRING'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION LinestringFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_LinestringFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POLYGON'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: PolyFromWKB(text, int) CREATE OR REPLACE FUNCTION ST_PolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''POLYGON'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''POLYGON'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolygonFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''POLYGON'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolygonFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1,$2)) = ''POLYGON'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION PolygonFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_PolygonFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: MPointFromWKB(text, int) CREATE OR REPLACE FUNCTION ST_MPointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOINT'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MPointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOINT'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPointFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1,$2)) = ''MULTIPOINT'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPointFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOINT'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiLineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION MultiLineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiLineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiLineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTILINESTRING'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MLineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: MLineFromWKB(text, int) CREATE OR REPLACE FUNCTION ST_MLineFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTILINESTRING'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MLineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MLineFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTILINESTRING'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- PostGIS equivalent function: MPolyFromWKB(bytea, int) CREATE OR REPLACE FUNCTION ST_MPolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTIPOLYGON'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MPolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MPolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOLYGON'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPolyFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTIPOLYGON'' THEN ST_GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION MultiPolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_MultiPolyFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOLYGON'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomCollFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomCollFromWKB(bytea, int) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION'' THEN GeomFromWKB($1, $2) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION GeomCollFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''GEOMETRYCOLLECTION'' THEN GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_GeomCollFromWKB(bytea) RETURNS geometry AS ' SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''GEOMETRYCOLLECTION'' THEN ST_GeomFromWKB($1) ELSE NULL END ' LANGUAGE 'SQL' IMMUTABLE STRICT; --New functions -- Maximum distance between linestrings. CREATE OR REPLACE FUNCTION max_distance(geometry,geometry) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_maxdistance2d_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_MaxDistance(geometry,geometry) RETURNS float8 AS '$libdir/postgis-1.5', 'LWGEOM_maxdistance2d_linestring' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_MaxDistance(geometry,geometry) RETURNS float8 AS 'SELECT _ST_MaxDistance(ST_ConvexHull($1), ST_ConvexHull($2))' LANGUAGE 'SQL' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_ClosestPoint(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_closestpoint' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_ShortestLine(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_shortestline2d' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION _ST_LongestLine(geometry,geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_longestline2d' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_LongestLine(geometry,geometry) RETURNS geometry AS 'SELECT _ST_LongestLine(ST_ConvexHull($1), ST_ConvexHull($2))' LANGUAGE 'SQL' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION _ST_DFullyWithin(geometry,geometry,float8) RETURNS boolean AS '$libdir/postgis-1.5', 'LWGEOM_dfullywithin' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_DFullyWithin(geometry, geometry, float8) RETURNS boolean AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_DFullyWithin(ST_ConvexHull($1), ST_ConvexHull($2), $3)' LANGUAGE 'SQL' IMMUTABLE; -- -- SFSQL 1.1 -- -- BdPolyFromText(multiLineStringTaggedText String, SRID Integer): Polygon -- -- Construct a Polygon given an arbitrary -- collection of closed linestrings as a -- MultiLineString text representation. -- -- This is a PLPGSQL function rather then an SQL function -- To avoid double call of BuildArea (one to get GeometryType -- and another to actual return, in a CASE WHEN construct). -- Also, we profit from plpgsql to RAISE exceptions. -- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION BdPolyFromText(text, integer) RETURNS geometry AS $$ DECLARE geomtext alias for $1; srid alias for $2; mline geometry; geom geometry; BEGIN mline := MultiLineStringFromText(geomtext, srid); IF mline IS NULL THEN RAISE EXCEPTION 'Input is not a MultiLinestring'; END IF; geom := BuildArea(mline); IF GeometryType(geom) != 'POLYGON' THEN RAISE EXCEPTION 'Input returns more then a single polygon, try using BdMPolyFromText instead'; END IF; RETURN geom; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_BdPolyFromText(text, integer) RETURNS geometry AS $$ DECLARE geomtext alias for $1; srid alias for $2; mline geometry; geom geometry; BEGIN mline := ST_MultiLineStringFromText(geomtext, srid); IF mline IS NULL THEN RAISE EXCEPTION 'Input is not a MultiLinestring'; END IF; geom := ST_BuildArea(mline); IF GeometryType(geom) != 'POLYGON' THEN RAISE EXCEPTION 'Input returns more then a single polygon, try using BdMPolyFromText instead'; END IF; RETURN geom; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- -- SFSQL 1.1 -- -- BdMPolyFromText(multiLineStringTaggedText String, SRID Integer): MultiPolygon -- -- Construct a MultiPolygon given an arbitrary -- collection of closed linestrings as a -- MultiLineString text representation. -- -- This is a PLPGSQL function rather then an SQL function -- To raise an exception in case of invalid input. -- -- Deprecation in 1.2.3 CREATE OR REPLACE FUNCTION BdMPolyFromText(text, integer) RETURNS geometry AS $$ DECLARE geomtext alias for $1; srid alias for $2; mline geometry; geom geometry; BEGIN mline := MultiLineStringFromText(geomtext, srid); IF mline IS NULL THEN RAISE EXCEPTION 'Input is not a MultiLinestring'; END IF; geom := multi(BuildArea(mline)); RETURN geom; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- Availability: 1.2.2 CREATE OR REPLACE FUNCTION ST_BdMPolyFromText(text, integer) RETURNS geometry AS $$ DECLARE geomtext alias for $1; srid alias for $2; mline geometry; geom geometry; BEGIN mline := ST_MultiLineStringFromText(geomtext, srid); IF mline IS NULL THEN RAISE EXCEPTION 'Input is not a MultiLinestring'; END IF; geom := multi(ST_BuildArea(mline)); RETURN geom; END; $$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: long_xact.sql.in.c 4894 2009-11-25 19:15:57Z pramsey $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- Copyright 2001-2003 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------------------------------------------- -- LONG TERM LOCKING ----------------------------------------------------------------------- -- UnlockRows(authid) -- removes all locks held by the given auth -- returns the number of locks released CREATE OR REPLACE FUNCTION UnlockRows(text) RETURNS int AS $$ DECLARE ret int; BEGIN IF NOT LongTransactionsEnabled() THEN RAISE EXCEPTION 'Long transaction support disabled, use EnableLongTransaction() to enable.'; END IF; EXECUTE 'DELETE FROM authorization_table where authid = ' || quote_literal($1); GET DIAGNOSTICS ret = ROW_COUNT; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; -- LockRow([schema], table, rowid, auth, [expires]) -- Returns 1 if successfully obtained the lock, 0 otherwise CREATE OR REPLACE FUNCTION LockRow(text, text, text, text, timestamp) RETURNS int AS $$ DECLARE myschema alias for $1; mytable alias for $2; myrid alias for $3; authid alias for $4; expires alias for $5; ret int; mytoid oid; myrec RECORD; BEGIN IF NOT LongTransactionsEnabled() THEN RAISE EXCEPTION 'Long transaction support disabled, use EnableLongTransaction() to enable.'; END IF; EXECUTE 'DELETE FROM authorization_table WHERE expires < now()'; SELECT c.oid INTO mytoid FROM pg_class c, pg_namespace n WHERE c.relname = mytable AND c.relnamespace = n.oid AND n.nspname = myschema; -- RAISE NOTICE 'toid: %', mytoid; FOR myrec IN SELECT * FROM authorization_table WHERE toid = mytoid AND rid = myrid LOOP IF myrec.authid != authid THEN RETURN 0; ELSE RETURN 1; END IF; END LOOP; EXECUTE 'INSERT INTO authorization_table VALUES ('|| quote_literal(mytoid::text)||','||quote_literal(myrid)|| ','||quote_literal(expires::text)|| ','||quote_literal(authid) ||')'; GET DIAGNOSTICS ret = ROW_COUNT; RETURN ret; END; $$ LANGUAGE 'plpgsql' VOLATILE STRICT; -- LockRow(schema, table, rid, authid); CREATE OR REPLACE FUNCTION LockRow(text, text, text, text) RETURNS int AS $$ SELECT LockRow($1, $2, $3, $4, now()::timestamp+'1:00'); $$ LANGUAGE 'sql' VOLATILE STRICT; -- LockRow(table, rid, authid); CREATE OR REPLACE FUNCTION LockRow(text, text, text) RETURNS int AS $$ SELECT LockRow(current_schema(), $1, $2, $3, now()::timestamp+'1:00'); $$ LANGUAGE 'sql' VOLATILE STRICT; -- LockRow(schema, table, rid, expires); CREATE OR REPLACE FUNCTION LockRow(text, text, text, timestamp) RETURNS int AS $$ SELECT LockRow(current_schema(), $1, $2, $3, $4); $$ LANGUAGE 'sql' VOLATILE STRICT; CREATE OR REPLACE FUNCTION AddAuth(text) RETURNS BOOLEAN AS $$ DECLARE lockid alias for $1; okay boolean; myrec record; BEGIN -- check to see if table exists -- if not, CREATE TEMP TABLE mylock (transid xid, lockcode text) okay := 'f'; FOR myrec IN SELECT * FROM pg_class WHERE relname = 'temp_lock_have_table' LOOP okay := 't'; END LOOP; IF (okay <> 't') THEN CREATE TEMP TABLE temp_lock_have_table (transid xid, lockcode text); -- this will only work from pgsql7.4 up -- ON COMMIT DELETE ROWS; END IF; -- INSERT INTO mylock VALUES ( $1) -- EXECUTE 'INSERT INTO temp_lock_have_table VALUES ( '|| -- quote_literal(getTransactionID()) || ',' || -- quote_literal(lockid) ||')'; INSERT INTO temp_lock_have_table VALUES (getTransactionID(), lockid); RETURN true::boolean; END; $$ LANGUAGE PLPGSQL; -- CheckAuth( <schema>, <table>, <ridcolumn> ) -- -- Returns 0 -- CREATE OR REPLACE FUNCTION CheckAuth(text, text, text) RETURNS INT AS $$ DECLARE schema text; BEGIN IF NOT LongTransactionsEnabled() THEN RAISE EXCEPTION 'Long transaction support disabled, use EnableLongTransaction() to enable.'; END IF; if ( $1 != '' ) THEN schema = $1; ELSE SELECT current_schema() into schema; END IF; -- TODO: check for an already existing trigger ? EXECUTE 'CREATE TRIGGER check_auth BEFORE UPDATE OR DELETE ON ' || quote_ident(schema) || '.' || quote_ident($2) ||' FOR EACH ROW EXECUTE PROCEDURE CheckAuthTrigger(' || quote_literal($3) || ')'; RETURN 0; END; $$ LANGUAGE 'plpgsql'; -- CheckAuth(<table>, <ridcolumn>) CREATE OR REPLACE FUNCTION CheckAuth(text, text) RETURNS INT AS $$ SELECT CheckAuth('', $1, $2) $$ LANGUAGE 'SQL'; CREATE OR REPLACE FUNCTION CheckAuthTrigger() RETURNS trigger AS '$libdir/postgis-1.5', 'check_authorization' LANGUAGE C; CREATE OR REPLACE FUNCTION GetTransactionID() RETURNS xid AS '$libdir/postgis-1.5', 'getTransactionID' LANGUAGE C; -- -- Enable Long transactions support -- -- Creates the authorization_table if not already existing -- CREATE OR REPLACE FUNCTION EnableLongTransactions() RETURNS TEXT AS $$ DECLARE "query" text; exists bool; rec RECORD; BEGIN exists = 'f'; FOR rec IN SELECT * FROM pg_class WHERE relname = 'authorization_table' LOOP exists = 't'; END LOOP; IF NOT exists THEN "query" = 'CREATE TABLE authorization_table ( toid oid, -- table oid rid text, -- row id expires timestamp, authid text )'; EXECUTE "query"; END IF; exists = 'f'; FOR rec IN SELECT * FROM pg_class WHERE relname = 'authorized_tables' LOOP exists = 't'; END LOOP; IF NOT exists THEN "query" = 'CREATE VIEW authorized_tables AS ' || 'SELECT ' || 'n.nspname as schema, ' || 'c.relname as table, trim(' || quote_literal(chr(92) || '000') || ' from t.tgargs) as id_column ' || 'FROM pg_trigger t, pg_class c, pg_proc p ' || ', pg_namespace n ' || 'WHERE p.proname = ' || quote_literal('checkauthtrigger') || ' AND c.relnamespace = n.oid' || ' AND t.tgfoid = p.oid and t.tgrelid = c.oid'; EXECUTE "query"; END IF; RETURN 'Long transactions support enabled'; END; $$ LANGUAGE 'plpgsql'; -- -- Check if Long transactions support is enabled -- CREATE OR REPLACE FUNCTION LongTransactionsEnabled() RETURNS bool AS $$ DECLARE rec RECORD; BEGIN FOR rec IN SELECT oid FROM pg_class WHERE relname = 'authorized_tables' LOOP return 't'; END LOOP; return 'f'; END; $$ LANGUAGE 'plpgsql'; -- -- Disable Long transactions support -- -- (1) Drop any long_xact trigger -- (2) Drop the authorization_table -- (3) KEEP the authorized_tables view -- CREATE OR REPLACE FUNCTION DisableLongTransactions() RETURNS TEXT AS $$ DECLARE rec RECORD; BEGIN -- -- Drop all triggers applied by CheckAuth() -- FOR rec IN SELECT c.relname, t.tgname, t.tgargs FROM pg_trigger t, pg_class c, pg_proc p WHERE p.proname = 'checkauthtrigger' and t.tgfoid = p.oid and t.tgrelid = c.oid LOOP EXECUTE 'DROP TRIGGER ' || quote_ident(rec.tgname) || ' ON ' || quote_ident(rec.relname); END LOOP; -- -- Drop the authorization_table table -- FOR rec IN SELECT * FROM pg_class WHERE relname = 'authorization_table' LOOP DROP TABLE authorization_table; END LOOP; -- -- Drop the authorized_tables view -- FOR rec IN SELECT * FROM pg_class WHERE relname = 'authorized_tables' LOOP DROP VIEW authorized_tables; END LOOP; RETURN 'Long transactions support disabled'; END; $$ LANGUAGE 'plpgsql'; --------------------------------------------------------------- -- END --------------------------------------------------------------- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: sqlmm.sql.in.c 4894 2009-11-25 19:15:57Z pramsey $ -- -- PostGIS - Spatial Types for PostgreSQL -- http://postgis.refractions.net -- Copyright 2001-2003 Refractions Research Inc. -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- This file defines a subset of SQL/MM functions (that is, only those -- currently defined by ESRI's ArcSDE). Since these functions already exist -- in PostGIS (for the most part), these functions simply expose the current -- functions. Although mostly complying with SQL/MM standards, these prototypes -- follow ESRI's ArcSDE SQL Specifications and not SQL/MM standards where -- disparities exist. -- -- Specification Disparity Notes: -- * ST_OrderingEquals(geometry, geometry) is implemented as per -- ESRI's ArcSDE SQL specifications, not SQL/MM specifications. -- (http://edndoc.esri.com/arcsde/9.1/sql_api/sqlapi3.htm#ST_OrderingEquals) -- * Geometry constructors default to an SRID of -1, not 0 as per SQL/MM specs. -- * Boolean return type methods (ie. ST_IsValid, ST_IsEmpty, ...) -- * SQL/MM : RETURNS 1 if TRUE, 0 if (FALSE, NULL) -- * ESRI in Informix : RETURNS 1 if (TRUE, NULL), 0 if FALSE -- * ESRI in DB2 : RETURNS 1 if TRUE, 0 if FALSE, NULL if NULL -- * PostGIS : RETURNS 1 if TRUE, 0 if FALSE, NULL if NULL -- -- TODO: Implement ESRI's Shape constructors -- * SE_AsShape(geometry) -- * SE_ShapeToSQL -- * SE_GeomFromShape -- * SE_PointFromShape -- * SE_LineFromShape -- * SE_PolyFromShape -- * SE_MPointFromShape -- * SE_MLineFromShape -- * SE_MPolyFromShape -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for constructing an ST_Geometry -- value given its WTK representation -- (http://edndoc.esri.com/arcsde/9.1/general_topics/storing_geo_in_rdbms.html) ------------------------------------------------------------------------------- -- PostGIS equivalent function: ST_GeometryFromText(text) -- Note: Defaults to an SRID=-1, not 0 as per SQL/MM specs. CREATE OR REPLACE FUNCTION ST_WKTToSQL(text) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_text' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_GeomFromText(text, int4) - already defined -- ST_PointFromText(text, int4) - already defined -- ST_LineFromText(text, int4) - already defined -- ST_PolyFromText(text, int4) - already defined -- ST_MPointFromText(text, int4) - already defined -- ST_MLineFromText(text, int4) - already defined -- ST_MPolyFromText(text, int4) - already defined ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for constructing an ST_Geometry -- value given its WKB representation ------------------------------------------------------------------------------- -- PostGIS equivalent function: GeomFromWKB(bytea)) -- Note: Defaults to an SRID=-1, not 0 as per SQL/MM specs. CREATE OR REPLACE FUNCTION ST_WKBToSQL(bytea) RETURNS geometry AS '$libdir/postgis-1.5','LWGEOM_from_WKB' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_GeomFromWKB(bytea, int) - already defined -- ST_PointFromWKB(bytea, int) - already defined -- ST_LineFromWKB(bytea, int) - already defined -- ST_PolyFromWKB(bytea, int) - already defined -- ST_MPointFromWKB(bytea, int) - already defined -- ST_MLineFromWKB(bytea, int) - already defined -- ST_MPolyFromWKB(bytea, int) - already defined ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for constructing an ST_Geometry -- value given an ESRI Shape representation ------------------------------------------------------------------------------- -- TODO: SE_ShapeToSQL -- TODO: SE_GeomFromShape -- TODO: SE_PointFromShape -- TODO: SE_LineFromShape -- TODO: SE_PolyFromShape -- TODO: SE_MPointFromShape -- TODO: SE_MLineFromShape -- TODO: SE_MPolyFromShape ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for obtaining the WKT representation -- of an ST_Geometry ------------------------------------------------------------------------------- -- ST_AsText(geometry) - already defined ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for obtaining the WKB representation -- of an ST_Geometry ------------------------------------------------------------------------------- -- ST_AsBinary(geometry) - already defined ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for obtaining the ESRI Shape -- representation of an ST_Geometry ------------------------------------------------------------------------------- -- TODO: SE_AsShape(geometry) --CREATE OR REPLACE FUNCTION SE_AsShape(geometry) -- RETURNS bytea -- AS '$libdir/postgis-1.5','LWGEOM_AsShape' -- LANGUAGE 'C' IMMUTABLE STRICT; ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Geometry ------------------------------------------------------------------------------- -- PostGIS equivalent function: ndims(geometry) CREATE OR REPLACE FUNCTION ST_CoordDim(geometry) RETURNS smallint AS '$libdir/postgis-1.5', 'LWGEOM_ndims' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_Dimension(geometry) - already defined. -- ST_GeometryType(geometry) - already defined. -- ST_SRID(geometry) - already defined. -- ST_IsEmpty(geometry) - already defined. -- ST_IsSimple(geometry) - already defined. -- ST_IsValid(geometry) - already defined. -- ST_Boundary(geometry) - already defined. -- ST_Envelope(geometry) - already defined. -- ST_Transform(geometry) - already defined. -- ST_AsText(geometry) - already defined. -- ST_AsBinary(geometry) - already defined. -- SE_AsShape(geometry) - already defined. -- ST_X(geometry) - already defined. -- ST_Y(geometry) - already defined. -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_OrderingEquals(geometry, geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'LWGEOM_same' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.3.0 CREATE OR REPLACE FUNCTION ST_OrderingEquals(geometry, geometry) RETURNS boolean AS $$ SELECT $1 ~= $2 AND _ST_OrderingEquals($1, $2) $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION SE_Is3D(geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_hasz' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION SE_IsMeasured(geometry) RETURNS bool AS '$libdir/postgis-1.5', 'LWGEOM_hasm' LANGUAGE 'C' IMMUTABLE STRICT; ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Point ------------------------------------------------------------------------------- -- PostGIS equivalent function: makePoint(float8,float8) CREATE OR REPLACE FUNCTION ST_Point(float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_makepoint' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: Z(geometry) CREATE OR REPLACE FUNCTION SE_Z(geometry) RETURNS float8 AS '$libdir/postgis-1.5','LWGEOM_z_point' LANGUAGE 'C' IMMUTABLE STRICT; -- PostGIS equivalent function: M(geometry) CREATE OR REPLACE FUNCTION SE_M(geometry) RETURNS float8 AS '$libdir/postgis-1.5','LWGEOM_m_point' LANGUAGE 'C' IMMUTABLE STRICT; ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Curve ------------------------------------------------------------------------------- -- ST_StartPoint(geometry) - already defined. -- ST_EndPoint(geometry) - already defined. -- ST_IsClosed(geometry) - already defined. -- ST_IsRing(geometry) - already defined. -- ST_Length(geometry) - already defined. ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_LineString ------------------------------------------------------------------------------- -- ST_NumPoints(geometry) - already defined. -- ST_PointN(geometry) - already defined. ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Surface ------------------------------------------------------------------------------- -- ST_Centroid(geometry) - already defined. -- ST_PointOnSurface(geometry) - already defined. -- ST_Area(geometry) - already defined. -- ST_Perimeter(geometry) - already defined. ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Polygon ------------------------------------------------------------------------------- -- PostGIS equivalent function: MakePolygon(geometry) CREATE OR REPLACE FUNCTION ST_Polygon(geometry, int) RETURNS geometry AS $$ SELECT setSRID(makepolygon($1), $2) $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_ExteriorRing(geometry) - already defined. -- ST_NumInteriorRing(geometry) - already defined. -- ST_InteriorRingN(geometry, integer) - already defined. ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_GeomCollection ------------------------------------------------------------------------------- -- ST_NumGeometries(geometry) - already defined. -- ST_GeometryN(geometry, integer) - already defined. ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_MultiCurve ------------------------------------------------------------------------------- -- ST_IsClosed(geometry) - already defined. -- ST_Length(geometry) - already defined. ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_MultiSurface ------------------------------------------------------------------------------- -- ST_Centroid(geometry) - already defined. -- ST_PointOnSurface(geometry) - already defined. -- ST_Area(geometry) - already defined. -- ST_Perimeter(geometry) - already defined. ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions that test spatial relationships ------------------------------------------------------------------------------- -- ST_Equals(geometry, geometry) - already defined. -- ST_Disjoint(geometry, geometry) - already defined. -- ST_Touches(geometry, geometry) - already defined. -- ST_Within(geometry, geometry) - already defined. -- ST_Overlaps(geometry, geometry) - already defined. -- ST_Crosses(geometry, geometry) - already defined. -- ST_Intersects(geometry, geometry) - already defined. -- ST_Contains(geometry, geometry) - already defined. -- ST_Relate(geometry, geometry, text) - already defined. -- PostGIS equivalent function: none CREATE OR REPLACE FUNCTION SE_EnvelopesIntersect(geometry,geometry) RETURNS boolean AS $$ SELECT $1 && $2 $$ LANGUAGE 'SQL' IMMUTABLE STRICT; ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for distance relationships ------------------------------------------------------------------------------- -- ST_Distance(geometry, geometry) - already defined. ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions that implement spatial operators ------------------------------------------------------------------------------- -- ST_Intersection(geometry, geometry) - already defined. -- ST_Difference(geometry, geometry) - already defined. -- ST_Union(geometry, geometry) - already defined. -- ST_SymDifference(geometry, geometry) - already defined. -- ST_Buffer(geometry, float8) - already defined. -- ST_ConvexHull(geometry) already defined. -- PostGIS equivalent function: locate_along_measure(geometry, float8) CREATE OR REPLACE FUNCTION SE_LocateAlong(geometry, float8) RETURNS geometry AS $$ SELECT locate_between_measures($1, $2, $2) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -- PostGIS equivalent function: locate_between_measures(geometry, float8, float8) CREATE OR REPLACE FUNCTION SE_LocateBetween(geometry, float8, float8) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_locate_between_m' LANGUAGE 'C' IMMUTABLE STRICT; ------------------------------------------------------------------------------- -- END ------------------------------------------------------------------------------- --------------------------------------------------------------------------- -- $Id: geography.sql.in.c 5976 2010-09-18 18:01:17Z pramsey $ -- -- PostGIS - Spatial Types for PostgreSQL -- Copyright 2009 Paul Ramsey <pramsey@cleverelephant.ca> -- -- This is free software; you can redistribute and/or modify it under -- the terms of the GNU General Public Licence. See the COPYING file. -- --------------------------------------------------------------------------- -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_typmod_in(cstring[]) RETURNS integer AS '$libdir/postgis-1.5','geography_typmod_in' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_typmod_out(integer) RETURNS cstring AS '$libdir/postgis-1.5','geography_typmod_out' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_in(cstring, oid, integer) RETURNS geography AS '$libdir/postgis-1.5','geography_in' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_out(geography) RETURNS cstring AS '$libdir/postgis-1.5','geography_out' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_analyze(internal) RETURNS bool AS '$libdir/postgis-1.5','geography_analyze' LANGUAGE 'C' VOLATILE STRICT; -- Availability: 1.5.0 CREATE TYPE geography ( internallength = variable, input = geography_in, output = geography_out, typmod_in = geography_typmod_in, typmod_out = geography_typmod_out, analyze = geography_analyze, storage = main, alignment = double ); -- -- GIDX type is used by the GiST index bindings. -- In/out functions are stubs, as all access should be internal. --- -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION gidx_in(cstring) RETURNS gidx AS '$libdir/postgis-1.5','gidx_in' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION gidx_out(gidx) RETURNS cstring AS '$libdir/postgis-1.5','gidx_out' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE TYPE gidx ( internallength = variable, input = gidx_in, output = gidx_out, storage = plain, alignment = double ); -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography(geography, integer, boolean) RETURNS geography AS '$libdir/postgis-1.5','geography_enforce_typmod' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE CAST (geography AS geography) WITH FUNCTION geography(geography, integer, boolean) AS IMPLICIT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_AsText(geography) RETURNS text AS '$libdir/postgis-1.5','geography_as_text' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_AsText(text) RETURNS text AS $$ SELECT ST_AsText($1::geometry); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GeographyFromText(text) RETURNS geography AS '$libdir/postgis-1.5','geography_from_text' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GeogFromText(text) RETURNS geography AS '$libdir/postgis-1.5','geography_from_text' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_AsBinary(geography) RETURNS bytea AS '$libdir/postgis-1.5','geography_as_binary' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_AsBinary(text) RETURNS bytea AS $$ SELECT ST_AsBinary($1::geometry); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GeogFromWKB(bytea) RETURNS geography AS '$libdir/postgis-1.5','geography_from_binary' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_typmod_dims(integer) RETURNS integer AS '$libdir/postgis-1.5','geography_typmod_dims' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_typmod_srid(integer) RETURNS integer AS '$libdir/postgis-1.5','geography_typmod_srid' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_typmod_type(integer) RETURNS text AS '$libdir/postgis-1.5','geography_typmod_type' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE VIEW geography_columns AS SELECT current_database() AS f_table_catalog, n.nspname AS f_table_schema, c.relname AS f_table_name, a.attname AS f_geography_column, geography_typmod_dims(a.atttypmod) AS coord_dimension, geography_typmod_srid(a.atttypmod) AS srid, geography_typmod_type(a.atttypmod) AS type FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n WHERE t.typname = 'geography' AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND NOT pg_is_other_temp_schema(c.relnamespace); -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography(geometry) RETURNS geography AS '$libdir/postgis-1.5','geography_from_geometry' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE CAST (geometry AS geography) WITH FUNCTION geography(geometry) AS IMPLICIT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geometry(geography) RETURNS geometry AS '$libdir/postgis-1.5','geometry_from_geography' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE CAST (geography AS geometry) WITH FUNCTION geometry(geography) ; -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- GiST Support Functions -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_consistent(internal,geometry,int4) RETURNS bool AS '$libdir/postgis-1.5' ,'geography_gist_consistent' LANGUAGE 'C'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_compress(internal) RETURNS internal AS '$libdir/postgis-1.5','geography_gist_compress' LANGUAGE 'C'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_penalty(internal,internal,internal) RETURNS internal AS '$libdir/postgis-1.5' ,'geography_gist_penalty' LANGUAGE 'C'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_picksplit(internal, internal) RETURNS internal AS '$libdir/postgis-1.5' ,'geography_gist_picksplit' LANGUAGE 'C'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_union(bytea, internal) RETURNS internal AS '$libdir/postgis-1.5' ,'geography_gist_union' LANGUAGE 'C'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_same(box2d, box2d, internal) RETURNS internal AS '$libdir/postgis-1.5' ,'geography_gist_same' LANGUAGE 'C'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_decompress(internal) RETURNS internal AS '$libdir/postgis-1.5' ,'geography_gist_decompress' LANGUAGE 'C'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_selectivity (internal, oid, internal, int4) RETURNS float8 AS '$libdir/postgis-1.5', 'geography_gist_selectivity' LANGUAGE 'C'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_gist_join_selectivity(internal, oid, internal, smallint) RETURNS float8 AS '$libdir/postgis-1.5', 'geography_gist_join_selectivity' LANGUAGE 'C'; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION geography_overlaps(geography, geography) RETURNS boolean AS '$libdir/postgis-1.5' ,'geography_overlaps' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OPERATOR && ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_overlaps, COMMUTATOR = '&&', RESTRICT = geography_gist_selectivity, JOIN = geography_gist_join_selectivity ); -- Availability: 1.5.0 CREATE OPERATOR CLASS gist_geography_ops DEFAULT FOR TYPE geography USING GIST AS STORAGE gidx, OPERATOR 3 && , -- OPERATOR 6 ~= , -- OPERATOR 7 ~ , -- OPERATOR 8 @ , FUNCTION 1 geography_gist_consistent (internal, geometry, int4), FUNCTION 2 geography_gist_union (bytea, internal), FUNCTION 3 geography_gist_compress (internal), FUNCTION 4 geography_gist_decompress (internal), FUNCTION 5 geography_gist_penalty (internal, internal, internal), FUNCTION 6 geography_gist_picksplit (internal, internal), FUNCTION 7 geography_gist_same (box2d, box2d, internal); -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- B-Tree Functions -- For sorting and grouping -- Availability: 1.5.0 -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- CREATE OR REPLACE FUNCTION geography_lt(geography, geography) RETURNS bool AS '$libdir/postgis-1.5', 'geography_lt' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geography_le(geography, geography) RETURNS bool AS '$libdir/postgis-1.5', 'geography_le' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geography_gt(geography, geography) RETURNS bool AS '$libdir/postgis-1.5', 'geography_gt' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geography_ge(geography, geography) RETURNS bool AS '$libdir/postgis-1.5', 'geography_ge' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geography_eq(geography, geography) RETURNS bool AS '$libdir/postgis-1.5', 'geography_eq' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION geography_cmp(geography, geography) RETURNS integer AS '$libdir/postgis-1.5', 'geography_cmp' LANGUAGE 'C' IMMUTABLE STRICT; -- -- Sorting operators for Btree -- CREATE OPERATOR < ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_lt, COMMUTATOR = '>', NEGATOR = '>=', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR <= ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_le, COMMUTATOR = '>=', NEGATOR = '>', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR = ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_eq, COMMUTATOR = '=', -- we might implement a faster negator here RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR >= ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_ge, COMMUTATOR = '<=', NEGATOR = '<', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR > ( LEFTARG = geography, RIGHTARG = geography, PROCEDURE = geography_gt, COMMUTATOR = '<', NEGATOR = '<=', RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR CLASS btree_geography_ops DEFAULT FOR TYPE geography USING btree AS OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 geography_cmp (geography, geography); -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Export Functions -- Availability: 1.5.0 -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- -- SVG OUTPUT -- -- ST_AsSVG(geography, precision, rel) CREATE OR REPLACE FUNCTION ST_AsSVG(geography,int4,int4) RETURNS text AS '$libdir/postgis-1.5','geography_as_svg' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_AsSVG(geography, precision) / rel=0 CREATE OR REPLACE FUNCTION ST_AsSVG(geography,int4) RETURNS text AS '$libdir/postgis-1.5','geography_as_svg' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_AsSVG(geography) / precision=15, rel=0 CREATE OR REPLACE FUNCTION ST_AsSVG(geography) RETURNS text AS '$libdir/postgis-1.5','geography_as_svg' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_AsSVG(text) RETURNS text AS $$ SELECT ST_AsSVG($1::geometry); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- -- GML OUTPUT -- -- _ST_AsGML(version, geography, precision, option) CREATE OR REPLACE FUNCTION _ST_AsGML(int4, geography, int4, int4) RETURNS text AS '$libdir/postgis-1.5','geography_as_gml' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_AsGML(geography, precision) / version=2 options=0 CREATE OR REPLACE FUNCTION ST_AsGML(geography, int4) RETURNS text AS 'SELECT _ST_AsGML(2, $1, $2, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML(geography) / precision=15 version=2 options=0 CREATE OR REPLACE FUNCTION ST_AsGML(geography) RETURNS text AS 'SELECT _ST_AsGML(2, $1, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_AsGML(text) RETURNS text AS $$ SELECT ST_AsGML($1::geometry); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML(version, geography) / precision=15 version=2 options=0 CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography) RETURNS text AS 'SELECT _ST_AsGML($1, $2, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML(version, geography, precision) / options = 0 CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography, int4) RETURNS text AS 'SELECT _ST_AsGML($1, $2, $3, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML (geography, precision, option) / version=2 CREATE OR REPLACE FUNCTION ST_AsGML(geography, int4, int4) RETURNS text AS 'SELECT _ST_AsGML(2, $1, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML(version, geography, precision, option) CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography, int4, int4) RETURNS text AS 'SELECT _ST_AsGML($1, $2, $3, $4)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- -- KML OUTPUT -- -- _ST_AsKML(version, geography, precision) CREATE OR REPLACE FUNCTION _ST_AsKML(int4, geography, int4) RETURNS text AS '$libdir/postgis-1.5','geography_as_kml' LANGUAGE 'C' IMMUTABLE STRICT; -- AsKML(geography,precision) / version=2 CREATE OR REPLACE FUNCTION ST_AsKML(geography, int4) RETURNS text AS 'SELECT _ST_AsKML(2, $1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- AsKML(geography) / precision=15 version=2 CREATE OR REPLACE FUNCTION ST_AsKML(geography) RETURNS text AS 'SELECT _ST_AsKML(2, $1, 15)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_AsKML(text) RETURNS text AS $$ SELECT ST_AsKML($1::geometry); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsKML(version, geography) / precision=15 CREATE OR REPLACE FUNCTION ST_AsKML(int4, geography) RETURNS text AS 'SELECT _ST_AsKML($1, $2, 15)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsKML(version, geography, precision) CREATE OR REPLACE FUNCTION ST_AsKML(int4, geography, int4) RETURNS text AS 'SELECT _ST_AsKML($1, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- -- GeoJson Output -- CREATE OR REPLACE FUNCTION _ST_AsGeoJson(int4, geography, int4, int4) RETURNS text AS '$libdir/postgis-1.5','geography_as_geojson' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_AsGeoJson(geography, precision) / version=1 options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(geography, int4) RETURNS text AS 'SELECT _ST_AsGeoJson(1, $1, $2, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(geography) / precision=15 version=1 options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(geography) RETURNS text AS 'SELECT _ST_AsGeoJson(1, $1, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(text) RETURNS text AS $$ SELECT ST_AsGeoJson($1::geometry); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(version, geography) / precision=15 options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(int4, geography) RETURNS text AS 'SELECT _ST_AsGeoJson($1, $2, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(version, geography, precision) / options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(int4, geography, int4) RETURNS text AS 'SELECT _ST_AsGeoJson($1, $2, $3, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(geography, precision, options) / version=1 CREATE OR REPLACE FUNCTION ST_AsGeoJson(geography, int4, int4) RETURNS text AS 'SELECT _ST_AsGeoJson(1, $1, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(version, geography, precision,options) CREATE OR REPLACE FUNCTION ST_AsGeoJson(int4, geography, int4, int4) RETURNS text AS 'SELECT _ST_AsGeoJson($1, $2, $3, $4)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Measurement Functions -- Availability: 1.5.0 -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -- Stop calculation and return immediately once distance is less than tolerance -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_Distance(geography, geography, float8, boolean) RETURNS float8 AS '$libdir/postgis-1.5','geography_distance' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Stop calculation and return immediately once distance is less than tolerance -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_DWithin(geography, geography, float8, boolean) RETURNS boolean AS '$libdir/postgis-1.5','geography_dwithin' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Distance(geography, geography, boolean) RETURNS float8 AS 'SELECT _ST_Distance($1, $2, 0.0, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Currently defaulting to spheroid calculations -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Distance(geography, geography) RETURNS float8 AS 'SELECT _ST_Distance($1, $2, 0.0, true)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_Distance(text, text) RETURNS float8 AS $$ SELECT ST_Distance($1::geometry, $2::geometry); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- Only expands the bounding box, the actual geometry will remain unchanged, use with care. -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_Expand(geography, float8) RETURNS geography AS '$libdir/postgis-1.5','geography_expand' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_DWithin(geography, geography, float8, boolean) RETURNS boolean AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3, $4)' LANGUAGE 'SQL' IMMUTABLE; -- Currently defaulting to spheroid calculations -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_DWithin(geography, geography, float8) RETURNS boolean AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3, true)' LANGUAGE 'SQL' IMMUTABLE; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_DWithin(text, text, float8) RETURNS boolean AS $$ SELECT ST_DWithin($1::geometry, $2::geometry, $3); $$ LANGUAGE 'SQL' IMMUTABLE ; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Area(geography, boolean) RETURNS float8 AS '$libdir/postgis-1.5','geography_area' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Currently defaulting to spheroid calculations -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Area(geography) RETURNS float8 AS 'SELECT ST_Area($1, true)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_Area(text) RETURNS float8 AS $$ SELECT ST_Area($1::geometry); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Length(geography, boolean) RETURNS float8 AS '$libdir/postgis-1.5','geography_length' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Length(geography) RETURNS float8 AS 'SELECT ST_Length($1, true)' LANGUAGE 'SQL' IMMUTABLE; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_Length(text) RETURNS float8 AS $$ SELECT ST_Length($1::geometry); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_PointOutside(geography) RETURNS geography AS '$libdir/postgis-1.5','geography_point_outside' LANGUAGE 'C' IMMUTABLE STRICT; -- Only implemented for polygon-over-point -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_Covers(geography, geography) RETURNS boolean AS '$libdir/postgis-1.5','geography_covers' LANGUAGE 'C' IMMUTABLE STRICT COST 100; -- Only implemented for polygon-over-point -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Covers(geography, geography) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Covers($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_Covers(text, text) RETURNS boolean AS $$ SELECT ST_Covers($1::geometry, $2::geometry); $$ LANGUAGE 'SQL' IMMUTABLE ; -- Only implemented for polygon-over-point -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_CoveredBy(geography, geography) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Covers($2, $1)' LANGUAGE 'SQL' IMMUTABLE ; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_CoveredBy(text, text) RETURNS boolean AS $$ SELECT ST_CoveredBy($1::geometry, $2::geometry); $$ LANGUAGE 'SQL' IMMUTABLE ; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Intersects(geography, geography) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Distance($1, $2, 0.0, false) < 0.00001' LANGUAGE 'SQL' IMMUTABLE; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_Intersects(text, text) RETURNS boolean AS $$ SELECT ST_Intersects($1::geometry, $2::geometry); $$ LANGUAGE 'SQL' IMMUTABLE ; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_BestSRID(geography, geography) RETURNS integer AS '$libdir/postgis-1.5','geography_bestsrid' LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_BestSRID(geography) RETURNS integer AS 'SELECT _ST_BestSRID($1,$1)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Buffer(geography, float8) RETURNS geography AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), _ST_BestSRID($1)), $2), 4326))' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_Buffer(text, float8) RETURNS geometry AS $$ SELECT ST_Buffer($1::geometry, $2); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Intersection(geography, geography) RETURNS geography AS 'SELECT geography(ST_Transform(ST_Intersection(ST_Transform(geometry($1), _ST_BestSRID($1, $2)), ST_Transform(geometry($2), _ST_BestSRID($1, $2))), 4326))' LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography -- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_Intersection(text, text) RETURNS geometry AS $$ SELECT ST_Intersection($1::geometry, $2::geometry); $$ LANGUAGE 'SQL' IMMUTABLE STRICT; -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- --------------------------------------------------------------- -- SQL-MM --------------------------------------------------------------- -- -- SQL-MM -- -- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer) -- -- Converts a given geometry to a linear geometry. Each curveed -- geometry or segment is converted into a linear approximation using -- the given number of segments per quarter circle. CREATE OR REPLACE FUNCTION ST_CurveToLine(geometry, integer) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_curve_segmentize' LANGUAGE 'C' IMMUTABLE STRICT; -- -- SQL-MM -- -- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer) -- -- Converts a given geometry to a linear geometry. Each curveed -- geometry or segment is converted into a linear approximation using -- the default value of 32 segments per quarter circle CREATE OR REPLACE FUNCTION ST_CurveToLine(geometry) RETURNS geometry AS 'SELECT ST_CurveToLine($1, 32)' LANGUAGE 'SQL' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_HasArc(geometry) RETURNS boolean AS '$libdir/postgis-1.5', 'LWGEOM_has_arc' LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_LineToCurve(geometry) RETURNS geometry AS '$libdir/postgis-1.5', 'LWGEOM_line_desegmentize' LANGUAGE 'C' IMMUTABLE STRICT; --------------------------------------------------------------- -- END --------------------------------------------------------------- --------------------------------------------------------------- -- USER CONTRIUBUTED --------------------------------------------------------------- ----------------------------------------------------------------------- -- ST_MinimumBoundingCircle(inputgeom geometry, segs_per_quarter integer) ----------------------------------------------------------------------- -- Returns the smallest circle polygon that can fully contain a geometry -- Defaults to 48 segs per quarter to approximate a circle -- Contributed by Bruce Rindahl -- Availability: 1.4.0 ----------------------------------------------------------------------- CREATE OR REPLACE FUNCTION ST_MinimumBoundingCircle(inputgeom geometry, segs_per_quarter integer) RETURNS geometry AS $BODY$ DECLARE hull GEOMETRY; ring GEOMETRY; center GEOMETRY; radius DOUBLE PRECISION; dist DOUBLE PRECISION; d DOUBLE PRECISION; idx1 integer; idx2 integer; l1 GEOMETRY; l2 GEOMETRY; p1 GEOMETRY; p2 GEOMETRY; a1 DOUBLE PRECISION; a2 DOUBLE PRECISION; BEGIN -- First compute the ConvexHull of the geometry hull = ST_ConvexHull(inputgeom); --A point really has no MBC IF ST_GeometryType(hull) = 'ST_Point' THEN RETURN hull; END IF; -- convert the hull perimeter to a linestring so we can manipulate individual points --If its already a linestring force it to a closed linestring ring = CASE WHEN ST_GeometryType(hull) = 'ST_LineString' THEN ST_AddPoint(hull, ST_StartPoint(hull)) ELSE ST_ExteriorRing(hull) END; dist = 0; -- Brute Force - check every pair FOR i in 1 .. (ST_NumPoints(ring)-2) LOOP FOR j in i .. (ST_NumPoints(ring)-1) LOOP d = ST_Distance(ST_PointN(ring,i),ST_PointN(ring,j)); -- Check the distance and update if larger IF (d > dist) THEN dist = d; idx1 = i; idx2 = j; END IF; END LOOP; END LOOP; -- We now have the diameter of the convex hull. The following line returns it if desired. -- RETURN MakeLine(PointN(ring,idx1),PointN(ring,idx2)); -- Now for the Minimum Bounding Circle. Since we know the two points furthest from each -- other, the MBC must go through those two points. Start with those points as a diameter of a circle. -- The radius is half the distance between them and the center is midway between them radius = ST_Distance(ST_PointN(ring,idx1),ST_PointN(ring,idx2)) / 2.0; center = ST_Line_interpolate_point(ST_MakeLine(ST_PointN(ring,idx1),ST_PointN(ring,idx2)),0.5); -- Loop through each vertex and check if the distance from the center to the point -- is greater than the current radius. FOR k in 1 .. (ST_NumPoints(ring)-1) LOOP IF(k <> idx1 and k <> idx2) THEN dist = ST_Distance(center,ST_PointN(ring,k)); IF (dist > radius) THEN -- We have to expand the circle. The new circle must pass trhough -- three points - the two original diameters and this point. -- Draw a line from the first diameter to this point l1 = ST_Makeline(ST_PointN(ring,idx1),ST_PointN(ring,k)); -- Compute the midpoint p1 = ST_line_interpolate_point(l1,0.5); -- Rotate the line 90 degrees around the midpoint (perpendicular bisector) l1 = ST_Translate(ST_Rotate(ST_Translate(l1,-X(p1),-Y(p1)),pi()/2),X(p1),Y(p1)); -- Compute the azimuth of the bisector a1 = ST_Azimuth(ST_PointN(l1,1),ST_PointN(l1,2)); -- Extend the line in each direction the new computed distance to insure they will intersect l1 = ST_AddPoint(l1,ST_Makepoint(X(ST_PointN(l1,2))+sin(a1)*dist,Y(ST_PointN(l1,2))+cos(a1)*dist),-1); l1 = ST_AddPoint(l1,ST_Makepoint(X(ST_PointN(l1,1))-sin(a1)*dist,Y(ST_PointN(l1,1))-cos(a1)*dist),0); -- Repeat for the line from the point to the other diameter point l2 = ST_Makeline(ST_PointN(ring,idx2),ST_PointN(ring,k)); p2 = ST_Line_interpolate_point(l2,0.5); l2 = ST_Translate(ST_Rotate(ST_Translate(l2,-X(p2),-Y(p2)),pi()/2),X(p2),Y(p2)); a2 = ST_Azimuth(ST_PointN(l2,1),ST_PointN(l2,2)); l2 = ST_AddPoint(l2,ST_Makepoint(X(ST_PointN(l2,2))+sin(a2)*dist,Y(ST_PointN(l2,2))+cos(a2)*dist),-1); l2 = ST_AddPoint(l2,ST_Makepoint(X(ST_PointN(l2,1))-sin(a2)*dist,Y(ST_PointN(l2,1))-cos(a2)*dist),0); -- The new center is the intersection of the two bisectors center = ST_Intersection(l1,l2); -- The new radius is the distance to any of the three points radius = ST_Distance(center,ST_PointN(ring,idx1)); END IF; END IF; END LOOP; --DONE!! Return the MBC via the buffer command RETURN ST_Buffer(center,radius,segs_per_quarter); END; $BODY$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION ST_MinimumBoundingCircle(geometry) RETURNS geometry AS 'SELECT ST_MinimumBoundingCircle($1, 48)' LANGUAGE 'sql' IMMUTABLE STRICT; COMMIT; -- First drop old aggregates DROP AGGREGATE IF EXISTS geomunion(geometry); DROP AGGREGATE IF EXISTS st_geomunion(geometry); DROP AGGREGATE IF EXISTS accum_old(geometry); DROP AGGREGATE IF EXISTS st_accum_old(geometry); -- Then drop old functions DROP FUNCTION IF EXISTS box2d_overleft(box2d, box2d); DROP FUNCTION IF EXISTS box2d_overright(box2d, box2d); DROP FUNCTION IF EXISTS box2d_left(box2d, box2d); DROP FUNCTION IF EXISTS box2d_right(box2d, box2d); DROP FUNCTION IF EXISTS box2d_contain(box2d, box2d); DROP FUNCTION IF EXISTS box2d_contained(box2d, box2d); DROP FUNCTION IF EXISTS box2d_overlap(box2d, box2d); DROP FUNCTION IF EXISTS box2d_same(box2d, box2d); DROP FUNCTION IF EXISTS box2d_intersects(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_overleft(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_overright(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_left(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_right(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_contain(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_contained(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_overlap(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_same(box2d, box2d); DROP FUNCTION IF EXISTS st_box2d_intersects(box2d, box2d); DROP FUNCTION IF EXISTS st_addbbox(geometry); DROP FUNCTION IF EXISTS st_dropbbox(geometry); DROP FUNCTION IF EXISTS st_hasbbox(geometry); DROP FUNCTION IF EXISTS cache_bbox(); DROP FUNCTION IF EXISTS st_cache_bbox(); DROP FUNCTION IF EXISTS transform_geometry(geometry,text,text,int); DROP FUNCTION IF EXISTS collector(geometry, geometry); DROP FUNCTION IF EXISTS st_collector(geometry, geometry); DROP FUNCTION IF EXISTS geom_accum (geometry[],geometry); DROP FUNCTION IF EXISTS st_geom_accum (geometry[],geometry); DROP FUNCTION IF EXISTS collect_garray (geometry[]); DROP FUNCTION IF EXISTS st_collect_garray (geometry[]); DROP FUNCTION IF EXISTS geosnoop(geometry); DROP FUNCTION IF EXISTS jtsnoop(geometry); DROP FUNCTION IF EXISTS st_noop(geometry); DROP FUNCTION IF EXISTS st_max_distance(geometry, geometry);