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

◆ LWGEOM_force_multi()

Datum LWGEOM_force_multi ( PG_FUNCTION_ARGS  )

Definition at line 511 of file lwgeom_functions_basic.c.

512{
513 GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
515 LWGEOM *lwgeom;
516 LWGEOM *ogeom;
517
518 POSTGIS_DEBUG(2, "LWGEOM_force_multi called");
519
520 /*
521 ** This funx is a no-op only if a bbox cache is already present
522 ** in input. If bbox cache is not there we'll need to handle
523 ** automatic bbox addition FOR_COMPLEX_GEOMS.
524 */
525 if (gserialized_has_bbox(geom))
526 {
527 switch (gserialized_get_type(geom))
528 {
529 case MULTIPOINTTYPE:
530 case MULTILINETYPE:
531 case MULTIPOLYGONTYPE:
532 case COLLECTIONTYPE:
533 case MULTICURVETYPE:
534 case MULTISURFACETYPE:
535 case TINTYPE:
536 PG_RETURN_POINTER(geom);
537 default:
538 break;
539 }
540 }
541
542 /* deserialize into lwgeoms[0] */
543 lwgeom = lwgeom_from_gserialized(geom);
544 ogeom = lwgeom_as_multi(lwgeom);
545
546 result = geometry_serialize(ogeom);
547
548 PG_FREE_IF_COPY(geom, 0);
549
550 PG_RETURN_POINTER(result);
551}
char result[OUT_DOUBLE_BUFFER_SIZE]
Definition cu_print.c:267
int gserialized_has_bbox(const GSERIALIZED *g)
Check if a GSERIALIZED has a bounding box without deserializing first.
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
uint32_t gserialized_get_type(const GSERIALIZED *g)
Extract the geometry type from the serialized form (it hides in the anonymous data area,...
#define COLLECTIONTYPE
Definition liblwgeom.h:108
LWGEOM * lwgeom_as_multi(const LWGEOM *lwgeom)
Create a new LWGEOM of the appropriate MULTI* type.
Definition lwgeom.c:408
#define MULTILINETYPE
Definition liblwgeom.h:106
#define MULTISURFACETYPE
Definition liblwgeom.h:113
#define MULTIPOINTTYPE
Definition liblwgeom.h:105
#define TINTYPE
Definition liblwgeom.h:116
#define MULTIPOLYGONTYPE
Definition liblwgeom.h:107
#define MULTICURVETYPE
Definition liblwgeom.h:112

References COLLECTIONTYPE, gserialized_get_type(), gserialized_has_bbox(), lwgeom_as_multi(), lwgeom_from_gserialized(), MULTICURVETYPE, MULTILINETYPE, MULTIPOINTTYPE, MULTIPOLYGONTYPE, MULTISURFACETYPE, result, and TINTYPE.

Here is the call graph for this function: