From: Darafei Praliaskouski Date: Mon, 22 Oct 2018 15:23:38 +0000 (+0000) Subject: ST_Subdivide: support rect hole in rect shell X-Git-Tag: 3.0.0alpha1~324 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=de8c3148c52d693242ca94c0675ec17a79332f32;p=postgis ST_Subdivide: support rect hole in rect shell Closes #4211 Closes https://github.com/postgis/postgis/pull/317 git-svn-id: http://svn.osgeo.org/postgis/trunk@16937 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/NEWS b/NEWS index c3cf3b54b..4cfadd008 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,8 @@ PostGIS 3.0.0 - #4188, Avoid division by zero in kmeans (Raúl Marín) - #4189, Fix undefined behaviour in SADFWrite (Raúl Marín) - #4191, Fix undefined behaviour in ptarray_clone_deep (Raúl Marín) + - #4211, Fix ST_Subdivide for minimal exterior ring with minimal hole (Darafei + Praliaskouski) PostGIS 2.5.0 2018/09/23 diff --git a/liblwgeom/lwgeom.c b/liblwgeom/lwgeom.c index effae3d91..f632dabb7 100644 --- a/liblwgeom/lwgeom.c +++ b/liblwgeom/lwgeom.c @@ -2294,7 +2294,7 @@ lwgeom_subdivide_recursive(const LWGEOM *geom, uint8_t dimension, uint32_t maxve lwpoly = (LWPOLY *)geom; /* if there are more points in holes than in outer ring */ - if (nvertices > 2 * lwpoly->rings[0]->npoints) + if (nvertices >= 2 * lwpoly->rings[0]->npoints) { /* trim holes starting from biggest */ for (i = 1; i < lwpoly->nrings; i++) diff --git a/regress/core/subdivide.sql b/regress/core/subdivide.sql index 1a1f774a7..c35be87e3 100644 --- a/regress/core/subdivide.sql +++ b/regress/core/subdivide.sql @@ -58,3 +58,5 @@ FROM big_polygon_sliced gs; drop table big_polygon; drop table big_polygon_sliced; + +select '#4211', (select sum(ST_Area(geom))::numeric(12,11) from ST_Subdivide('MULTIPOLYGON(((-88.2059 41.7325,-88.2060 41.7244,-88.1959 41.7241,-88.1959 41.7326,-88.2059 41.7325),(-88.1997 41.7289,-88.1996 41.7285,-88.1990 41.7285,-88.1990 41.7289,-88.1997 41.7289)))') geom ); diff --git a/regress/core/subdivide_expected b/regress/core/subdivide_expected index 1740a93a0..dc21493ad 100644 --- a/regress/core/subdivide_expected +++ b/regress/core/subdivide_expected @@ -5,3 +5,4 @@ ERROR: lwgeom_subdivide: cannot subdivide to fewer than 5 vertices per output #3522|POINT(1 1) #3744|1600000000000000 4|29321996468.6|29321996468.6|1857|256 +#4211|0.00008316000