PostGIS  2.4.9dev-r@@SVN_REVISION@@

◆ lwpoly_from_lwlines()

LWPOLY* lwpoly_from_lwlines ( const LWLINE shell,
uint32_t  nholes,
const LWLINE **  holes 
)

Definition at line 368 of file lwpoly.c.

References lwalloc(), lwerror(), lwpoly_construct(), POINTARRAY::npoints, LWLINE::points, ptarray_clone_deep(), ptarray_is_closed_2d(), and LWLINE::srid.

Referenced by lwgeom_force_sfs(), and LWGEOM_makepoly().

370 {
371  uint32_t nrings;
372  POINTARRAY **rings = lwalloc((nholes+1)*sizeof(POINTARRAY *));
373  int srid = shell->srid;
374  LWPOLY *ret;
375 
376  if ( shell->points->npoints < 4 )
377  lwerror("lwpoly_from_lwlines: shell must have at least 4 points");
378  if ( ! ptarray_is_closed_2d(shell->points) )
379  lwerror("lwpoly_from_lwlines: shell must be closed");
380  rings[0] = ptarray_clone_deep(shell->points);
381 
382  for (nrings=1; nrings<=nholes; nrings++)
383  {
384  const LWLINE *hole = holes[nrings-1];
385 
386  if ( hole->srid != srid )
387  lwerror("lwpoly_from_lwlines: mixed SRIDs in input lines");
388 
389  if ( hole->points->npoints < 4 )
390  lwerror("lwpoly_from_lwlines: holes must have at least 4 points");
391  if ( ! ptarray_is_closed_2d(hole->points) )
392  lwerror("lwpoly_from_lwlines: holes must be closed");
393 
394  rings[nrings] = ptarray_clone_deep(hole->points);
395  }
396 
397  ret = lwpoly_construct(srid, NULL, nrings, rings);
398  return ret;
399 }
int npoints
Definition: liblwgeom.h:371
int32_t srid
Definition: liblwgeom.h:421
int ptarray_is_closed_2d(const POINTARRAY *pa)
Definition: ptarray.c:697
unsigned int uint32_t
Definition: uthash.h:78
LWPOLY * lwpoly_construct(int srid, GBOX *bbox, uint32_t nrings, POINTARRAY **points)
Definition: lwpoly.c:43
POINTARRAY * ptarray_clone_deep(const POINTARRAY *ptarray)
Deep clone a pointarray (also clones serialized pointlist)
Definition: ptarray.c:630
void * lwalloc(size_t size)
Definition: lwutil.c:229
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
POINTARRAY * points
Definition: liblwgeom.h:422
Here is the call graph for this function:
Here is the caller graph for this function: