From 092fb61dc4090e23b9709cb0fdf4d787e0a40cd3 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Mon, 6 Sep 2004 12:24:17 +0000 Subject: [PATCH] Added IsEmpty() git-svn-id: http://svn.osgeo.org/postgis/trunk@770 b70326c6-7e19-0410-871a-916f4a2858ee --- lwgeom/MISSING_OBJECTS | 9 ++++----- lwgeom/lwgeom_functions_basic.c | 11 +++++++++++ lwgeom/lwgeom_inout.c | 2 +- lwgeom/lwpostgis.sql.in | 5 +++++ 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/lwgeom/MISSING_OBJECTS b/lwgeom/MISSING_OBJECTS index 0c6bd4556..586eb232c 100644 --- a/lwgeom/MISSING_OBJECTS +++ b/lwgeom/MISSING_OBJECTS @@ -3,19 +3,16 @@ FNCAST: KEEPING FNCAST geometry(text) (see CAST) FUNC: KEEPING FUNCTION: [line_interpolate_point(geometry, double precision)] FUNC: KEEPING FUNCTION: [simplify(geometry, double precision)] +FUNC: KEEPING FUNCTION: [segmentize(geometry, double precision)] FUNC: KEEPING FUNCTION: [asbinary(geometry)] FUNC: KEEPING FUNCTION: [asbinary(geometry, text)] -FUNC: KEEPING FUNCTION: [boundary(geometry)] -FUNC: KEEPING FUNCTION: [equals(geometry, geometry)] -FUNC: KEEPING FUNCTION: [isempty(geometry)] -FUNC: KEEPING FUNCTION: [segmentize(geometry, double precision)] -FUNC: KEEPING FUNCTION: [unite_garray(geometry[])] --- OBSOLETED ? FUNC: KEEPING FUNCTION: [geometry_size(geometry, internal)] FUNC: KEEPING FUNCTION: [optimistic_overlap(geometry, geometry, double precision)] --- GEOS +FUNC: KEEPING FUNCTION: [unite_garray(geometry[])] FUNC: KEEPING FUNCTION: [centroid(geometry)] (Also !GEOS implementation) AGGREGATE: KEEPING AGGREGATE [memgeomunion(geometry)] AGGREGATE: KEEPING AGGREGATE [geomunion(geometry)] @@ -40,6 +37,8 @@ FUNC: KEEPING FUNCTION: [geomunion(geometry, geometry)] FUNC: KEEPING FUNCTION: [geosnoop(geometry)] FUNC: KEEPING FUNCTION: [intersection(geometry, geometry)] FUNC: KEEPING FUNCTION: [intersects(geometry, geometry)] +FUNC: KEEPING FUNCTION: [equals(geometry, geometry)] +FUNC: KEEPING FUNCTION: [boundary(geometry)] --- CHIP FUNC: KEEPING FUNCTION: [chip_in(cstring)] diff --git a/lwgeom/lwgeom_functions_basic.c b/lwgeom/lwgeom_functions_basic.c index 32930638f..edfa8531e 100644 --- a/lwgeom/lwgeom_functions_basic.c +++ b/lwgeom/lwgeom_functions_basic.c @@ -40,6 +40,7 @@ Datum LWGEOM_collect_garray(PG_FUNCTION_ARGS); Datum LWGEOM_expand(PG_FUNCTION_ARGS); Datum LWGEOM_to_BOX(PG_FUNCTION_ARGS); Datum LWGEOM_envelope(PG_FUNCTION_ARGS); +Datum LWGEOM_isempty(PG_FUNCTION_ARGS); // internal char * lwgeom_summary_recursive(char *serialized, int offset); @@ -2336,3 +2337,13 @@ Datum LWGEOM_envelope(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } + +PG_FUNCTION_INFO_V1(LWGEOM_isempty); +Datum LWGEOM_isempty(PG_FUNCTION_ARGS) +{ + LWGEOM *geom = (LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + + if ( lwgeom_getnumgeometries(SERIALIZED_FORM(geom)) == 0 ) + PG_RETURN_BOOL(TRUE); + PG_RETURN_BOOL(FALSE); +} diff --git a/lwgeom/lwgeom_inout.c b/lwgeom/lwgeom_inout.c index ac542cba5..053fe2fab 100644 --- a/lwgeom/lwgeom_inout.c +++ b/lwgeom/lwgeom_inout.c @@ -189,7 +189,7 @@ Datum WKBFromLWGEOM(PG_FUNCTION_ARGS) char *lwgeom_input = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); // SRID=#; - char *hexized_wkb_srid =unparse_WKB(lwgeom_input,palloc_fn,free_fn); + char *hexized_wkb_srid = unparse_WKB(lwgeom_input,palloc_fn,free_fn); char *hexized_wkb; // hexized_wkb_srid w/o srid char *result; //wkb diff --git a/lwgeom/lwpostgis.sql.in b/lwgeom/lwpostgis.sql.in index c32396c3f..7d80bae14 100644 --- a/lwgeom/lwpostgis.sql.in +++ b/lwgeom/lwpostgis.sql.in @@ -968,6 +968,11 @@ CREATEFUNCTION IsClosed(geometry) AS '@MODULE_FILENAME@', 'LWGEOM_isclosed_linestring' LANGUAGE 'C' WITH (isstrict); +CREATEFUNCTION IsEmpty(geometry) + RETURNS boolean + AS '@MODULE_FILENAME@', 'LWGEOM_isempty' + LANGUAGE 'C' WITH (isstrict); + CREATEFUNCTION SRID(geometry) RETURNS int4 AS '@MODULE_FILENAME@','LWGEOM_getSRID' -- 2.40.0