// Need NO or >1 points. Duplicate first if only one. static bool lwline_make_geos_friendly( QgsLineString &line ) { if ( line.numPoints() == 1 ) // 0 is fine, 2 is fine { line.addVertex( line.startPoint() ); } return true; }
static bool ring_make_geos_friendly( QgsCurve *ring ) { if ( ring->nCoordinates() == 0 ) return false; // earlier we allowed in only geometries with straight segments QgsLineString *linestring = qgsgeometry_cast<QgsLineString *>( ring ); // close the ring if not already closed (2d only) QgsPoint p1 = linestring->startPoint(), p2 = linestring->endPoint(); if ( p1.x() != p2.x() || p1.y() != p2.y() ) linestring->addVertex( p1 ); // must have at least 4 coordinates to be accepted by GEOS while ( linestring->nCoordinates() < 4 ) linestring->addVertex( p1 ); return true; }