]> granicus.if.org Git - postgis/commitdiff
Check for new GDALFPolygonize function. If it isn't present, the old GDALPolygonize...
authorJorge Arévalo <jorge.arevalo at deimos-space.com>
Fri, 3 Jun 2011 15:19:40 +0000 (15:19 +0000)
committerJorge Arévalo <jorge.arevalo at deimos-space.com>
Fri, 3 Jun 2011 15:19:40 +0000 (15:19 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@7316 b70326c6-7e19-0410-871a-916f4a2858ee

configure.ac
raster/rt_core/rt_api.c
raster/test/core/testapi.c

index f1126f6905a504c5098dbcb79e2d2c4479b3fa57..0aebf05b4eb7a90390bad68973d1f994b00f21e4 100644 (file)
@@ -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=<path to gdal-config>])
        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
index eac1cf42f15e9d8537fc27617c267e2f6a9e11f9..ea23f4456f27d9e806d89cbaaeac752349ad14c5 100644 (file)
@@ -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
index 6e758f50602ed2e0d176b4944e066203600ab29c..10746447aab069e4e9558ce422081b152fc6ee11 100644 (file)
@@ -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);
 
     }