PostGIS  3.1.6dev-r@@SVN_REVISION@@

◆ lwcollection_make_geos_friendly()

LWGEOM * lwcollection_make_geos_friendly ( LWCOLLECTION g)

Definition at line 319 of file liblwgeom/lwgeom_geos_clean.c.

320 {
321  LWGEOM** new_geoms;
322  uint32_t i, new_ngeoms = 0;
323  LWCOLLECTION* ret;
324 
325  if ( ! g->ngeoms ) {
326  LWDEBUG(3, "lwcollection_make_geos_friendly: returning input untouched");
327  return lwcollection_as_lwgeom(g);
328  }
329 
330  /* enough space for all components */
331  new_geoms = lwalloc(sizeof(LWGEOM*) * g->ngeoms);
332 
333  ret = lwalloc(sizeof(LWCOLLECTION));
334  memcpy(ret, g, sizeof(LWCOLLECTION));
335  ret->maxgeoms = g->ngeoms;
336 
337  for (i = 0; i < g->ngeoms; i++)
338  {
339  LWGEOM* newg = lwgeom_make_geos_friendly(g->geoms[i]);
340  if (!newg) continue;
341  if ( newg != g->geoms[i] ) {
342  new_geoms[new_ngeoms++] = newg;
343  } else {
344  new_geoms[new_ngeoms++] = lwgeom_clone(newg);
345  }
346  }
347 
348  ret->bbox = NULL; /* recompute later... */
349 
350  ret->ngeoms = new_ngeoms;
351  if (new_ngeoms)
352  ret->geoms = new_geoms;
353  else
354  {
355  free(new_geoms);
356  ret->geoms = NULL;
357  ret->maxgeoms = 0;
358  }
359 
360  return (LWGEOM*)ret;
361 }
static LWGEOM * lwgeom_make_geos_friendly(LWGEOM *geom)
LWGEOM * lwcollection_as_lwgeom(const LWCOLLECTION *obj)
Definition: lwgeom.c:292
LWGEOM * lwgeom_clone(const LWGEOM *lwgeom)
Clone LWGEOM object.
Definition: lwgeom.c:474
void * lwalloc(size_t size)
Definition: lwutil.c:227
#define LWDEBUG(level, msg)
Definition: lwgeom_log.h:83
void free(void *)
uint32_t ngeoms
Definition: liblwgeom.h:594
uint32_t maxgeoms
Definition: liblwgeom.h:595
GBOX * bbox
Definition: liblwgeom.h:588
LWGEOM ** geoms
Definition: liblwgeom.h:589

References LWCOLLECTION::bbox, free(), LWCOLLECTION::geoms, lwalloc(), lwcollection_as_lwgeom(), LWDEBUG, lwgeom_clone(), lwgeom_make_geos_friendly(), LWCOLLECTION::maxgeoms, and LWCOLLECTION::ngeoms.

Referenced by lwgeom_make_geos_friendly().

Here is the call graph for this function:
Here is the caller graph for this function: