From: Jorge Arévalo Date: Fri, 3 Jun 2011 15:19:40 +0000 (+0000) Subject: Check for new GDALFPolygonize function. If it isn't present, the old GDALPolygonize... X-Git-Tag: 2.0.0alpha1~1498 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6c38bd84373a7206f2c8ed779c24073fe28cd372;p=postgis Check for new GDALFPolygonize function. If it isn't present, the old GDALPolygonize is called. Related ticket #650. git-svn-id: http://svn.osgeo.org/postgis/trunk@7316 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/configure.ac b/configure.ac index f1126f690..0aebf05b4 100644 --- a/configure.ac +++ b/configure.ac @@ -831,12 +831,16 @@ if test "x$RASTER" = "xraster"; then dnl # { AC_MSG_RESULT([not found]) AC_MSG_ERROR([PostGIS requires GDAL >= $GDAL_MIN_VERSION]) fi + else AC_MSG_RESULT([not found]) AC_MSG_ERROR([gdal-config not found. Try --with-gdalconfig=]) fi AC_MSG_RESULT([found]) + dnl Check if the new polygonize function is present + AC_CHECK_LIB([gdal], [GDALFPolygonize], [AC_DEFINE_UNQUOTED([GDALFPOLYGONIZE], [1])], [AC_DEFINE_UNQUOTED([GDALFPOLYGONIZE], [0])], []) + dnl Determine if GDAL Python bindings are available AC_MSG_CHECKING([for GDAL Python bindings]) GDAL_PYTHON_TEST='try: @@ -875,6 +879,7 @@ except ImportError: AC_SUBST([LIBGDAL_CFLAGS]) AC_SUBST([LIBGDAL_LDFLAGS]) + AC_SUBST([GDALFPOLYGONIZE]) dnl Define raster objects, for makefiles RT_CORE_LIB=corelib diff --git a/raster/rt_core/rt_api.c b/raster/rt_core/rt_api.c index eac1cf42f..ea23f4456 100644 --- a/raster/rt_core/rt_api.c +++ b/raster/rt_core/rt_api.c @@ -3542,7 +3542,11 @@ rt_raster_dump_as_wktpolygons(rt_raster raster, int nband, int * pnElements) /** * We don't need a raster mask band. Each band has a nodata value. **/ +#if GDALFPOLYGONIZE == 1 GDALFPolygonize(gdal_band, NULL, hLayer, iPixVal, NULL, NULL, NULL); +#else + GDALPolygonize(gdal_band, NULL, hLayer, iPixVal, NULL, NULL, NULL); +#endif /** * Optimization: Apply a OGR SQL filter to the layer to select the diff --git a/raster/test/core/testapi.c b/raster/test/core/testapi.c index 6e758f506..10746447a 100644 --- a/raster/test/core/testapi.c +++ b/raster/test/core/testapi.c @@ -92,34 +92,34 @@ fillRasterToPolygonize(int hasnodata, double nodatavalue) } /**/ - rt_band_set_pixel(band, 3, 1, 1.5); - rt_band_set_pixel(band, 4, 1, 1.5); - rt_band_set_pixel(band, 5, 1, 2.5); - rt_band_set_pixel(band, 2, 2, 1.5); - rt_band_set_pixel(band, 3, 2, 1.5); - rt_band_set_pixel(band, 4, 2, 1.5); - rt_band_set_pixel(band, 5, 2, 2.5); - rt_band_set_pixel(band, 6, 2, 2.5); - rt_band_set_pixel(band, 1, 3, 1.5); - rt_band_set_pixel(band, 2, 3, 1.5); - rt_band_set_pixel(band, 6, 3, 2.5); - rt_band_set_pixel(band, 7, 3, 2.5); - rt_band_set_pixel(band, 1, 4, 1.5); - rt_band_set_pixel(band, 2, 4, 1.5); - rt_band_set_pixel(band, 6, 4, 2.5); - rt_band_set_pixel(band, 7, 4, 2.5); - rt_band_set_pixel(band, 1, 5, 1.5); - rt_band_set_pixel(band, 2, 5, 1.5); - rt_band_set_pixel(band, 6, 5, 2.5); - rt_band_set_pixel(band, 7, 5, 2.5); - rt_band_set_pixel(band, 2, 6, 1.5); - rt_band_set_pixel(band, 3, 6, 1.5); - rt_band_set_pixel(band, 4, 6, 1.5); - rt_band_set_pixel(band, 5, 6, 2.5); - rt_band_set_pixel(band, 6, 6, 2.5); - rt_band_set_pixel(band, 3, 7, 1.5); - rt_band_set_pixel(band, 4, 7, 1.5); - rt_band_set_pixel(band, 5, 7, 2.5); + rt_band_set_pixel(band, 3, 1, 1.8); + rt_band_set_pixel(band, 4, 1, 1.8); + rt_band_set_pixel(band, 5, 1, 2.8); + rt_band_set_pixel(band, 2, 2, 1.8); + rt_band_set_pixel(band, 3, 2, 1.8); + rt_band_set_pixel(band, 4, 2, 1.8); + rt_band_set_pixel(band, 5, 2, 2.8); + rt_band_set_pixel(band, 6, 2, 2.8); + rt_band_set_pixel(band, 1, 3, 1.8); + rt_band_set_pixel(band, 2, 3, 1.8); + rt_band_set_pixel(band, 6, 3, 2.8); + rt_band_set_pixel(band, 7, 3, 2.8); + rt_band_set_pixel(band, 1, 4, 1.8); + rt_band_set_pixel(band, 2, 4, 1.8); + rt_band_set_pixel(band, 6, 4, 2.8); + rt_band_set_pixel(band, 7, 4, 2.8); + rt_band_set_pixel(band, 1, 5, 1.8); + rt_band_set_pixel(band, 2, 5, 1.8); + rt_band_set_pixel(band, 6, 5, 2.8); + rt_band_set_pixel(band, 7, 5, 2.8); + rt_band_set_pixel(band, 2, 6, 1.8); + rt_band_set_pixel(band, 3, 6, 1.8); + rt_band_set_pixel(band, 4, 6, 1.8); + rt_band_set_pixel(band, 5, 6, 2.8); + rt_band_set_pixel(band, 6, 6, 2.8); + rt_band_set_pixel(band, 3, 7, 1.8); + rt_band_set_pixel(band, 4, 7, 1.8); + rt_band_set_pixel(band, 5, 7, 2.8); @@ -1507,11 +1507,11 @@ main() { /* Check ST_AsPolygon */ printf("Testing polygonize function\n"); - /* First test: NODATA value = -1 */ + /* First test: NODATA value = -1 */ rt_raster rt = fillRasterToPolygonize(1, -1.0); - /* We can check rt_raster_has_no_band here too */ - CHECK(!rt_raster_has_no_band(rt, 1)); + /* We can check rt_raster_has_no_band here too */ + CHECK(!rt_raster_has_no_band(rt, 1)); /** * Need to define again, to access the struct fields @@ -1527,104 +1527,152 @@ main() rt_geomval gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); - CHECK_EQUALS_DOUBLE(gv[0].val, 1.5); - CHECK(!strcmp(gv[0].geom, "POLYGON ((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))")); +#if GDALFPOLYGONIZE == 1 + CHECK_EQUALS_DOUBLE(gv[0].val, 1.8); +#else + CHECK_EQUALS_DOUBLE(gv[0].val, 2.0); +#endif - CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); - CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); + CHECK(!strcmp(gv[0].geom, "POLYGON ((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))")); - CHECK_EQUALS_DOUBLE(gv[2].val, 2.5); - CHECK(!strcmp(gv[2].geom, "POLYGON ((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))")); + CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); + CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); - CHECK_EQUALS_DOUBLE(gv[3].val, 0.0); - CHECK(!strcmp(gv[3].geom, "POLYGON ((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))")); +#if GDALFPOLYGONIZE == 1 + CHECK_EQUALS_DOUBLE(gv[2].val, 2.8); +#else + CHECK_EQUALS_DOUBLE(gv[2].val, 3.0); +#endif + + CHECK(!strcmp(gv[2].geom, "POLYGON ((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))")); + + CHECK_EQUALS_DOUBLE(gv[3].val, 0.0); + CHECK(!strcmp(gv[3].geom, "POLYGON ((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))")); rt_raster_destroy(rt); - /* Second test: NODATA value = 1.5 */ - rt = fillRasterToPolygonize(1, 1.5); + /* Second test: NODATA value = 1.8 */ +#if GDALFPOLYGONIZE == 1 + rt = fillRasterToPolygonize(1, 1.8); +#else + rt = fillRasterToPolygonize(1, 2.0); +#endif - /* We can check rt_raster_has_no_band here too */ - CHECK(!rt_raster_has_no_band(rt, 1)); - nPols = 0; + /* We can check rt_raster_has_no_band here too */ + CHECK(!rt_raster_has_no_band(rt, 1)); - gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); + nPols = 0; + gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); - CHECK_EQUALS_DOUBLE(gv[0].val, 0.0); - CHECK(!strcmp(gv[0].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); + CHECK_EQUALS_DOUBLE(gv[0].val, 0.0); + CHECK(!strcmp(gv[0].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); - CHECK_EQUALS_DOUBLE(gv[1].val, 2.5); - CHECK(!strcmp(gv[1].geom, "POLYGON ((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))")); +#if GDALFPOLYGONIZE == 1 + CHECK_EQUALS_DOUBLE(gv[1].val, 2.8); +#else + CHECK_EQUALS_DOUBLE(gv[1].val, 3.0); +#endif - CHECK_EQUALS_DOUBLE(gv[2].val, 0.0); - CHECK(!strcmp(gv[2].geom, "POLYGON ((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))")); + CHECK(!strcmp(gv[1].geom, "POLYGON ((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))")); + + CHECK_EQUALS_DOUBLE(gv[2].val, 0.0); + CHECK(!strcmp(gv[2].geom, "POLYGON ((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))")); rt_raster_destroy(rt); - /* Third test: NODATA value = 2.5 */ - rt = fillRasterToPolygonize(1, 2.5); + /* Third test: NODATA value = 2.8 */ +#if GDALFPOLYGONIZE == 1 + rt = fillRasterToPolygonize(1, 2.8); +#else + rt = fillRasterToPolygonize(1, 3.0); +#endif + + /* We can check rt_raster_has_no_band here too */ + CHECK(!rt_raster_has_no_band(rt, 1)); - /* We can check rt_raster_has_no_band here too */ - CHECK(!rt_raster_has_no_band(rt, 1)); + nPols = 0; - nPols = 0; + gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); - gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); +#if GDALFPOLYGONIZE == 1 + CHECK_EQUALS_DOUBLE(gv[0].val, 1.8); +#else + CHECK_EQUALS_DOUBLE(gv[0].val, 2.0); +#endif - CHECK_EQUALS_DOUBLE(gv[0].val, 1.5); - CHECK(!strcmp(gv[0].geom, "POLYGON ((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))")); + CHECK(!strcmp(gv[0].geom, "POLYGON ((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))")); - CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); - CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); + CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); + CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); - CHECK_EQUALS_DOUBLE(gv[2].val, 0.0); - CHECK(!strcmp(gv[2].geom, "POLYGON ((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))")); + CHECK_EQUALS_DOUBLE(gv[2].val, 0.0); + CHECK(!strcmp(gv[2].geom, "POLYGON ((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))")); rt_raster_destroy(rt); - /* Fourth test: NODATA value = 0 */ - rt = fillRasterToPolygonize(1, 0.0); + /* Fourth test: NODATA value = 0 */ + rt = fillRasterToPolygonize(1, 0.0); /* We can check rt_raster_has_no_band here too */ - CHECK(!rt_raster_has_no_band(rt, 1)); + CHECK(!rt_raster_has_no_band(rt, 1)); + + nPols = 0; + + gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); + +#if GDALFPOLYGONIZE == 1 + CHECK_EQUALS_DOUBLE(gv[0].val, 1.8); +#else + CHECK_EQUALS_DOUBLE(gv[0].val, 2.0); +#endif + + CHECK(!strcmp(gv[0].geom, "POLYGON ((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))")); - nPols = 0; +#if GDALFPOLYGONIZE == 1 + CHECK_EQUALS_DOUBLE(gv[1].val, 2.8); +#else + CHECK_EQUALS_DOUBLE(gv[1].val, 3.0); +#endif - gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); + CHECK(!strcmp(gv[1].geom, "POLYGON ((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))")); - CHECK_EQUALS_DOUBLE(gv[0].val, 1.5); - CHECK(!strcmp(gv[0].geom, "POLYGON ((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))")); + rt_raster_destroy(rt); - CHECK_EQUALS_DOUBLE(gv[1].val, 2.5); - CHECK(!strcmp(gv[1].geom, "POLYGON ((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))")); + /* Last test: There is no NODATA value (all values are valid) */ + rt = fillRasterToPolygonize(0, 0.0); - rt_raster_destroy(rt); + /* We can check rt_raster_has_no_band here too */ + CHECK(!rt_raster_has_no_band(rt, 1)); - /* Last test: There is no NODATA value (all values are valid) */ - rt = fillRasterToPolygonize(0, 0.0); + nPols = 0; - /* We can check rt_raster_has_no_band here too */ - CHECK(!rt_raster_has_no_band(rt, 1)); + gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); - nPols = 0; +#if GDALFPOLYGONIZE == 1 + CHECK_EQUALS_DOUBLE(gv[0].val, 1.8); +#else + CHECK_EQUALS_DOUBLE(gv[0].val, 2.0); +#endif - gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); + CHECK(!strcmp(gv[0].geom, "POLYGON ((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))")); - CHECK_EQUALS_DOUBLE(gv[0].val, 1.5); - CHECK(!strcmp(gv[0].geom, "POLYGON ((3 1,3 2,2 2,2 3,1 3,1 6,2 6,2 7,3 7,3 8,5 8,5 6,3 6,3 3,4 3,5 3,5 1,3 1))")); + CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); + CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); - CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); - CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); +#if GDALFPOLYGONIZE == 1 + CHECK_EQUALS_DOUBLE(gv[2].val, 2.8); +#else + CHECK_EQUALS_DOUBLE(gv[2].val, 3.0); +#endif - CHECK_EQUALS_DOUBLE(gv[2].val, 2.5); - CHECK(!strcmp(gv[2].geom, "POLYGON ((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))")); + CHECK(!strcmp(gv[2].geom, "POLYGON ((5 1,5 3,6 3,6 6,5 6,5 8,6 8,6 7,7 7,7 6,8 6,8 3,7 3,7 2,6 2,6 1,5 1))")); - CHECK_EQUALS_DOUBLE(gv[3].val, 0.0); - CHECK(!strcmp(gv[3].geom, "POLYGON ((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))")); - rt_raster_destroy(rt); + CHECK_EQUALS_DOUBLE(gv[3].val, 0.0); + CHECK(!strcmp(gv[3].geom, "POLYGON ((0 0,0 9,9 9,9 0,0 0),(6 7,6 8,3 8,3 7,2 7,2 6,1 6,1 3,2 3,2 2,3 2,3 1,6 1,6 2,7 2,7 3,8 3,8 6,7 6,7 7,6 7))")); + rt_raster_destroy(rt); }