From 58adce3839a48a344768e745dd8f3a8b6ae06a7e Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Mon, 16 Jan 2012 17:37:12 +0000 Subject: [PATCH] Fix 2.5d split (#745) git-svn-id: http://svn.osgeo.org/postgis/trunk@8847 b70326c6-7e19-0410-871a-916f4a2858ee --- liblwgeom/lwgeom_geos_split.c | 14 ++++++++------ regress/tickets.sql | 4 ++++ regress/tickets_expected | 1 + 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/liblwgeom/lwgeom_geos_split.c b/liblwgeom/lwgeom_geos_split.c index c0f8320af..2904e7af9 100644 --- a/liblwgeom/lwgeom_geos_split.c +++ b/liblwgeom/lwgeom_geos_split.c @@ -241,6 +241,8 @@ lwpoly_split_by_line(const LWPOLY* lwpoly_in, const LWLINE* blade_in) GEOSGeometry* polygons; const GEOSGeometry *vgeoms[1]; int i,n; + int hasZ = FLAGS_GET_Z(lwpoly_in->flags); + /* Possible outcomes: * @@ -287,12 +289,12 @@ lwpoly_split_by_line(const LWPOLY* lwpoly_in, const LWLINE* blade_in) /* debugging.. lwnotice("Bounds poly: %s", - lwgeom_to_ewkt(GEOS2LWGEOM(g1_bounds, 0))); + lwgeom_to_ewkt(GEOS2LWGEOM(g1_bounds, hasZ))); lwnotice("Line: %s", - lwgeom_to_ewkt(GEOS2LWGEOM(g2, 0))); + lwgeom_to_ewkt(GEOS2LWGEOM(g2, hasZ))); lwnotice("Noded bounds: %s", - lwgeom_to_ewkt(GEOS2LWGEOM(vgeoms[0], 0))); + lwgeom_to_ewkt(GEOS2LWGEOM(vgeoms[0], hasZ))); */ polygons = GEOSPolygonize(vgeoms, 1); @@ -324,8 +326,8 @@ lwpoly_split_by_line(const LWPOLY* lwpoly_in, const LWLINE* blade_in) * geometries and return the rest in a collection */ n = GEOSGetNumGeometries(polygons); - out = lwcollection_construct(COLLECTIONTYPE, lwpoly_in->srid, - NULL, 0, NULL); + out = lwcollection_construct_empty(COLLECTIONTYPE, lwpoly_in->srid, + hasZ, 0); /* Allocate space for all polys */ out->geoms = lwalloc(sizeof(LWGEOM*)*n); assert(0 == out->ngeoms); @@ -370,7 +372,7 @@ lwpoly_split_by_line(const LWPOLY* lwpoly_in, const LWLINE* blade_in) continue; } - out->geoms[out->ngeoms++] = GEOS2LWGEOM(p, FLAGS_GET_Z(lwpoly_in->flags)); + out->geoms[out->ngeoms++] = GEOS2LWGEOM(p, hasZ); } GEOSGeom_destroy(g1); diff --git a/regress/tickets.sql b/regress/tickets.sql index 20e6f0da1..012850c13 100644 --- a/regress/tickets.sql +++ b/regress/tickets.sql @@ -521,6 +521,10 @@ SELECT '#1414', st_astext(st_force_3dz('CURVEPOLYGON EMPTY')); -- #1478 SELECT '#1478', 'SRID=1;POINT EMPTY'::geometry::text::geometry; +-- #745 +SELECT '#745', ST_AsEWKT(ST_Split('POLYGON((-72 42 1,-70 43 1,-71 41 1,-72 42 1))', + 'LINESTRING(-10 40 1,-9 41 1)')); + -- Clean up DELETE FROM spatial_ref_sys; diff --git a/regress/tickets_expected b/regress/tickets_expected index 042646198..fd93c25d3 100644 --- a/regress/tickets_expected +++ b/regress/tickets_expected @@ -174,3 +174,4 @@ ERROR: MultiSurface cannot contain MultiPoint element #1454|t #1414|CURVEPOLYGON Z EMPTY #1478|01040000200100000000000000 +#745|GEOMETRYCOLLECTION(POLYGON((-72 42 1,-70 43 1,-71 41 1,-72 42 1))) -- 2.40.0