]> granicus.if.org Git - postgis/commitdiff
Ensure ST_Centroid always returns POINT (#2109)
authorSandro Santilli <strk@keybit.net>
Thu, 29 Nov 2012 17:49:27 +0000 (17:49 +0000)
committerSandro Santilli <strk@keybit.net>
Thu, 29 Nov 2012 17:49:27 +0000 (17:49 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@10751 b70326c6-7e19-0410-871a-916f4a2858ee

postgis/lwgeom_geos.c
regress/tickets.sql
regress/tickets_expected

index cd31cf64309502161f236e659e7dd78be768359f..333fadaf16c78562901fd5fb006d7b4e4daeb494 100644 (file)
@@ -1548,14 +1548,19 @@ Datum pointonsurface(PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1(centroid);
 Datum centroid(PG_FUNCTION_ARGS)
 {
+       LWGEOM *lwg;
        GSERIALIZED *geom, *result;
        GEOSGeometry *geosgeom, *geosresult;
 
        geom = (GSERIALIZED *)  PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
 
-       /* Empty.Centroid() == Empty */
+       /* Empty.Centroid() == Point Empty */
        if ( gserialized_is_empty(geom) )
-               PG_RETURN_POINTER(geom);
+       {
+               lwg = lwpoint_construct_empty(gserialized_get_srid(geom), gserialized_has_z(geom), gserialized_has_m(geom));
+               result = geometry_serialize(lwpoint_as_lwgeom(lwg));
+               PG_RETURN_POINTER(result);
+       }
 
        initGEOS(lwnotice, lwgeom_geos_error);
 
index d9bf56c0b9cfa1f6e19fa08a8907218a37d262df..9c2d112d5cf682c13994339af0cd12e0fa23cdb8 100644 (file)
@@ -346,8 +346,9 @@ SELECT '#682', ST_Buffer(ST_GeomFromText('POLYGON EMPTY',4326) , 0.5);
 -- #683 --
 SELECT '#683', ST_BuildArea(ST_GeomFromText('POINT EMPTY',4326));
 
--- #684 --
-SELECT '#684', ST_Centroid(ST_GeomFromText('POLYGON EMPTY',4326));
+-- #684,#2109 --
+SELECT '#684,#2109', ST_AsEWKT(ST_Centroid(ST_GeomFromText('POLYGON EMPTY',4326)));
+SELECT '#2109', ST_AsEWKT(ST_Centroid(ST_GeomFromText('MULTILINESTRING ZM EMPTY',3395)));
 
 -- #685 --
 SELECT '#685', ST_ConvexHull(ST_GeomFromText('POLYGON EMPTY',4326));
index 387c95abeaf803eeed0bf4a2c390462a54e4dbbe..b798bcb03a6d23e3615e24a3bd60fe66d614c0a2 100644 (file)
@@ -107,7 +107,8 @@ NOTICE:  IllegalArgumentException: Invalid number of points in LinearRing found
 #681g|
 #682|0103000020E610000000000000
 #683|0103000020E610000000000000
-#684|0103000020E610000000000000
+#684,#2109|SRID=4326;POINT EMPTY
+#2109|SRID=3395;POINT EMPTY
 #685|0103000020E610000000000000
 #686|0107000020E610000000000000
 #687|f