Changeset 7316

Show
Ignore:
Timestamp:
06/03/11 08:19:40 (12 months ago)
Author:
jorgearevalo
Message:

Check for new GDALFPolygonize function. If it isn't present, the old GDALPolygonize is called. Related ticket #650.

Location:
trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/configure.ac

    r7031 r7316  
    832832                  AC_MSG_ERROR([PostGIS requires GDAL >= $GDAL_MIN_VERSION]) 
    833833           fi 
     834 
    834835        else 
    835836                AC_MSG_RESULT([not found]) 
     
    837838        fi 
    838839        AC_MSG_RESULT([found]) 
     840 
     841        dnl Check if the new polygonize function is present 
     842        AC_CHECK_LIB([gdal], [GDALFPolygonize], [AC_DEFINE_UNQUOTED([GDALFPOLYGONIZE], [1])], [AC_DEFINE_UNQUOTED([GDALFPOLYGONIZE], [0])], [])  
    839843 
    840844        dnl Determine if GDAL Python bindings are available 
     
    876880    AC_SUBST([LIBGDAL_CFLAGS]) 
    877881    AC_SUBST([LIBGDAL_LDFLAGS]) 
     882        AC_SUBST([GDALFPOLYGONIZE]) 
    878883 
    879884    dnl Define raster objects, for makefiles 
  • trunk/raster/rt_core/rt_api.c

    r7308 r7316  
    35433543     * We don't need a raster mask band. Each band has a nodata value. 
    35443544     **/ 
     3545#if GDALFPOLYGONIZE == 1  
    35453546    GDALFPolygonize(gdal_band, NULL, hLayer, iPixVal, NULL, NULL, NULL); 
     3547#else 
     3548    GDALPolygonize(gdal_band, NULL, hLayer, iPixVal, NULL, NULL, NULL); 
     3549#endif 
    35463550 
    35473551    /** 
  • trunk/raster/test/core/testapi.c

    r7308 r7316  
    9393     
    9494    /**/ 
    95     rt_band_set_pixel(band, 3, 1, 1.5); 
    96     rt_band_set_pixel(band, 4, 1, 1.5); 
    97     rt_band_set_pixel(band, 5, 1, 2.5); 
    98     rt_band_set_pixel(band, 2, 2, 1.5); 
    99     rt_band_set_pixel(band, 3, 2, 1.5); 
    100     rt_band_set_pixel(band, 4, 2, 1.5); 
    101     rt_band_set_pixel(band, 5, 2, 2.5); 
    102     rt_band_set_pixel(band, 6, 2, 2.5); 
    103     rt_band_set_pixel(band, 1, 3, 1.5); 
    104     rt_band_set_pixel(band, 2, 3, 1.5); 
    105     rt_band_set_pixel(band, 6, 3, 2.5); 
    106     rt_band_set_pixel(band, 7, 3, 2.5); 
    107     rt_band_set_pixel(band, 1, 4, 1.5); 
    108     rt_band_set_pixel(band, 2, 4, 1.5); 
    109     rt_band_set_pixel(band, 6, 4, 2.5); 
    110     rt_band_set_pixel(band, 7, 4, 2.5); 
    111     rt_band_set_pixel(band, 1, 5, 1.5); 
    112     rt_band_set_pixel(band, 2, 5, 1.5); 
    113     rt_band_set_pixel(band, 6, 5, 2.5); 
    114     rt_band_set_pixel(band, 7, 5, 2.5); 
    115     rt_band_set_pixel(band, 2, 6, 1.5); 
    116     rt_band_set_pixel(band, 3, 6, 1.5); 
    117     rt_band_set_pixel(band, 4, 6, 1.5); 
    118     rt_band_set_pixel(band, 5, 6, 2.5); 
    119     rt_band_set_pixel(band, 6, 6, 2.5); 
    120     rt_band_set_pixel(band, 3, 7, 1.5); 
    121     rt_band_set_pixel(band, 4, 7, 1.5); 
    122     rt_band_set_pixel(band, 5, 7, 2.5); 
     95    rt_band_set_pixel(band, 3, 1, 1.8); 
     96    rt_band_set_pixel(band, 4, 1, 1.8); 
     97    rt_band_set_pixel(band, 5, 1, 2.8); 
     98    rt_band_set_pixel(band, 2, 2, 1.8); 
     99    rt_band_set_pixel(band, 3, 2, 1.8); 
     100    rt_band_set_pixel(band, 4, 2, 1.8); 
     101    rt_band_set_pixel(band, 5, 2, 2.8); 
     102    rt_band_set_pixel(band, 6, 2, 2.8); 
     103    rt_band_set_pixel(band, 1, 3, 1.8); 
     104    rt_band_set_pixel(band, 2, 3, 1.8); 
     105    rt_band_set_pixel(band, 6, 3, 2.8); 
     106    rt_band_set_pixel(band, 7, 3, 2.8); 
     107    rt_band_set_pixel(band, 1, 4, 1.8); 
     108    rt_band_set_pixel(band, 2, 4, 1.8); 
     109    rt_band_set_pixel(band, 6, 4, 2.8); 
     110    rt_band_set_pixel(band, 7, 4, 2.8); 
     111    rt_band_set_pixel(band, 1, 5, 1.8); 
     112    rt_band_set_pixel(band, 2, 5, 1.8); 
     113    rt_band_set_pixel(band, 6, 5, 2.8); 
     114    rt_band_set_pixel(band, 7, 5, 2.8); 
     115    rt_band_set_pixel(band, 2, 6, 1.8); 
     116    rt_band_set_pixel(band, 3, 6, 1.8); 
     117    rt_band_set_pixel(band, 4, 6, 1.8); 
     118    rt_band_set_pixel(band, 5, 6, 2.8); 
     119    rt_band_set_pixel(band, 6, 6, 2.8); 
     120    rt_band_set_pixel(band, 3, 7, 1.8); 
     121    rt_band_set_pixel(band, 4, 7, 1.8); 
     122    rt_band_set_pixel(band, 5, 7, 2.8); 
    123123 
    124124 
     
    15081508        printf("Testing polygonize function\n"); 
    15091509 
    1510         /* First test: NODATA value = -1 */ 
     1510                /* First test: NODATA value = -1 */ 
    15111511        rt_raster rt = fillRasterToPolygonize(1, -1.0); 
    15121512 
    1513         /* We can check rt_raster_has_no_band here too */ 
    1514         CHECK(!rt_raster_has_no_band(rt, 1)); 
     1513                /* We can check rt_raster_has_no_band here too */ 
     1514                CHECK(!rt_raster_has_no_band(rt, 1)); 
    15151515 
    15161516        /** 
     
    15281528        rt_geomval gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); 
    15291529 
    1530         CHECK_EQUALS_DOUBLE(gv[0].val, 1.5); 
    1531         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))")); 
    1532  
    1533         CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); 
    1534         CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); 
    1535  
    1536         CHECK_EQUALS_DOUBLE(gv[2].val, 2.5); 
    1537         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))")); 
    1538  
    1539         CHECK_EQUALS_DOUBLE(gv[3].val, 0.0); 
    1540         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))")); 
     1530#if GDALFPOLYGONIZE == 1 
     1531                CHECK_EQUALS_DOUBLE(gv[0].val, 1.8); 
     1532#else 
     1533                CHECK_EQUALS_DOUBLE(gv[0].val, 2.0); 
     1534#endif 
     1535 
     1536                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))")); 
     1537 
     1538                CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); 
     1539                CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); 
     1540 
     1541#if GDALFPOLYGONIZE == 1 
     1542                CHECK_EQUALS_DOUBLE(gv[2].val, 2.8); 
     1543#else 
     1544                CHECK_EQUALS_DOUBLE(gv[2].val, 3.0); 
     1545#endif 
     1546 
     1547                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))")); 
     1548 
     1549                CHECK_EQUALS_DOUBLE(gv[3].val, 0.0); 
     1550                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))")); 
    15411551 
    15421552 
     
    15441554 
    15451555 
    1546         /* Second test: NODATA value = 1.5 */ 
    1547         rt = fillRasterToPolygonize(1, 1.5); 
    1548  
    1549         /* We can check rt_raster_has_no_band here too */ 
    1550         CHECK(!rt_raster_has_no_band(rt, 1)); 
    1551  
    1552         nPols = 0; 
    1553  
    1554         gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); 
    1555  
    1556  
    1557         CHECK_EQUALS_DOUBLE(gv[0].val, 0.0); 
    1558         CHECK(!strcmp(gv[0].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); 
    1559  
    1560         CHECK_EQUALS_DOUBLE(gv[1].val, 2.5); 
    1561         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))")); 
    1562  
    1563         CHECK_EQUALS_DOUBLE(gv[2].val, 0.0); 
    1564         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))")); 
     1556                /* Second test: NODATA value = 1.8 */ 
     1557#if GDALFPOLYGONIZE == 1 
     1558                rt = fillRasterToPolygonize(1, 1.8); 
     1559#else 
     1560                rt = fillRasterToPolygonize(1, 2.0); 
     1561#endif 
     1562 
     1563 
     1564                /* We can check rt_raster_has_no_band here too */ 
     1565                CHECK(!rt_raster_has_no_band(rt, 1)); 
     1566 
     1567        nPols = 0; 
     1568 
     1569        gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); 
     1570 
     1571                CHECK_EQUALS_DOUBLE(gv[0].val, 0.0); 
     1572                CHECK(!strcmp(gv[0].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); 
     1573 
     1574#if GDALFPOLYGONIZE == 1 
     1575                CHECK_EQUALS_DOUBLE(gv[1].val, 2.8); 
     1576#else 
     1577                CHECK_EQUALS_DOUBLE(gv[1].val, 3.0); 
     1578#endif 
     1579 
     1580            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))")); 
     1581 
     1582                CHECK_EQUALS_DOUBLE(gv[2].val, 0.0); 
     1583                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))")); 
    15651584        rt_raster_destroy(rt); 
    15661585 
    1567         /* Third test: NODATA value = 2.5 */ 
    1568         rt = fillRasterToPolygonize(1, 2.5); 
    1569  
    1570         /* We can check rt_raster_has_no_band here too */ 
    1571         CHECK(!rt_raster_has_no_band(rt, 1)); 
    1572  
    1573         nPols = 0; 
    1574  
    1575         gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); 
    1576  
    1577         CHECK_EQUALS_DOUBLE(gv[0].val, 1.5); 
    1578         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))")); 
    1579  
    1580         CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); 
    1581         CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); 
    1582  
    1583         CHECK_EQUALS_DOUBLE(gv[2].val, 0.0); 
    1584         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))")); 
     1586                /* Third test: NODATA value = 2.8 */ 
     1587#if GDALFPOLYGONIZE == 1 
     1588        rt = fillRasterToPolygonize(1, 2.8); 
     1589#else    
     1590        rt = fillRasterToPolygonize(1, 3.0); 
     1591#endif 
     1592 
     1593                /* We can check rt_raster_has_no_band here too */ 
     1594                CHECK(!rt_raster_has_no_band(rt, 1)); 
     1595 
     1596                nPols = 0; 
     1597 
     1598        gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); 
     1599 
     1600#if GDALFPOLYGONIZE == 1 
     1601        CHECK_EQUALS_DOUBLE(gv[0].val, 1.8); 
     1602#else 
     1603        CHECK_EQUALS_DOUBLE(gv[0].val, 2.0); 
     1604#endif 
     1605 
     1606            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))")); 
     1607 
     1608                CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); 
     1609                CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); 
     1610 
     1611                CHECK_EQUALS_DOUBLE(gv[2].val, 0.0); 
     1612                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))")); 
    15851613        rt_raster_destroy(rt); 
    15861614 
    15871615 
    1588         /* Fourth test: NODATA value = 0 */ 
    1589         rt = fillRasterToPolygonize(1, 0.0); 
     1616                /* Fourth test: NODATA value = 0 */ 
     1617        rt = fillRasterToPolygonize(1, 0.0); 
    15901618 
    15911619        /* We can check rt_raster_has_no_band here too */ 
    1592         CHECK(!rt_raster_has_no_band(rt, 1)); 
    1593  
    1594         nPols = 0; 
    1595  
    1596         gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); 
    1597  
    1598         CHECK_EQUALS_DOUBLE(gv[0].val, 1.5); 
    1599         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))")); 
    1600  
    1601         CHECK_EQUALS_DOUBLE(gv[1].val, 2.5); 
    1602         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))")); 
    1603  
    1604         rt_raster_destroy(rt); 
    1605  
    1606         /* Last test: There is no NODATA value (all values are valid) */ 
    1607         rt = fillRasterToPolygonize(0, 0.0); 
    1608  
    1609         /* We can check rt_raster_has_no_band here too */ 
    1610         CHECK(!rt_raster_has_no_band(rt, 1)); 
    1611  
    1612         nPols = 0; 
    1613  
    1614         gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); 
    1615  
    1616         CHECK_EQUALS_DOUBLE(gv[0].val, 1.5); 
    1617         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))")); 
    1618  
    1619         CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); 
    1620         CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); 
    1621  
    1622         CHECK_EQUALS_DOUBLE(gv[2].val, 2.5); 
    1623         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))")); 
    1624  
    1625         CHECK_EQUALS_DOUBLE(gv[3].val, 0.0); 
    1626         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))")); 
    1627         rt_raster_destroy(rt); 
     1620                CHECK(!rt_raster_has_no_band(rt, 1)); 
     1621 
     1622                nPols = 0; 
     1623 
     1624                gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); 
     1625 
     1626#if GDALFPOLYGONIZE == 1 
     1627                CHECK_EQUALS_DOUBLE(gv[0].val, 1.8); 
     1628#else 
     1629                CHECK_EQUALS_DOUBLE(gv[0].val, 2.0); 
     1630#endif 
     1631 
     1632                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))")); 
     1633 
     1634#if GDALFPOLYGONIZE == 1 
     1635                CHECK_EQUALS_DOUBLE(gv[1].val, 2.8); 
     1636#else 
     1637                CHECK_EQUALS_DOUBLE(gv[1].val, 3.0); 
     1638#endif 
     1639 
     1640            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))")); 
     1641 
     1642                rt_raster_destroy(rt); 
     1643 
     1644        /* Last test: There is no NODATA value (all values are valid) */ 
     1645        rt = fillRasterToPolygonize(0, 0.0); 
     1646 
     1647                /* We can check rt_raster_has_no_band here too */ 
     1648                CHECK(!rt_raster_has_no_band(rt, 1)); 
     1649 
     1650            nPols = 0; 
     1651 
     1652        gv = (rt_geomval) rt_raster_dump_as_wktpolygons(rt, 1, &nPols); 
     1653 
     1654#if GDALFPOLYGONIZE == 1 
     1655        CHECK_EQUALS_DOUBLE(gv[0].val, 1.8); 
     1656#else 
     1657            CHECK_EQUALS_DOUBLE(gv[0].val, 2.0); 
     1658#endif 
     1659 
     1660                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))")); 
     1661 
     1662                CHECK_EQUALS_DOUBLE(gv[1].val, 0.0); 
     1663                CHECK(!strcmp(gv[1].geom, "POLYGON ((3 3,3 6,6 6,6 3,3 3))")); 
     1664 
     1665#if GDALFPOLYGONIZE == 1 
     1666                CHECK_EQUALS_DOUBLE(gv[2].val, 2.8); 
     1667#else 
     1668            CHECK_EQUALS_DOUBLE(gv[2].val, 3.0); 
     1669#endif 
     1670 
     1671            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))")); 
     1672 
     1673                CHECK_EQUALS_DOUBLE(gv[3].val, 0.0); 
     1674                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))")); 
     1675                rt_raster_destroy(rt); 
    16281676 
    16291677    }