PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ LWGEOM_force_multi()

Datum LWGEOM_force_multi ( PG_FUNCTION_ARGS  )

Definition at line 512 of file lwgeom_functions_basic.c.

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