-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- -- $Id: sqlmm.sql.in 2406 2006-11-02 13:56:52Z kneufeld $ -- -- 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 -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include "sqldefines.h" ------------------------------------------------------------------------------- -- 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: GeometryFromText(text) -- Note: Defaults to an SRID=-1, not 0 as per SQL/MM specs. CREATEFUNCTION ST_WKTToSQL(text) RETURNS geometry AS 'SELECT geometryfromtext($1)' LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: GeometryFromText(text, int4) CREATEFUNCTION ST_GeomFromText(text, int4) RETURNS geometry AS 'SELECT geometryfromtext($1, $2)' LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: PointFromText(text, int4) -- TODO: improve this ... by not duplicating constructor time. CREATEFUNCTION ST_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; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: LineFromText(text, int4) CREATEFUNCTION 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; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: PolyFromText(text, int4) CREATEFUNCTION ST_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; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: MPointFromText(text, int4) CREATEFUNCTION 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; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: MLineFromText(text, int4) CREATEFUNCTION 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; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: MPolyFromText(text, int4) CREATEFUNCTION ST_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; -- WITH (isstrict,iscachable); ------------------------------------------------------------------------------- -- 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. CREATEFUNCTION ST_WKBToSQL(bytea) RETURNS geometry AS 'SELECT GeomFromWKB($1)' LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: GeomFromWKB(bytea, int) CREATEFUNCTION ST_GeomFromWKB(bytea, int) RETURNS geometry AS 'SELECT setSRID(GeomFromWKB($1), $2)' LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: PointFromWKB(bytea, int) CREATEFUNCTION ST_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; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: LineFromWKB(text, int) CREATEFUNCTION ST_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; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: PolyFromWKB(text, int) CREATEFUNCTION ST_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; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: MPointFromWKB(text, int) CREATEFUNCTION 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; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: MLineFromWKB(text, int) CREATEFUNCTION ST_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; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: MPolyFromWKB(text, int) CREATEFUNCTION ST_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; -- WITH (isstrict,iscachable); ------------------------------------------------------------------------------- -- 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 ------------------------------------------------------------------------------- -- PostGIS equivalent function: AsText(geometry) CREATEFUNCTION ST_AsText(geometry) RETURNS TEXT AS '@MODULE_FILENAME@','LWGEOM_asText' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for obtaining the WKB representation -- of an ST_Geometry ------------------------------------------------------------------------------- -- PostGIS equivalent function: AsBinary(geometry) CREATEFUNCTION ST_AsBinary(geometry) RETURNS bytea AS '@MODULE_FILENAME@','LWGEOM_asBinary' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for obtaining the ESRI Shape representation -- of an ST_Geometry ------------------------------------------------------------------------------- -- TODO: SE_AsShape(geometry) --CREATEFUNCTION SE_AsShape(geometry) -- RETURNS bytea -- AS '@MODULE_FILENAME@','LWGEOM_AsShape' -- LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Geometry ------------------------------------------------------------------------------- -- PostGIS equivalent function: Dimension(geometry) CREATEFUNCTION ST_Dimension(geometry) RETURNS int4 AS '@MODULE_FILENAME@', 'LWGEOM_dimension' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: ndims(geometry) CREATEFUNCTION ST_CoordDim(geometry) RETURNS smallint AS '@MODULE_FILENAME@', 'LWGEOM_ndims' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict); -- PostGIS equivalent function: GeometryType(geometry) CREATEFUNCTION ST_GeometryType(geometry) RETURNS text AS ' DECLARE gtype text := geometrytype($1); BEGIN IF (gtype IN (''POINT'', ''POINTM'')) THEN gtype := ''Point''; ELSIF (gtype IN (''LINESTRING'', ''LINESTRINGM'')) THEN gtype := ''LineString''; ELSIF (gtype IN (''POLYGON'', ''POLYGONM'')) THEN gtype := ''Polygon''; ELSIF (gtype IN (''MULTIPOINT'', ''MULTIPOINTM'')) THEN gtype := ''MultiPoint''; ELSIF (gtype IN (''MULTILINESTRING'', ''MULTILINESTRINGM'')) THEN gtype := ''MultiLineString''; ELSIF (gtype IN (''MULTIPOLYGON'', ''MULTIPOLYGONM'')) THEN gtype := ''MultiPolygon''; ELSE gtype := ''Geometry''; END IF; RETURN ''ST_'' || gtype; END ' LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- ST_AsText(geometry) - already defined. -- ST_AsBinary(geometry) - already defined. -- SE_AsShape(geometry) - already defined. -- PostGIS equivalent function: getSRID(geometry) CREATEFUNCTION ST_SRID(geometry) RETURNS int4 AS '@MODULE_FILENAME@','LWGEOM_getSRID' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: IsEmpty(geometry) CREATEFUNCTION ST_IsEmpty(geometry) RETURNS boolean AS '@MODULE_FILENAME@', 'LWGEOM_isempty' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: IsSimple(geometry) CREATEFUNCTION ST_IsSimple(geometry) RETURNS boolean AS '@MODULE_FILENAME@', 'issimple' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: IsValid(geometry) -- TODO: change null returns to true CREATEFUNCTION ST_IsValid(geometry) RETURNS boolean AS '@MODULE_FILENAME@', 'isvalid' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: boundary(geometry) CREATEFUNCTION ST_Boundary(geometry) RETURNS geometry AS '@MODULE_FILENAME@','boundary' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: envelope(geometry) CREATEFUNCTION ST_Envelope(geometry) RETURNS geometry AS '@MODULE_FILENAME@', 'LWGEOM_envelope' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict); -- PostGIS equivalent function: transform(geometry,integer) CREATEFUNCTION ST_Transform(geometry,integer) RETURNS geometry AS '@MODULE_FILENAME@','transform' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: ~= CREATEFUNCTION ST_OrderingEquals(geometry, geometry) RETURNS boolean AS ' SELECT $1 && $2 AND $1 ~= $2 ' LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: zmflag(geometry) CREATEFUNCTION SE_Is3D(geometry) RETURNS boolean AS ' SELECT CASE zmflag($1) WHEN 0 THEN false WHEN 1 THEN false WHEN 2 THEN true WHEN 3 THEN true ELSE false END ' LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: zmflag(geometry) CREATEFUNCTION SE_IsMeasured(geometry) RETURNS boolean AS ' SELECT CASE zmflag($1) WHEN 0 THEN false WHEN 1 THEN true WHEN 2 THEN false WHEN 3 THEN true ELSE false END ' LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Point ------------------------------------------------------------------------------- -- PostGIS equivalent function: makePoint(float8,float8) CREATEFUNCTION ST_Point(float8, float8) RETURNS geometry AS '@MODULE_FILENAME@', 'LWGEOM_makepoint' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict); -- PostGIS equivalent function: X(geometry) CREATEFUNCTION ST_X(geometry) RETURNS float8 AS '@MODULE_FILENAME@','LWGEOM_x_point' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: Y(geometry) CREATEFUNCTION ST_Y(geometry) RETURNS float8 AS '@MODULE_FILENAME@','LWGEOM_y_point' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: Z(geometry) CREATEFUNCTION SE_Z(geometry) RETURNS float8 AS '@MODULE_FILENAME@','LWGEOM_z_point' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: M(geometry) CREATEFUNCTION SE_M(geometry) RETURNS float8 AS '@MODULE_FILENAME@','LWGEOM_m_point' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Curve ------------------------------------------------------------------------------- -- PostGIS equivalent function: StartPoint(geometry)) CREATEFUNCTION ST_StartPoint(geometry) RETURNS geometry AS '@MODULE_FILENAME@', 'LWGEOM_startpoint_linestring' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: EndPoint(geometry)) CREATEFUNCTION ST_EndPoint(geometry) RETURNS geometry AS '@MODULE_FILENAME@', 'LWGEOM_endpoint_linestring' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: IsClosed(geometry) CREATEFUNCTION ST_IsClosed(geometry) RETURNS boolean AS '@MODULE_FILENAME@', 'LWGEOM_isclosed_linestring' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: IsRing(geometry) CREATEFUNCTION ST_IsRing(geometry) RETURNS boolean AS '@MODULE_FILENAME@', 'isring' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: length2d(geometry) CREATEFUNCTION ST_Length(geometry) RETURNS FLOAT8 AS '@MODULE_FILENAME@', 'LWGEOM_length2d_linestring' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_LineString ------------------------------------------------------------------------------- -- PostGIS equivalent function: NumPoints(geometry) CREATEFUNCTION ST_NumPoints(geometry) RETURNS int4 AS '@MODULE_FILENAME@', 'LWGEOM_numpoints_linestring' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: PointN(geometry) CREATEFUNCTION ST_PointN(geometry) RETURNS geometry AS '@MODULE_FILENAME@','LWGEOM_pointn_linestring' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Surface ------------------------------------------------------------------------------- -- PostGIS equivalent function: Centroid(geometry) CREATEFUNCTION ST_Centroid(geometry) RETURNS geometry AS '@MODULE_FILENAME@', 'centroid' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: PointOnSurface(geometry) CREATEFUNCTION ST_PointOnSurface(geometry) RETURNS geometry AS '@MODULE_FILENAME@', 'pointonsurface' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: area(geometry) CREATEFUNCTION ST_Area(geometry) RETURNS FLOAT8 AS '@MODULE_FILENAME@','LWGEOM_area_polygon' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: perimeter2d(geometry) CREATEFUNCTION ST_Perimeter(geometry) RETURNS FLOAT8 AS '@MODULE_FILENAME@', 'LWGEOM_perimeter2d_poly' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_Polygon ------------------------------------------------------------------------------- -- PostGIS equivalent function: MakePolygon(geometry) CREATEFUNCTION ST_Polygon(geometry, int) RETURNS geometry AS ' SELECT setSRID(makepolygon($1), $2) ' LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: ExteriorRing(geometry) CREATEFUNCTION ST_ExteriorRing(geometry) RETURNS geometry AS '@MODULE_FILENAME@','LWGEOM_exteriorring_polygon' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: NumInteriorRings(geometry) CREATEFUNCTION ST_NumInteriorRing(geometry) RETURNS integer AS '@MODULE_FILENAME@','LWGEOM_numinteriorrings_polygon' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: InteriorRingN(geometry) CREATEFUNCTION ST_InteriorRingN(geometry,integer) RETURNS geometry AS '@MODULE_FILENAME@','LWGEOM_interiorringn_polygon' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions on type ST_GeomCollection ------------------------------------------------------------------------------- -- PostGIS equivalent function: NumGeometries(geometry) CREATEFUNCTION ST_NumGeometries(geometry) RETURNS int4 AS '@MODULE_FILENAME@', 'LWGEOM_numgeometries_collection' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); -- PostGIS equivalent function: GeometryN(geometry) CREATEFUNCTION ST_GeometryN(geometry,integer) RETURNS geometry AS '@MODULE_FILENAME@', 'LWGEOM_geometryn_collection' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict); ------------------------------------------------------------------------------- -- 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 ------------------------------------------------------------------------------- -- PostGIS equivalent function: Equals(geometry,geometry) CREATEFUNCTION ST_Equals(geometry,geometry) RETURNS boolean AS '@MODULE_FILENAME@','geomequals' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: disjoint(geometry,geometry) CREATEFUNCTION ST_Disjoint(geometry,geometry) RETURNS boolean AS '@MODULE_FILENAME@','disjoint' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: touches(geometry,geometry) CREATEFUNCTION ST_Touches(geometry,geometry) RETURNS boolean AS '@MODULE_FILENAME@','touches' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: within(geometry,geometry) CREATEFUNCTION ST_Within(geometry,geometry) RETURNS boolean AS '@MODULE_FILENAME@','within' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: overlaps(geometry,geometry) CREATEFUNCTION ST_Overlaps(geometry,geometry) RETURNS boolean AS '@MODULE_FILENAME@','overlaps' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: crosses(geometry,geometry) CREATEFUNCTION ST_Crosses(geometry,geometry) RETURNS boolean AS '@MODULE_FILENAME@','crosses' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: intersects(geometry,geometry) CREATEFUNCTION ST_Intersects(geometry,geometry) RETURNS boolean AS '@MODULE_FILENAME@','intersects' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: contains(geometry,geometry) CREATEFUNCTION ST_Contains(geometry,geometry) RETURNS boolean AS '@MODULE_FILENAME@','contains' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: none CREATEFUNCTION SE_EnvelopesIntersect(geometry,geometry) RETURNS boolean AS ' SELECT $1 && $2 ' LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: relate(geometry,geometry,text) CREATEFUNCTION ST_Relate(geometry,geometry,text) RETURNS boolean AS '@MODULE_FILENAME@','relate_pattern' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions for distance relationships ------------------------------------------------------------------------------- -- PostGIS equivalent function: distance(geometry,geometry) CREATEFUNCTION ST_Distance(geometry,geometry) RETURNS float8 AS '@MODULE_FILENAME@', 'LWGEOM_mindistance2d' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); ------------------------------------------------------------------------------- -- SQL/MM (ArcSDE subset) - SQL Functions that implement spatial operators ------------------------------------------------------------------------------- -- PostGIS equivalent function: intersection(geometry,geometry) CREATEFUNCTION ST_Intersection(geometry,geometry) RETURNS geometry AS '@MODULE_FILENAME@','intersection' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: difference(geometry,geometry) CREATEFUNCTION ST_Difference(geometry,geometry) RETURNS geometry AS '@MODULE_FILENAME@','difference' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: GeomUnion(geometry,geometry) CREATEFUNCTION ST_Union(geometry,geometry) RETURNS geometry AS '@MODULE_FILENAME@','geomunion' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: symdifference(geometry,geometry) CREATEFUNCTION ST_SymDifference(geometry,geometry) RETURNS geometry AS '@MODULE_FILENAME@','symdifference' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: buffer(geometry,float8) CREATEFUNCTION ST_Buffer(geometry,float8) RETURNS geometry AS '@MODULE_FILENAME@','buffer' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: convexhull(geometry) CREATEFUNCTION ST_ConvexHull(geometry) RETURNS geometry AS '@MODULE_FILENAME@','convexhull' LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); -- PostGIS equivalent function: locate_along_measure(geometry, float8) CREATEFUNCTION 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) CREATEFUNCTION SE_LocateBetween(geometry, float8, float8) RETURNS geometry AS '@MODULE_FILENAME@', 'LWGEOM_locate_between_m' LANGUAGE 'C' _IMMUTABLE_STRICT; ------------------------------------------------------------------------------- -- END -------------------------------------------------------------------------------