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

◆ LWGEOM_force_multi()

Datum LWGEOM_force_multi ( PG_FUNCTION_ARGS  )

Definition at line 505 of file lwgeom_functions_basic.c.

506{
507 GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
508 GSERIALIZED *result;
509 LWGEOM *lwgeom;
510 LWGEOM *ogeom;
511
512 POSTGIS_DEBUG(2, "LWGEOM_force_multi called");
513
514 /*
515 ** This funx is a no-op only if a bbox cache is already present
516 ** in input. If bbox cache is not there we'll need to handle
517 ** automatic bbox addition FOR_COMPLEX_GEOMS.
518 */
519 if (gserialized_has_bbox(geom))
520 {
521 switch (gserialized_get_type(geom))
522 {
523 case MULTIPOINTTYPE:
524 case MULTILINETYPE:
525 case MULTIPOLYGONTYPE:
526 case COLLECTIONTYPE:
527 case MULTICURVETYPE:
528 case MULTISURFACETYPE:
529 case TINTYPE:
530 PG_RETURN_POINTER(geom);
531 default:
532 break;
533 }
534 }
535
536 /* deserialize into lwgeoms[0] */
537 lwgeom = lwgeom_from_gserialized(geom);
538 ogeom = lwgeom_as_multi(lwgeom);
539
540 result = geometry_serialize(ogeom);
541
542 PG_FREE_IF_COPY(geom, 0);
543
544 PG_RETURN_POINTER(result);
545}
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,...
Definition gserialized.c:89
#define COLLECTIONTYPE
Definition liblwgeom.h:122
LWGEOM * lwgeom_as_multi(const LWGEOM *lwgeom)
Create a new LWGEOM of the appropriate MULTI* type.
Definition lwgeom.c:362
#define MULTILINETYPE
Definition liblwgeom.h:120
#define MULTISURFACETYPE
Definition liblwgeom.h:127
#define MULTIPOINTTYPE
Definition liblwgeom.h:119
#define TINTYPE
Definition liblwgeom.h:130
#define MULTIPOLYGONTYPE
Definition liblwgeom.h:121
#define MULTICURVETYPE
Definition liblwgeom.h:126
GSERIALIZED * geometry_serialize(LWGEOM *lwgeom)

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

Here is the call graph for this function: