Attempts to make an invalid geometries valid w/out losing points.
902 GEOSGeometry* geosout;
905 LWDEBUG(1,
"lwgeom_make_valid enter");
917 if (!lwgeom_out)
lwerror(
"Could not make a geos friendly geometry out of input");
919 LWDEBUGF(4,
"Input geom %p made GEOS-valid as %p", lwgeom_in, lwgeom_out);
922 if ( lwgeom_in != lwgeom_out ) {
932 LWDEBUG(4,
"geom converted to GEOS");
935 #if POSTGIS_GEOS_VERSION < 38
936 geosout = LWGEOM_GEOS_makeValid(geosgeom);
938 geosout = GEOSMakeValid(geosgeom);
940 GEOSGeom_destroy(geosgeom);
941 if (!geosout)
return NULL;
944 GEOSGeom_destroy(geosout);
950 LWDEBUG(3,
"lwgeom_make_valid: forcing multi");
953 assert(lwgeom_in != lwgeom_out);
954 ogeoms[0] = lwgeom_out;
957 lwgeom_out->
bbox = NULL;
961 lwgeom_out->
srid = lwgeom_in->srid;
char lwgeom_geos_errmsg[LWGEOM_GEOS_ERRMSG_MAXSIZE]
GEOSGeometry * LWGEOM2GEOS(const LWGEOM *lwgeom, uint8_t autofix)
LWGEOM * GEOS2LWGEOM(const GEOSGeometry *geom, uint8_t want3d)
void lwgeom_geos_error(const char *fmt,...)
static LWGEOM * lwgeom_make_geos_friendly(LWGEOM *geom)
void lwgeom_free(LWGEOM *geom)
#define FLAGS_GET_Z(flags)
int lwgeom_is_collection(const LWGEOM *lwgeom)
Determine whether a LWGEOM can contain sub-geometries or not.
void * lwalloc(size_t size)
LWCOLLECTION * lwcollection_construct(uint8_t type, int32_t srid, GBOX *bbox, uint32_t ngeoms, LWGEOM **geoms)
uint8_t MULTITYPE[NUMTYPES]
Look-up for the correct MULTI* type promotion for singleton types.
#define LWDEBUG(level, msg)
#define LWDEBUGF(level, msg,...)
void lwerror(const char *fmt,...)
Write a notice out to the error handler.