PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ ST_MakeValid()

Datum ST_MakeValid ( PG_FUNCTION_ARGS  )

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

45 {
46  GSERIALIZED *in, *out;
47  LWGEOM *lwgeom_in, *lwgeom_out;
48 
49  in = PG_GETARG_GSERIALIZED_P_COPY(0);
50  lwgeom_in = lwgeom_from_gserialized(in);
51 
52  switch ( lwgeom_in->type )
53  {
54  case POINTTYPE:
55  case MULTIPOINTTYPE:
56  case LINETYPE:
57  case POLYGONTYPE:
58  case MULTILINETYPE:
59  case MULTIPOLYGONTYPE:
60  case COLLECTIONTYPE:
61  break;
62 
63  default:
64  lwpgerror("ST_MakeValid: unsupported geometry type %s",
65  lwtype_name(lwgeom_in->type));
66  PG_RETURN_NULL();
67  break;
68  }
69 
70  if(PG_NARGS() > 1 && ! PG_ARGISNULL(1)) {
71  char *make_valid_params_str = text_to_cstring(PG_GETARG_TEXT_P(1));
72  lwgeom_out = lwgeom_make_valid_params(lwgeom_in, make_valid_params_str);
73  }
74  else {
75  lwgeom_out = lwgeom_make_valid(lwgeom_in);
76  }
77 
78  if ( ! lwgeom_out )
79  {
80  PG_FREE_IF_COPY(in, 0);
81  PG_RETURN_NULL();
82  }
83 
84  out = geometry_serialize(lwgeom_out);
85  if ( lwgeom_out != lwgeom_in ) {
86  lwgeom_free(lwgeom_out);
87  }
88  PG_FREE_IF_COPY(in, 0);
89 
90  PG_RETURN_POINTER(out);
91 }
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
Definition: gserialized.c:239
#define COLLECTIONTYPE
Definition: liblwgeom.h:108
LWGEOM * lwgeom_make_valid_params(LWGEOM *geom, char *make_valid_params)
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1155
#define MULTILINETYPE
Definition: liblwgeom.h:106
#define LINETYPE
Definition: liblwgeom.h:103
#define MULTIPOINTTYPE
Definition: liblwgeom.h:105
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:102
#define MULTIPOLYGONTYPE
Definition: liblwgeom.h:107
#define POLYGONTYPE
Definition: liblwgeom.h:104
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:462

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

Here is the call graph for this function: