GSERIALIZED *input = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
GSERIALIZED *output;
LWGEOM *lwgeom = lwgeom_from_gserialized(input);
- LWCOLLECTION *lwcol = NULL;
+ LWGEOM *lwcol = NULL;
int type = PG_GETARG_INT32(1);
int lwgeom_type = lwgeom->type;
/* Mirror non-collections right back */
if ( ! lwgeom_is_collection(lwgeom) )
{
- lwgeom_free(lwgeom);
/* Non-collections of the matching type go back */
if(lwgeom_type == type)
{
+ lwgeom_free(lwgeom);
PG_RETURN_POINTER(input);
}
- /* Others go back as NULL */
+ /* Others go back as EMPTY */
else
{
- PG_RETURN_NULL();
+ lwcol = lwgeom_construct_empty(type, lwgeom->srid, FLAGS_GET_Z(lwgeom->flags), FLAGS_GET_M(lwgeom->flags));
}
}
+ else
+ {
+ lwcol = lwcollection_as_lwgeom(lwcollection_extract((LWCOLLECTION*)lwgeom, type));
+ }
- lwcol = lwcollection_extract((LWCOLLECTION*)lwgeom, type);
+#if 0
if (lwgeom_is_empty(lwcollection_as_lwgeom(lwcol)))
{
lwgeom_free(lwgeom);
PG_RETURN_NULL();
}
-
+#endif
output = geometry_serialize((LWGEOM*)lwcol);
lwgeom_free(lwgeom);
+ lwgeom_free(lwcol);
PG_RETURN_POINTER(output);
}
156|MULTIPOINT(1 1)
157|MULTILINESTRING((0 0,1 1))
158|MULTILINESTRING((0 0,1 1),(2 2,3 3))
-159|
+159|MULTIPOLYGON EMPTY
160|MULTIPOINT(1 1)
161|MULTILINESTRING((0 0,1 1),(2 2,3 3))
ERROR: Input geometries must be points
#408.3|f
#408.4|IllegalArgumentException: Invalid number of points in LinearRing found 2 - must be 0 or >= 4
#457.1|POINT(0 0)
-#457.2|
-#457.3|
-#457.4|
+#457.2|LINESTRING EMPTY
+#457.3|POLYGON EMPTY
+#457.4|POINT EMPTY
#457.5|LINESTRING(0 0,1 1)
-#457.6|
-#457.7|
-#457.8|
+#457.6|POLYGON EMPTY
+#457.7|POINT EMPTY
+#457.8|LINESTRING EMPTY
#457.9|POLYGON((0 0,1 0,1 1,0 1,0 0))
-#835.1|
-#835.2|
+#835.1|POINT EMPTY
+#835.2|LINESTRING EMPTY
#835.3|POLYGON EMPTY
-#835.4|
+#835.4|POINT EMPTY
#835.5|LINESTRING EMPTY
-#835.6|
+#835.6|POLYGON EMPTY
#835.7|POINT EMPTY
-#835.8|
-#835.9|
-#835.10|
-#835.11|
-#835.12|
+#835.8|LINESTRING EMPTY
+#835.9|POLYGON EMPTY
+#835.10|MULTIPOINT EMPTY
+#835.11|MULTILINESTRING EMPTY
+#835.12|MULTIPOLYGON EMPTY
#650|MULTIPOINT(0 0,1 1,2 2)
#667|SRID=4326;CURVEPOLYGON(CIRCULARSTRING(30 40,18.2842712474619 11.7157287525381,-9.99999999999994 0,-38.284271247462 68.2842712474618,30 40))
#677|1121395