PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ lwcollection_make_geos_friendly()

LWGEOM * lwcollection_make_geos_friendly ( LWCOLLECTION g)

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

321 {
322  LWGEOM** new_geoms;
323  uint32_t i, new_ngeoms = 0;
324  LWCOLLECTION* ret;
325 
326  if ( ! g->ngeoms ) {
327  LWDEBUG(3, "lwcollection_make_geos_friendly: returning input untouched");
328  return lwcollection_as_lwgeom(g);
329  }
330 
331  /* enough space for all components */
332  new_geoms = lwalloc(sizeof(LWGEOM*) * g->ngeoms);
333 
334  ret = lwalloc(sizeof(LWCOLLECTION));
335  memcpy(ret, g, sizeof(LWCOLLECTION));
336  ret->maxgeoms = g->ngeoms;
337 
338  for (i = 0; i < g->ngeoms; i++)
339  {
340  LWGEOM* newg = lwgeom_make_geos_friendly(g->geoms[i]);
341  if (!newg) continue;
342  if ( newg != g->geoms[i] ) {
343  new_geoms[new_ngeoms++] = newg;
344  } else {
345  new_geoms[new_ngeoms++] = lwgeom_clone(newg);
346  }
347  }
348 
349  ret->bbox = NULL; /* recompute later... */
350 
351  ret->ngeoms = new_ngeoms;
352  if (new_ngeoms)
353  ret->geoms = new_geoms;
354  else
355  {
356  free(new_geoms);
357  ret->geoms = NULL;
358  ret->maxgeoms = 0;
359  }
360 
361  return (LWGEOM*)ret;
362 }
static LWGEOM * lwgeom_make_geos_friendly(LWGEOM *geom)
LWGEOM * lwcollection_as_lwgeom(const LWCOLLECTION *obj)
Definition: lwgeom.c:309
LWGEOM * lwgeom_clone(const LWGEOM *lwgeom)
Clone LWGEOM object.
Definition: lwgeom.c:491
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:580
uint32_t maxgeoms
Definition: liblwgeom.h:581
GBOX * bbox
Definition: liblwgeom.h:574
LWGEOM ** geoms
Definition: liblwgeom.h:575

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: