[postgis-tickets] r15966 - Fix rare missing boxes in geometry subdivision
Paul Ramsey
pramsey at cleverelephant.ca
Wed Oct 11 07:06:07 PDT 2017
Author: pramsey
Date: 2017-10-11 07:06:07 -0700 (Wed, 11 Oct 2017)
New Revision: 15966
Modified:
trunk/liblwgeom/lwgeom_geos.c
Log:
Fix rare missing boxes in geometry subdivision
Closes #3886
Modified: trunk/liblwgeom/lwgeom_geos.c
===================================================================
--- trunk/liblwgeom/lwgeom_geos.c 2017-10-11 14:05:25 UTC (rev 15965)
+++ trunk/liblwgeom/lwgeom_geos.c 2017-10-11 14:06:07 UTC (rev 15966)
@@ -262,19 +262,25 @@
if ( autofix )
{
- /* check ring for being closed and fix if not */
- if ( ! ptarray_is_closed_2d(pa) )
+ if (pa->npoints < 1)
{
- npa = ptarray_addPoint(pa, getPoint_internal(pa, 0), FLAGS_NDIMS(pa->flags), pa->npoints);
- pa = npa;
+ lwerror("ptarray_to_GEOSLinearRing called with autofix and 0 vertices in ring, cannot fix");
}
- /* TODO: check ring for having at least 4 vertices */
-#if 0
+
+ /*
+ * Check ring for being closed and fix if not.
+ * Also create a copy of geometry to operate on.
+ */
+ if ( ! ptarray_is_closed_2d(pa) || pa->npoints < 4 )
+ {
+ pa = ptarray_addPoint(pa, getPoint_internal(pa, 0), FLAGS_NDIMS(pa->flags), pa->npoints);
+ npa = pa;
+ }
+ /* Check ring for having at least 4 vertices */
while ( pa->npoints < 4 )
{
- npa = ptarray_addPoint(npa, getPoint_internal(pa, 0), FLAGS_NDIMS(pa->flags), pa->npoints);
+ ptarray_append_point(pa, getPoint_internal(pa, 0), LW_TRUE);
}
-#endif
}
sq = ptarray_to_GEOSCoordSeq(pa);
More information about the postgis-tickets
mailing list