static void check_dimension(char *ewkt, int dim) { LWGEOM *geom; geom = lwgeom_from_wkt(ewkt, LW_PARSER_CHECK_NONE); CU_ASSERT_EQUAL(strlen(cu_error_msg), 0); CU_ASSERT_EQUAL(lwgeom_dimensionality(geom), dim); lwgeom_free(geom); }
static int lwcollection_dimensionality(LWCOLLECTION *col) { int i; int dimensionality = 0; for ( i = 0; i < col->ngeoms; i++ ) { int d = lwgeom_dimensionality(col->geoms[i]); if ( d > dimensionality ) dimensionality = d; } return dimensionality; }
static LWGEOM* lwgeom_clean(LWGEOM* lwgeom_in) { LWGEOM* lwgeom_out; lwgeom_out = lwgeom_make_valid(lwgeom_in); if ( ! lwgeom_out ) { return NULL; } /* Check dimensionality is the same as input */ if ( lwgeom_dimensionality(lwgeom_in) != lwgeom_dimensionality(lwgeom_out) ) { lwnotice("lwgeom_clean: dimensional collapse (%d to %d)", lwgeom_dimensionality(lwgeom_in), lwgeom_dimensionality(lwgeom_out)); return NULL; } /* Check that the output is not a collection if the input wasn't */ if ( lwgeom_out->type == COLLECTIONTYPE && lwgeom_in->type != COLLECTIONTYPE ) { lwnotice("lwgeom_clean: mixed-type output (%s) " "from single-type input (%s)", lwtype_name(lwgeom_out->type), lwtype_name(lwgeom_in->type)); return NULL; } /* Force right-hand-rule (will only affect polygons) */ /* gout := ST_ForceRHR(gout); */ /* Remove repeated duplicated points ? */ /* gout = ST_RemoveRepeatedPoints(gout); */ return lwgeom_out; }