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

◆ lwcollection_split()

static LWGEOM * lwcollection_split ( const LWCOLLECTION lwcoll_in,
const LWGEOM blade_in 
)
static

Definition at line 494 of file lwgeom_geos_split.c.

495{
496 LWGEOM** split_vector=NULL;
497 LWCOLLECTION* out;
498 size_t split_vector_capacity;
499 size_t split_vector_size=0;
500 size_t i,j;
501
502 split_vector_capacity=8;
503 split_vector = lwalloc(split_vector_capacity * sizeof(LWGEOM*));
504 if ( ! split_vector )
505 {
506 lwerror("Out of virtual memory");
507 return NULL;
508 }
509
510 for (i=0; i<lwcoll_in->ngeoms; ++i)
511 {
512 LWCOLLECTION* col;
513 LWGEOM* split = lwgeom_split(lwcoll_in->geoms[i], blade_in);
514 /* an exception should prevent this from ever returning NULL */
515 if ( ! split ) return NULL;
516
517 col = lwgeom_as_lwcollection(split);
518 /* Output, if any, will always be a collection */
519 assert(col);
520
521 /* Reallocate split_vector if needed */
522 if ( split_vector_size + col->ngeoms > split_vector_capacity )
523 {
524 /* NOTE: we could be smarter on reallocations here */
525 split_vector_capacity += col->ngeoms;
526 split_vector = lwrealloc(split_vector,
527 split_vector_capacity * sizeof(LWGEOM*));
528 if ( ! split_vector )
529 {
530 lwerror("Out of virtual memory");
531 return NULL;
532 }
533 }
534
535 for (j=0; j<col->ngeoms; ++j)
536 {
537 col->geoms[j]->srid = SRID_UNKNOWN; /* strip srid */
538 split_vector[split_vector_size++] = col->geoms[j];
539 }
540 lwfree(col->geoms);
541 lwfree(col);
542 }
543
544 /* Now split_vector has split_vector_size geometries */
546 NULL, split_vector_size, split_vector);
547
548 return (LWGEOM*)out;
549}
LWCOLLECTION * lwcollection_construct(uint8_t type, int32_t srid, GBOX *bbox, uint32_t ngeoms, LWGEOM **geoms)
#define COLLECTIONTYPE
Definition liblwgeom.h:108
void * lwrealloc(void *mem, size_t size)
Definition lwutil.c:242
LWCOLLECTION * lwgeom_as_lwcollection(const LWGEOM *lwgeom)
Definition lwgeom.c:261
void * lwalloc(size_t size)
Definition lwutil.c:227
void lwfree(void *mem)
Definition lwutil.c:248
#define SRID_UNKNOWN
Unknown SRID value.
Definition liblwgeom.h:215
LWGEOM * lwgeom_split(const LWGEOM *lwgeom_in, const LWGEOM *blade_in)
void void lwerror(const char *fmt,...) __attribute__((format(printf
Write a notice out to the error handler.
uint32_t ngeoms
Definition liblwgeom.h:580
LWGEOM ** geoms
Definition liblwgeom.h:575
int32_t srid
Definition liblwgeom.h:576
int32_t srid
Definition liblwgeom.h:460

References COLLECTIONTYPE, LWCOLLECTION::geoms, lwalloc(), lwcollection_construct(), lwerror(), lwfree(), lwgeom_as_lwcollection(), lwgeom_split(), lwrealloc(), LWCOLLECTION::ngeoms, LWGEOM::srid, LWCOLLECTION::srid, and SRID_UNKNOWN.

Referenced by lwgeom_split().

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