PostGIS  3.7.0dev-r@@SVN_REVISION@@

◆ lwcollection_make_geos_friendly()

LWGEOM * lwcollection_make_geos_friendly ( LWCOLLECTION g)

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

241 {
242  LWGEOM** new_geoms;
243  uint32_t i, new_ngeoms = 0;
244  LWCOLLECTION* ret;
245 
246  if ( ! g->ngeoms ) {
247  LWDEBUG(3, "lwcollection_make_geos_friendly: returning input untouched");
248  return lwcollection_as_lwgeom(g);
249  }
250 
251  /* enough space for all components */
252  new_geoms = lwalloc(sizeof(LWGEOM*) * g->ngeoms);
253 
254  ret = lwalloc(sizeof(LWCOLLECTION));
255  memcpy(ret, g, sizeof(LWCOLLECTION));
256  ret->maxgeoms = g->ngeoms;
257 
258  for (i = 0; i < g->ngeoms; i++)
259  {
260  LWGEOM* newg = lwgeom_make_geos_friendly(g->geoms[i]);
261  if (!newg) continue;
262  if ( newg != g->geoms[i] ) {
263  new_geoms[new_ngeoms++] = newg;
264  } else {
265  new_geoms[new_ngeoms++] = lwgeom_clone(newg);
266  }
267  }
268 
269  ret->bbox = NULL; /* recompute later... */
270 
271  ret->ngeoms = new_ngeoms;
272  if (new_ngeoms)
273  ret->geoms = new_geoms;
274  else
275  {
276  free(new_geoms);
277  ret->geoms = NULL;
278  ret->maxgeoms = 0;
279  }
280 
281  return (LWGEOM*)ret;
282 }
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:101
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: