PostGIS  3.1.6dev-r@@SVN_REVISION@@

◆ ST_MakeValid()

Datum ST_MakeValid ( PG_FUNCTION_ARGS  )

Definition at line 43 of file postgis/lwgeom_geos_clean.c.

44 {
45  GSERIALIZED *in, *out;
46  LWGEOM *lwgeom_in, *lwgeom_out;
47 
48  in = PG_GETARG_GSERIALIZED_P_COPY(0);
49  lwgeom_in = lwgeom_from_gserialized(in);
50 
51  POSTGIS_DEBUG(1, "ST_MakeValid enter");
52 
53  switch ( lwgeom_in->type )
54  {
55  case POINTTYPE:
56  case MULTIPOINTTYPE:
57  case LINETYPE:
58  case POLYGONTYPE:
59  case MULTILINETYPE:
60  case MULTIPOLYGONTYPE:
61  case COLLECTIONTYPE:
62  break;
63 
64  default:
65  lwpgerror("ST_MakeValid: unsupported geometry type %s",
66  lwtype_name(lwgeom_in->type));
67  PG_RETURN_NULL();
68  break;
69  }
70 
71  lwgeom_out = lwgeom_make_valid(lwgeom_in);
72  if ( ! lwgeom_out )
73  {
74  PG_FREE_IF_COPY(in, 0);
75  PG_RETURN_NULL();
76  }
77 
78  out = geometry_serialize(lwgeom_out);
79 
80  PG_RETURN_POINTER(out);
81 }
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
Definition: gserialized.c:239
#define COLLECTIONTYPE
Definition: liblwgeom.h:122
#define MULTILINETYPE
Definition: liblwgeom.h:120
#define LINETYPE
Definition: liblwgeom.h:117
#define MULTIPOINTTYPE
Definition: liblwgeom.h:119
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:116
#define MULTIPOLYGONTYPE
Definition: liblwgeom.h:121
#define POLYGONTYPE
Definition: liblwgeom.h:118
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:216
LWGEOM * lwgeom_make_valid(LWGEOM *geom)
Attempts to make an invalid geometries valid w/out losing points.
uint8_t type
Definition: liblwgeom.h:476

References COLLECTIONTYPE, LINETYPE, lwgeom_from_gserialized(), lwgeom_make_valid(), lwtype_name(), MULTILINETYPE, MULTIPOINTTYPE, MULTIPOLYGONTYPE, POINTTYPE, POLYGONTYPE, and LWGEOM::type.

Here is the call graph for this function: