示例#1
0
// 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;
}
示例#2
0
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;
}