static void test_geos_subdivide(void) { #if POSTGIS_GEOS_VERSION < 35 // printf("%d\n", POSTGIS_GEOS_VERSION); return; #else char *ewkt = "MULTILINESTRING((0 0, 0 100))"; char *out_ewkt; LWGEOM *geom1 = lwgeom_from_wkt(ewkt, LW_PARSER_CHECK_NONE); LWGEOM *geom2 = lwgeom_segmentize2d(geom1, 1.0); LWCOLLECTION *geom3 = lwgeom_subdivide(geom2, 80); out_ewkt = lwgeom_to_ewkt((LWGEOM*)geom3); // printf("\n--------\n%s\n--------\n", out_ewkt); CU_ASSERT_EQUAL(2, geom3->ngeoms); lwfree(out_ewkt); lwcollection_free(geom3); geom3 = lwgeom_subdivide(geom2, 20); out_ewkt = lwgeom_to_ewkt((LWGEOM*)geom3); // printf("\n--------\n%s\n--------\n", out_ewkt); CU_ASSERT_EQUAL(8, geom3->ngeoms); lwfree(out_ewkt); lwcollection_free(geom3); lwgeom_free(geom2); lwgeom_free(geom1); #endif }
static void test_lwgeom_segmentize2d(void) { LWGEOM *linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE); LWGEOM *lineout = lwgeom_segmentize2d(linein, 5); char *strout = lwgeom_to_ewkt(lineout); CU_ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0)"); lwfree(strout); lwgeom_free(linein); lwgeom_free(lineout); }
LWCOLLECTION * lwcollection_segmentize2d(LWCOLLECTION *col, double dist) { uint32_t i; LWGEOM **newgeoms; if ( ! col->ngeoms ) return lwcollection_clone(col); newgeoms = lwalloc(sizeof(LWGEOM *)*col->ngeoms); for (i=0; i<col->ngeoms; i++) newgeoms[i] = lwgeom_segmentize2d(col->geoms[i], dist); return lwcollection_construct(col->type, col->srid, NULL, col->ngeoms, newgeoms); }