PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ 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 {
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 * lwgeom_clone(const LWGEOM *lwgeom)
Clone LWGEOM object.
Definition lwgeom.c:519
void * lwalloc(size_t size)
Definition lwutil.c:227
LWGEOM * lwcollection_as_lwgeom(const LWCOLLECTION *obj)
Definition lwgeom.c:337
#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: