Given a geometry, it uses GEOS operations to make sure that it's valid according to the MVT spec and that all points are snapped into int coordinates It iterates several times if needed, if it fails, returns NULL.
1022 gridspec grid = {0, 0, 0, 0, 1, 1, 0, 0};
1038 uint32_t iterations = 0;
1039 static const uint32_t max_iterations = 3;
1049 valid = GEOSisValid(geo) == 1;
1051 while (!valid && iterations < max_iterations)
1053 #if POSTGIS_GEOS_VERSION < 38
1054 GEOSGeometry *geo_valid = LWGEOM_GEOS_makeValid(geo);
1056 GEOSGeometry *geo_valid = GEOSMakeValid(geo);
1059 GEOSGeom_destroy(geo);
1064 GEOSGeom_destroy(geo_valid);
1071 valid = GEOSisValid(geo) == 1;
1074 GEOSGeom_destroy(geo);
1078 POSTGIS_DEBUG(1,
"mvt_geom: Could not transform into a valid MVT geometry");
GEOSGeometry * LWGEOM2GEOS(const LWGEOM *lwgeom, uint8_t autofix)
LWGEOM * GEOS2LWGEOM(const GEOSGeometry *geom, uint8_t want3d)
void lwgeom_geos_error(const char *fmt,...)
void lwgeom_force_clockwise(LWGEOM *lwgeom)
Force Right-hand-rule on LWGEOM polygons.
void lwgeom_grid_in_place(LWGEOM *lwgeom, const gridspec *grid)
void lwgeom_reverse_in_place(LWGEOM *lwgeom)
Reverse vertex order of LWGEOM.
static LWGEOM * lwgeom_to_basic_type(LWGEOM *geom, uint8 original_type)
In place process a collection to find a concrete geometry object and expose that as the actual object...