TePDIUtils_test.cpp

Go to the documentation of this file.
00001 #define TEAGN_ENABLE_STDOUT_LOG
00002 
00003 #include <TePDIExamplesBase.hpp>
00004 
00005 #include <TePDIUtils.hpp>
00006 
00007 #include <TeAgnostic.h>
00008 
00009 #include <string>
00010 
00011 #include <TeProgress.h>
00012 #include <TeStdIOProgress.h>
00013 #include <TePrecision.h>
00014 #include <TeInitRasterDecoders.h>
00015 
00016 
00017 void raster_compare_test()
00018 {
00019   TePDITypes::TePDIRasterPtrType inRaster( new TeRaster(
00020     std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop.tif" ), 'r' ) );
00021 
00022   TEAGN_TRUE_OR_THROW( inRaster->init(), "Unable to init inRaster" );
00023 
00024   TEAGN_TRUE_OR_THROW(
00025     TePDIUtils::rasterCompare( inRaster, inRaster ),
00026     "Raster compare error" );
00027 }
00028 
00029 
00030 void TeGetRasterMinMaxBounds_test()
00031 {
00032   TePDITypes::TePDIRasterPtrType inRaster( new TeRaster(
00033     std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop.tif" ), 'r' ) );
00034 
00035   TEAGN_TRUE_OR_THROW( inRaster->init(), "Unable to init inRaster" );
00036 
00037   double min = 0;
00038   double max = 0;
00039 
00040   TEAGN_TRUE_OR_THROW( TePDIUtils::TeGetRasterMinMaxBounds( inRaster, 0, min, max ),
00041     "Unable to get bounds" );
00042 
00043   TEAGN_CHECK_EQUAL( min, 0, "Invalid min value" );
00044   TEAGN_CHECK_EQUAL( max, 255, "Invalid max value" );
00045 
00046 }
00047 
00048 
00049 void TeRaster2Geotiff_deprecated_test()
00050 {
00051   TePDITypes::TePDIRasterPtrType inRaster( new TeRaster(
00052     std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop.tif" ), 'r' ) );
00053 
00054   TEAGN_TRUE_OR_THROW( inRaster->init(), "Unable to init inRaster" );
00055   
00056   double pixel_value = 0;
00057   TEAGN_TRUE_OR_THROW( inRaster->getElement( 0, 0, pixel_value, 0 ),
00058     "Unable to get element" );
00059   TEAGN_CHECK_EPS( pixel_value, 88., 0.00001, 
00060     "Pixel value inversion detected" );
00061 
00062   TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( inRaster,
00063     TEPDIEXAMPLESBINPATH "TeRaster2Geotiff_test.tif" ), "GeoTIF generation error" );
00064 
00065   TePDITypes::TePDIRasterPtrType inRaster2( new TeRaster(
00066     std::string( TEPDIEXAMPLESBINPATH "TeRaster2Geotiff_test.tif" ), 'r' ) );
00067 
00068   TEAGN_TRUE_OR_THROW( inRaster2->init(), "Unable to init inRaster2" );
00069   
00070   TEAGN_TRUE_OR_THROW( inRaster2->getElement( 0, 0, pixel_value, 0 ),
00071     "Unable to get element" );
00072   TEAGN_CHECK_EPS( pixel_value, 88., 0.00001, 
00073     "Pixel value inversion detected" );
00074 
00075   TEAGN_TRUE_OR_THROW(
00076     TePDIUtils::rasterCompare( inRaster, inRaster2 ),
00077     "Raster compare error" );
00078 }
00079 
00080 
00081 void TeRaster2Geotiff_test()
00082 {
00083   TePDITypes::TePDIRasterPtrType inRaster( new TeRaster(
00084     std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop.tif" ), 'r' ) );
00085 
00086   TEAGN_TRUE_OR_THROW( inRaster->init(), "Unable to init inRaster" );
00087   
00088   double pixel_value = 0;
00089   TEAGN_TRUE_OR_THROW( inRaster->getElement( 0, 0, pixel_value, 0 ),
00090     "Unable to get element" );
00091   TEAGN_CHECK_EPS( pixel_value, 88., 0.00001, 
00092     "Pixel value inversion detected" );
00093 
00094   TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( inRaster,
00095     TEPDIEXAMPLESBINPATH "TeRaster2Geotiff_test.tif",
00096     true ), "GeoTIF generation error" );
00097 
00098   TePDITypes::TePDIRasterPtrType inRaster2( new TeRaster(
00099     std::string( TEPDIEXAMPLESBINPATH "TeRaster2Geotiff_test.tif" ), 'r' ) );
00100 
00101   TEAGN_TRUE_OR_THROW( inRaster2->init(), "Unable to init inRaster2" );
00102   
00103   TEAGN_TRUE_OR_THROW( inRaster2->getElement( 0, 0, pixel_value, 0 ),
00104     "Unable to get element" );
00105   TEAGN_CHECK_EPS( pixel_value, 88., 0.00001, 
00106     "Pixel value inversion detected" );
00107 
00108   TEAGN_TRUE_OR_THROW(
00109     TePDIUtils::rasterCompare( inRaster, inRaster2 ),
00110     "Raster compare error" );
00111 }
00112 
00113 void TeRaster2RGBGeotiff_test()
00114 {
00115   TePDITypes::TePDIRasterPtrType inRaster( new TeRaster(
00116     std::string( TEPDIEXAMPLESRESPATH "cbers_rgb342_crop1_chip0_0.tif" ), 'r' ) );
00117 
00118   TEAGN_TRUE_OR_THROW( inRaster->init(), "Unable to init inRaster" );
00119 
00120   TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2RGBGeotiff( inRaster,
00121     TEPDIEXAMPLESBINPATH "TeRaster2RGBGeotiff_test.tif",
00122     true ), "GeoTIF generation error" );
00123 
00124   TePDITypes::TePDIRasterPtrType inRaster2( new TeRaster(
00125     std::string( TEPDIEXAMPLESBINPATH "TeRaster2RGBGeotiff_test.tif" ), 'r' ) );
00126 
00127   TEAGN_TRUE_OR_THROW( inRaster2->init(), "Unable to init inRaster2" );
00128 
00129   TEAGN_TRUE_OR_THROW(
00130     TePDIUtils::rasterCompare( inRaster, inRaster2 ),
00131     "Raster compare error" );
00132 }
00133 
00134 void TeRaster2Jpeg_test()
00135 {
00136   TePDITypes::TePDIRasterPtrType inRaster( new TeRaster(
00137     std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop.tif" ), 'r' ) );
00138 
00139   TEAGN_TRUE_OR_THROW( inRaster->init(), "Unable to init inRaster" );
00140   
00141   double pixel_value = 0;
00142   TEAGN_TRUE_OR_THROW( inRaster->getElement( 0, 0, pixel_value, 0 ),
00143     "Unable to get element" );
00144   TEAGN_CHECK_EPS( pixel_value, 88., 0.00001, 
00145     "Pixel value inversion detected" );
00146 
00147   TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Jpeg( inRaster,
00148     TEPDIEXAMPLESBINPATH "TeRaster2Jpeg_test.jpg",
00149     true, 100 ), "GeoTIF generation error" );
00150 
00151   TePDITypes::TePDIRasterPtrType inRaster2( new TeRaster(
00152     std::string( TEPDIEXAMPLESBINPATH "TeRaster2Jpeg_test.jpg" ), 'r' ) );
00153 
00154   TEAGN_TRUE_OR_THROW( inRaster2->init(), "Unable to init inRaster2" );
00155   
00156   TEAGN_TRUE_OR_THROW( inRaster2->getElement( 0, 0, pixel_value, 0 ),
00157     "Unable to get element" );
00158   TEAGN_CHECK_EPS( pixel_value, 88., 0.00001, 
00159     "Pixel value inversion detected" );
00160 }
00161 
00162 
00163 void TeGetRasterReqMem_test()
00164 {
00165   TePDITypes::TePDIRasterPtrType RAMRaster;
00166 
00167   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( RAMRaster, 10,
00168     10, 10, false, TeUNSIGNEDCHAR, 0 ), "RAM Raster Allocation error" );
00169     
00170   TEAGN_TRUE_OR_THROW( 
00171     ( TePDIUtils::TeGetRasterReqMem( RAMRaster->params() ) == 1000 ),
00172     "Invalid TeGetRasterReqMem result" );
00173 }
00174 
00175 
00176 void TeAllocRAMRaster1_test()
00177 {
00178   TePDITypes::TePDIRasterPtrType RAMRaster;
00179 
00180   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( RAMRaster, 10,
00181     10, 10, false, TeUNSIGNEDCHAR, 0 ), "RAM Raster Allocation error" );
00182 
00183   TEAGN_TRUE_OR_THROW( 
00184     RAMRaster->params().status_ == TeRasterParams::TeReadyToWrite, 
00185     "Raster status error" );
00186   TEAGN_TRUE_OR_THROW( RAMRaster->params().nlines_ == 10, "Lines error" );
00187   TEAGN_TRUE_OR_THROW( RAMRaster->params().ncols_ == 10, "Columns error" );
00188   TEAGN_TRUE_OR_THROW( RAMRaster->nBands() == 10, "Bands error" );
00189   TEAGN_TRUE_OR_THROW( RAMRaster->params().dataType_[ 0 ] == TeUNSIGNEDCHAR,
00190     "data type error" );
00191 }
00192 
00193 
00194 void TeAllocRAMRaster_templateraster_test()
00195 {
00196   TePDITypes::TePDIRasterPtrType inRaster( new TeRaster(
00197     std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop.tif" ), 'r' ) );
00198 
00199   TEAGN_TRUE_OR_THROW( inRaster->init(), "Unable to init inRaster" );
00200 
00201   TePDITypes::TePDIRasterPtrType RAMRaster( new TeRaster );
00202 
00203   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( inRaster, RAMRaster, 0,
00204     true, false, TeUNSIGNEDCHAR ), "RAM Raster Allocation error" );
00205 
00206   TEAGN_TRUE_OR_THROW( RAMRaster->params().dataType_[ 0 ] == TeUNSIGNEDCHAR,
00207     "data type error" );
00208   TEAGN_TRUE_OR_THROW( 
00209     RAMRaster->params().status_ == TeRasterParams::TeReadyToWrite, 
00210     "Raster status error" );
00211     
00212   TEAGN_TRUE_OR_THROW( RAMRaster->params().nlines_ == 
00213     inRaster->params().nlines_, "Checking error" );
00214   TEAGN_TRUE_OR_THROW( RAMRaster->params().ncols_ == 
00215     inRaster->params().ncols_, "Checking error" );
00216   TEAGN_TRUE_OR_THROW( RAMRaster->params().dataType_[ 0 ] == 
00217     inRaster->params().dataType_[ 0 ], "Checking error" );
00218   TEAGN_TRUE_OR_THROW( ( *(RAMRaster->params().projection()) ) == 
00219     ( *(inRaster->params().projection()) ), "Checking error" );
00220   TEAGN_TRUE_OR_THROW( RAMRaster->params().box() == 
00221     inRaster->params().box(), "Checking error" );
00222   TEAGN_TRUE_OR_THROW( RAMRaster->params().resx_ == 
00223     inRaster->params().resx_, "Checking error" );
00224   TEAGN_TRUE_OR_THROW( RAMRaster->params().resy_ == 
00225     inRaster->params().resy_, "Checking error" );
00226   TEAGN_TRUE_OR_THROW( 
00227     RAMRaster->params().status_ == TeRasterParams::TeReadyToWrite, 
00228     "Raster status error" );    
00229 }
00230 
00231 
00232 void TeAllocRAMRaster_usingparams_test()
00233 {
00234   TePDITypes::TePDIRasterPtrType RAMRaster;
00235   
00236   TeRasterParams params;
00237   params.nBands( 10 );
00238   params.nlines_ = 10;
00239   params.ncols_ = 10;
00240   params.setDataType( TeUNSIGNEDCHAR, -1 );
00241 
00242   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( RAMRaster, params, 
00243     TePDIUtils::TePDIUtilsAutoMemPol ), "RAM Raster Allocation error" );
00244 
00245   TEAGN_TRUE_OR_THROW( 
00246     RAMRaster->params().status_ == TeRasterParams::TeReadyToWrite, 
00247     "Raster status error" );
00248   TEAGN_TRUE_OR_THROW( RAMRaster->params().nlines_ == 10, "Lines error" );
00249   TEAGN_TRUE_OR_THROW( RAMRaster->params().ncols_ == 10, "Columns error" );
00250   TEAGN_TRUE_OR_THROW( RAMRaster->nBands() == 10, "Bands error" );
00251   TEAGN_TRUE_OR_THROW( RAMRaster->params().dataType_[ 0 ] == TeUNSIGNEDCHAR,
00252     "data type error" );
00253 }
00254 
00255 
00256 void TeAllocMemoryMappedRaster_test()
00257 {
00258   TePDITypes::TePDIRasterPtrType inRaster( new TeRaster(
00259     std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop.tif" ), 'r' ) );
00260 
00261   TEAGN_TRUE_OR_THROW( inRaster->init(), "Unable to init inRaster" );
00262 
00263   TePDITypes::TePDIRasterPtrType RAMRaster;
00264 
00265   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( inRaster, RAMRaster, 0,
00266     true, true, TeUNSIGNEDCHAR ), "RAM Raster Allocation error" );
00267 
00268   TEAGN_TRUE_OR_THROW( RAMRaster->params().dataType_[ 0 ] == TeUNSIGNEDCHAR,
00269     "data type error" );
00270   TEAGN_TRUE_OR_THROW( 
00271     RAMRaster->params().status_ == TeRasterParams::TeReadyToWrite, 
00272     "Raster status error" );    
00273 
00274   TEAGN_TRUE_OR_THROW( TePDIUtils::TeCopyRasterBands( inRaster,
00275     RAMRaster, false, false ), "Raster band copy error" );
00276 
00277   TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( RAMRaster,
00278     TEPDIEXAMPLESBINPATH "TeAllocMemoryMappedRaster_test.tif" ), "GeoTIF generation error" );
00279 }
00280 
00281 
00282 void IsFloatBand_test()
00283 {
00284 
00285   TePDITypes::TePDIRasterPtrType RAMRaster_int;
00286 
00287   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( RAMRaster_int, 10,
00288     10, 10, false, TeINTEGER, 0 ), "RAM Raster Allocation error" );
00289     
00290   TEAGN_TRUE_OR_THROW( ( ! TePDIUtils::IsFloatBand( RAMRaster_int, 0 ) ),
00291     "Invalid result" );
00292   
00293   TePDITypes::TePDIRasterPtrType RAMRaster_uchar;
00294     
00295   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( RAMRaster_uchar, 10,
00296     10, 10, false, TeUNSIGNEDCHAR, 0 ), "RAM Raster Allocation error" );    
00297     
00298   TEAGN_TRUE_OR_THROW( ( ! TePDIUtils::IsFloatBand( RAMRaster_uchar, 0 ) ),
00299     "Invalid result" );
00300     
00301   TePDITypes::TePDIRasterPtrType RAMRaster_float;
00302     
00303   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( RAMRaster_float, 10,
00304     10, 10, false, TeFLOAT, 0 ), "RAM Raster Allocation error" );    
00305     
00306   TEAGN_TRUE_OR_THROW( ( TePDIUtils::IsFloatBand( RAMRaster_float, 0 ) ),
00307     "Invalid result" );    
00308     
00309   TePDITypes::TePDIRasterPtrType RAMRaster_double;
00310     
00311   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( RAMRaster_double, 10,
00312     10, 10, false, TeDOUBLE, 0 ), "RAM Raster Allocation error" );    
00313     
00314   TEAGN_TRUE_OR_THROW( ( TePDIUtils::IsFloatBand( RAMRaster_double, 0 ) ),
00315     "Invalid result" );     
00316 };
00317 
00318 
00319 void buildDetailedBox_test()
00320 {
00321   TeNoProjection proj;
00322 
00323   TeRasterParams params;
00324   params.nBands( 1 );
00325   params.nlines_ = 3;
00326   params.ncols_ = 3;
00327   params.projection( &proj );
00328   
00329   TePDITypes::TePDIRasterPtrType ram_raster;
00330   TEAGN_TRUE_OR_THROW( 
00331     TePDIUtils::TeAllocRAMRaster( ram_raster, params, false ), 
00332     "RAM Raster Allocation error" );
00333     
00334   TePolygon box_polygon;
00335   
00336   TEAGN_TRUE_OR_THROW( TePDIUtils::buildDetailedBox( ram_raster,
00337     box_polygon), "detailed box building error" );
00338     
00339   TEAGN_TRUE_OR_THROW( ( box_polygon.size() == 1 ), 
00340     "Invalid linear rings number" );
00341   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ].size() == 9 ), 
00342     "Invalid points number" );
00343     
00344   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 0 ] == 
00345     ram_raster->index2Coord( TeCoord2D( 0, 0 ) ) ), 
00346     "Invalid point" );
00347   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 1 ] == 
00348     ram_raster->index2Coord( TeCoord2D( 1, 0 ) ) ), 
00349     "Invalid point" );
00350   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 2 ] == 
00351     ram_raster->index2Coord( TeCoord2D( 2, 0 ) ) ), 
00352     "Invalid point" );
00353   
00354   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 3 ] == 
00355     ram_raster->index2Coord( TeCoord2D( 2, 1 ) ) ), 
00356     "Invalid point" );
00357   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 4 ] == 
00358     ram_raster->index2Coord( TeCoord2D( 2, 2 ) ) ), 
00359     "Invalid point" );
00360     
00361   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 5 ] == 
00362     ram_raster->index2Coord( TeCoord2D( 1, 2 ) ) ), 
00363     "Invalid point" );
00364   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 6 ] == 
00365     ram_raster->index2Coord( TeCoord2D( 0, 2 ) ) ), 
00366     "Invalid point" );
00367     
00368   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 7 ] == 
00369     ram_raster->index2Coord( TeCoord2D( 0, 1 ) ) ), 
00370     "Invalid point" );
00371   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 8 ] == 
00372     ram_raster->index2Coord( TeCoord2D( 0, 0 ) ) ), 
00373     "Invalid point" );
00374             
00375 }
00376 
00377 
00378 void buildDetailedBBox_test()
00379 {
00380   TeNoProjection proj;
00381 
00382   TeRasterParams params;
00383   params.nBands( 1 );
00384   params.nlines_ = 3;
00385   params.ncols_ = 3;
00386   params.projection( &proj );
00387   
00388   TePDITypes::TePDIRasterPtrType ram_raster;
00389   TEAGN_TRUE_OR_THROW( 
00390     TePDIUtils::TeAllocRAMRaster( ram_raster, params, false ), 
00391     "RAM Raster Allocation error" );
00392     
00393   TePolygon box_polygon;
00394   
00395   TEAGN_TRUE_OR_THROW( TePDIUtils::buildDetailedBBox( ram_raster,
00396     box_polygon), "detailed box building error" );
00397     
00398   TEAGN_TRUE_OR_THROW( ( box_polygon.size() == 1 ), 
00399     "Invalid linear rings number" );
00400   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ].size() == 13 ), 
00401     "Invalid points number" );
00402     
00403   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 0 ] == 
00404     ram_raster->index2Coord( TeCoord2D( -0.5, -0.5 ) ) ), 
00405     "Invalid point" );
00406   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 1 ] == 
00407     ram_raster->index2Coord( TeCoord2D( 0.5, -0.5 ) ) ), 
00408     "Invalid point" );
00409   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 2 ] == 
00410     ram_raster->index2Coord( TeCoord2D( 1.5, -0.5 ) ) ), 
00411     "Invalid point" );
00412   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 3 ] == 
00413     ram_raster->index2Coord( TeCoord2D( 2.5, -0.5 ) ) ), 
00414     "Invalid point" );    
00415   
00416   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 4 ] == 
00417     ram_raster->index2Coord( TeCoord2D( 2.5, 0.5 ) ) ), 
00418     "Invalid point" );
00419   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 5 ] == 
00420     ram_raster->index2Coord( TeCoord2D( 2.5, 1.5 ) ) ), 
00421     "Invalid point" );
00422   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 6 ] == 
00423     ram_raster->index2Coord( TeCoord2D( 2.5, 2.5 ) ) ), 
00424     "Invalid point" );    
00425     
00426   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 7 ] == 
00427     ram_raster->index2Coord( TeCoord2D( 1.5, 2.5 ) ) ), 
00428     "Invalid point" );
00429   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 8 ] == 
00430     ram_raster->index2Coord( TeCoord2D( 0.5, 2.5 ) ) ), 
00431     "Invalid point" );
00432   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 9 ] == 
00433     ram_raster->index2Coord( TeCoord2D( -0.5, 2.5 ) ) ), 
00434     "Invalid point" );    
00435     
00436   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 10 ] == 
00437     ram_raster->index2Coord( TeCoord2D( -0.5, 1.5 ) ) ), 
00438     "Invalid point" );
00439   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 11 ] == 
00440     ram_raster->index2Coord( TeCoord2D( -0.5, 0.5 ) ) ), 
00441     "Invalid point" );    
00442   TEAGN_TRUE_OR_THROW( ( box_polygon[ 0 ][ 12 ] == 
00443     ram_raster->index2Coord( TeCoord2D( -0.5, -0.5 ) ) ), 
00444     "Invalid point" );    
00445 }
00446 
00447 void reprojectRaster_test()
00448 {
00449   TePDITypes::TePDIRasterPtrType inRaster( new TeRaster(
00450     std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop.tif" ), 'r' ) );
00451   TEAGN_TRUE_OR_THROW( inRaster->init(), "Unable to init inRaster" );
00452   
00453   TePDITypes::TePDIRasterPtrType ram_raster;
00454   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( ram_raster, 10,
00455     10, 10, false, TeUNSIGNEDCHAR, 0 ), "RAM Raster Allocation error" ); 
00456     
00457   //EPSG:4618-LatLong/SAD69
00458   TeSharedPtr< TeProjection > projPtr( TeProjectionFactory::make( 4618 ) );
00459   TEAGN_TRUE_OR_THROW( projPtr.isActive(), "Unable to build a projection" );    
00460     
00461   TEAGN_TRUE_OR_THROW( TePDIUtils::reprojectRaster( *inRaster,
00462      inRaster->params().nlines_, inRaster->params().ncols_,
00463      *projPtr, true, true, *ram_raster ),
00464     "Raster reprojection error" );
00465     
00466   TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( ram_raster,
00467     TEPDIEXAMPLESBINPATH "TePDIUtils_reprojectRaster_test.tif" ), "GeoTIF generation error" );        
00468     
00469   TEAGN_TRUE_OR_THROW( ram_raster->projection()->name() == "LatLong",
00470     "Invalid projection name" );
00471   TEAGN_CHECK_EPS( -50.616788,
00472     ram_raster->params().box().x1(), 0.000001, "Invalid box" );
00473   TEAGN_CHECK_EPS( -50.452947,
00474     ram_raster->params().box().x2(), 0.000001, "Invalid box" );    
00475   TEAGN_CHECK_EPS( -19.082162,
00476     ram_raster->params().box().y1(), 0.0001, "Invalid box" );
00477   TEAGN_CHECK_EPS( -18.930647,
00478     ram_raster->params().box().y2(), 0.0001, "Invalid box" );    
00479   TEAGN_CHECK_EPS( 0.000191,
00480     ram_raster->params().resx_, 0.0001, "Invalid box" );    
00481   TEAGN_CHECK_EPS( 0.000191,
00482     ram_raster->params().resy_, 0.0001, "Invalid box" );    
00483 }
00484 
00485 
00486 void TeRelation_test()
00487 {
00488   TeLinearRing r1;
00489   r1.add( TeCoord2D( 0, 0 ) );
00490   r1.add( TeCoord2D( 3, 0 ) );
00491   r1.add( TeCoord2D( 3, 3 ) );
00492   r1.add( TeCoord2D( 0, 3.3 ) );
00493   r1.add( TeCoord2D( 0, 0 ) );
00494   
00495   TeLinearRing r2;
00496   r2.add( TeCoord2D( 1, 1 ) );
00497   r2.add( TeCoord2D( 2, 1 ) );
00498   r2.add( TeCoord2D( 2, 2 ) );
00499   r2.add( TeCoord2D( 1, 2 ) );
00500   r2.add( TeCoord2D( 1, 1 ) );
00501   
00502   TePolygon pol1;
00503   pol1.add( r1 );
00504   pol1.add( r2 );
00505   
00506   TePDITileIndexer ti( pol1, 0.3 ); 
00507   
00508   TEAGN_TRUE_OR_THROW( 
00509     ( TePDIUtils::TeRelation( TeCoord2D( 1.5, 0.5 ), ti ) == TeINSIDE ),
00510     "Invalid relation" );   
00511   TEAGN_TRUE_OR_THROW( 
00512     ( TePDIUtils::TeRelation( TeCoord2D( 2.5, 1.5 ), ti ) == TeINSIDE ),
00513     "Invalid relation" );   
00514   TEAGN_TRUE_OR_THROW( 
00515     ( TePDIUtils::TeRelation( TeCoord2D( 1.5, 2.5 ), ti ) == TeINSIDE ),
00516     "Invalid relation" );   
00517   TEAGN_TRUE_OR_THROW( 
00518     ( TePDIUtils::TeRelation( TeCoord2D( 0.5, 1.5 ), ti ) == TeINSIDE ),
00519     "Invalid relation" );   
00520   TEAGN_TRUE_OR_THROW( 
00521     ( TePDIUtils::TeRelation( TeCoord2D( 0.5, 1.5 ), ti ) == TeINSIDE ),
00522     "Invalid relation" );   
00523   TEAGN_TRUE_OR_THROW( 
00524     ( TePDIUtils::TeRelation( TeCoord2D( 0.1, 3.1 ), ti ) == TeINSIDE ),
00525     "Invalid relation" );     
00526       
00527   TEAGN_TRUE_OR_THROW( 
00528     ( TePDIUtils::TeRelation( TeCoord2D( 1.5, 1.5 ), ti ) == TeOUTSIDE ),
00529     "Invalid relation" );
00530   TEAGN_TRUE_OR_THROW( 
00531     ( TePDIUtils::TeRelation( TeCoord2D( 2.5, 3.5 ), ti ) == TeOUTSIDE ),
00532     "Invalid relation" );
00533   TEAGN_TRUE_OR_THROW( 
00534     ( TePDIUtils::TeRelation( TeCoord2D( -1.0, 1.0 ), ti ) == TeOUTSIDE ),
00535     "Invalid relation" );    
00536   TEAGN_TRUE_OR_THROW( 
00537     ( TePDIUtils::TeRelation( TeCoord2D( -1.0, -1.0 ), ti ) == TeOUTSIDE ),
00538     "Invalid relation" );    
00539   TEAGN_TRUE_OR_THROW( 
00540     ( TePDIUtils::TeRelation( TeCoord2D( 1.0, -1.0 ), ti ) == TeOUTSIDE ),
00541     "Invalid relation" );  
00542   TEAGN_TRUE_OR_THROW( 
00543     ( TePDIUtils::TeRelation( TeCoord2D( 4.0, 4.0 ), ti ) == TeOUTSIDE ),
00544     "Invalid relation" );        
00545 }
00546 
00547 
00548 void makeSegmentSet_test()
00549 {
00550   TeLine2D l1;
00551   l1.add( TeCoord2D( 0,0 ) );
00552   l1.add( TeCoord2D( 1,0 ) );
00553   l1.add( TeCoord2D( 0,1 ) );
00554   l1.add( TeCoord2D( 0,0 ) );
00555   
00556   TeLinearRing lr1( l1 );
00557   
00558   TePolygon p1;
00559   p1.add( lr1 );
00560   
00561   TeLineSet ls1;
00562   TePDIUtils::makeSegmentSet( p1, ls1 );
00563   
00564   TEAGN_TRUE_OR_THROW( ( ls1.size() == 3 ), "Invalid line set size" );
00565   
00566   TEAGN_TRUE_OR_THROW( ( ls1[ 0 ].size() == 2 ), "Invalid segment size" );
00567   TEAGN_TRUE_OR_THROW( ( ls1[ 1 ].size() == 2 ), "Invalid segment size" );
00568   TEAGN_TRUE_OR_THROW( ( ls1[ 2 ].size() == 2 ), "Invalid segment size" );
00569   
00570   TEAGN_TRUE_OR_THROW( ( ls1[ 0 ][ 0 ] == TeCoord2D( 0, 0 ) ), 
00571     "Invalid point" );
00572   TEAGN_TRUE_OR_THROW( ( ls1[ 0 ][ 1 ] == TeCoord2D( 1, 0 ) ), 
00573     "Invalid point" );  
00574     
00575   TEAGN_TRUE_OR_THROW( ( ls1[ 1 ][ 0 ] == TeCoord2D( 1, 0 ) ), 
00576     "Invalid point" );
00577   TEAGN_TRUE_OR_THROW( ( ls1[ 1 ][ 1 ] == TeCoord2D( 0, 1 ) ), 
00578     "Invalid point" );      
00579 
00580   TEAGN_TRUE_OR_THROW( ( ls1[ 2 ][ 0 ] == TeCoord2D( 0, 1 ) ), 
00581     "Invalid point" );
00582   TEAGN_TRUE_OR_THROW( ( ls1[ 2 ][ 1 ] == TeCoord2D( 0, 0 ) ), 
00583     "Invalid point" );      
00584 }
00585 
00586 
00587 void TeSegSetIntersection_test()
00588 {
00589   {
00590     /* X test */
00591   
00592     TeLine2D line1;
00593     line1.add( TeCoord2D( -1, -1 ) );
00594     line1.add( TeCoord2D( 1, 1 ) );
00595     
00596     TeLineSet ls1;
00597     ls1.add( line1 );
00598     
00599     TeLine2D line2;
00600     line2.add( TeCoord2D( -1, 1 ) );
00601     line2.add( TeCoord2D( 1, -1 ) );
00602     
00603     TeLineSet ls2;
00604     ls2.add( line2 );    
00605     
00606     TePointSet ps1;
00607     TePDIUtils::TeSegSetIntersection( ls1, ls2, ps1 );
00608     
00609     TEAGN_TRUE_OR_THROW( ( ps1.size() == 1 ), "Invalid point set size" )
00610     TEAGN_TRUE_OR_THROW( ( ps1[ 0 ].elem() == TeCoord2D( 0, 0 ) ), 
00611       "Invalid intersection point" )
00612   }
00613   
00614   {
00615     /* + Test */
00616   
00617     TeLine2D line1;
00618     line1.add( TeCoord2D( -1, 0 ) );
00619     line1.add( TeCoord2D( 1, 0 ) );
00620     
00621     TeLineSet ls1;
00622     ls1.add( line1 );
00623     
00624     TeLine2D line2;
00625     line2.add( TeCoord2D( 0, 1 ) );
00626     line2.add( TeCoord2D( 0, -1 ) );
00627     
00628     TeLineSet ls2;
00629     ls2.add( line2 );    
00630     
00631     TePointSet ps1;
00632     TePDIUtils::TeSegSetIntersection( ls1, ls2, ps1 );
00633     
00634     TEAGN_TRUE_OR_THROW( ( ps1.size() == 1 ), "Invalid point set size" )
00635     TEAGN_TRUE_OR_THROW( ( ps1[ 0 ].elem() == TeCoord2D( 0, 0 ) ), 
00636       "Invalid intersection point" )
00637   }  
00638   
00639   {
00640     /* Y Axis Parallel line 1 Test */
00641   
00642     TeLine2D line1;
00643     line1.add( TeCoord2D( 0, 1 ) );
00644     line1.add( TeCoord2D( 0, -1 ) );
00645     
00646     TeLineSet ls1;
00647     ls1.add( line1 );
00648     
00649     TeLine2D line2;
00650     line2.add( TeCoord2D( -1, -1 ) );
00651     line2.add( TeCoord2D( 1, 1 ) );
00652     
00653     TeLineSet ls2;
00654     ls2.add( line2 );    
00655     
00656     TePointSet ps1;
00657     TePDIUtils::TeSegSetIntersection( ls1, ls2, ps1 );
00658     
00659     TEAGN_TRUE_OR_THROW( ( ps1.size() == 1 ), "Invalid point set size" )
00660     TEAGN_TRUE_OR_THROW( ( ps1[ 0 ].elem() == TeCoord2D( 0, 0 ) ), 
00661       "Invalid intersection point" )
00662   }  
00663   
00664   {
00665     /* Y Axis Parallel line 2 Test */
00666   
00667     TeLine2D line1;
00668     line1.add( TeCoord2D( -1, -1 ) );
00669     line1.add( TeCoord2D( 1, 1 ) );
00670     
00671     TeLineSet ls1;
00672     ls1.add( line1 );
00673     
00674     TeLine2D line2;
00675     line2.add( TeCoord2D( 0, 1 ) );
00676     line2.add( TeCoord2D( 0, -1 ) );
00677     
00678     TeLineSet ls2;
00679     ls2.add( line2 );    
00680     
00681     TePointSet ps1;
00682     TePDIUtils::TeSegSetIntersection( ls1, ls2, ps1 );
00683     
00684     TEAGN_TRUE_OR_THROW( ( ps1.size() == 1 ), "Invalid point set size" )
00685     TEAGN_TRUE_OR_THROW( ( ps1[ 0 ].elem() == TeCoord2D( 0, 0 ) ), 
00686       "Invalid intersection point" )
00687   }    
00688   
00689   {
00690     /* Y Axis Parallel line 2 and line 2 Test */
00691   
00692     TeLine2D line1;
00693     line1.add( TeCoord2D( 0, 1 ) );
00694     line1.add( TeCoord2D( 0, 1 ) );
00695     
00696     TeLineSet ls1;
00697     ls1.add( line1 );
00698     
00699     TeLine2D line2;
00700     line2.add( TeCoord2D( 0, 1 ) );
00701     line2.add( TeCoord2D( 0, 1 ) );
00702     
00703     TeLineSet ls2;
00704     ls2.add( line2 );    
00705     
00706     TePointSet ps1;
00707     TePDIUtils::TeSegSetIntersection( ls1, ls2, ps1 );
00708     
00709     TEAGN_TRUE_OR_THROW( ( ps1.size() == 0 ), "Invalid point set size" )
00710   }
00711   
00712   {
00713     /* Parallel lines Test */
00714   
00715     TeLine2D line1;
00716     line1.add( TeCoord2D( -1, 1 ) );
00717     line1.add( TeCoord2D( 1, 1 ) );
00718     
00719     TeLineSet ls1;
00720     ls1.add( line1 );
00721     
00722     TeLine2D line2;
00723     line2.add( TeCoord2D( -1, -1 ) );
00724     line2.add( TeCoord2D( 1, -1 ) );
00725     
00726     TeLineSet ls2;
00727     ls2.add( line2 );    
00728     
00729     TePointSet ps1;
00730     TePDIUtils::TeSegSetIntersection( ls1, ls2, ps1 );
00731     
00732     TEAGN_TRUE_OR_THROW( ( ps1.size() == 0 ), "Invalid point set size" )
00733   }  
00734   
00735   {
00736     /* Non-intercepted segments Test */
00737   
00738     TeLine2D line1;
00739     line1.add( TeCoord2D( 0, 0 ) );
00740     line1.add( TeCoord2D( 2, 2 ) );
00741     
00742     TeLineSet ls1;
00743     ls1.add( line1 );
00744     
00745     TeLine2D line2;
00746     line2.add( TeCoord2D( 1, 0 ) );
00747     line2.add( TeCoord2D( 2, 0 ) );
00748     
00749     TeLineSet ls2;
00750     ls2.add( line2 );    
00751     
00752     TePointSet ps1;
00753     TePDIUtils::TeSegSetIntersection( ls1, ls2, ps1 );
00754     
00755     TEAGN_TRUE_OR_THROW( ( ps1.size() == 0 ), "Invalid point set size" )
00756   }  
00757   
00758 }
00759 
00760 
00761 void getBandMinMaxValues_test()
00762 {
00763   TePDITypes::TePDIRasterPtrType RAMRaster;
00764   
00765   TeRasterParams params;
00766   params.nBands( 1 );
00767   params.nlines_ = 1;
00768   params.ncols_ = 3;
00769   params.setDataType( TeUNSIGNEDCHAR, -1 );
00770 
00771   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( RAMRaster, params, 
00772     TePDIUtils::TePDIUtilsAutoMemPol ), "RAM Raster Allocation error" );
00773     
00774   TEAGN_TRUE_OR_THROW( RAMRaster->setElement( 0, 0, 0.0, 0 ),
00775     "setElement error" );
00776   TEAGN_TRUE_OR_THROW( RAMRaster->setElement( 1, 0, 1.0, 0 ),
00777     "setElement error" );
00778   TEAGN_TRUE_OR_THROW( RAMRaster->setElement( 2, 0, 2.0, 0 ),
00779     "setElement error" );
00780    
00781   double min = -1.0;
00782   double max = 10.0;
00783   TePDIUtils::getBandMinMaxValues( RAMRaster, 0, false, 0, min, max );
00784   
00785   TEAGN_CHECK_EPS( min, 0.0, 0.0, "invalid min value" )
00786   TEAGN_CHECK_EPS( max, 2.0, 0.0, "invalid max value" )
00787 }
00788 
00789 
00790 void convert2MultiBand_test()
00791 {
00792   TePDITypes::TePDIRasterPtrType RAMRaster;
00793   
00794   TeRasterParams params;
00795   params.nBands( 1 );
00796   params.setDataType( TeUNSIGNEDCHAR, -1 );
00797   
00798   TeProjectionParams projparams;
00799   projparams.name = "NoProjection";
00800   TeSharedPtr< TeProjection > proj( TeProjectionFactory::make( 
00801     projparams ) );          
00802   params.projection( proj.nakedPointer() );   
00803   
00804   params.setNLinesNColumns( 1, 3 );
00805   
00806   params.setPhotometric( TeRasterParams::TePallete );
00807   
00808   params.lutr_.push_back( 255 );
00809   params.lutg_.push_back( 0 );
00810   params.lutb_.push_back( 0 );
00811 
00812   params.lutr_.push_back( 0 );
00813   params.lutg_.push_back( 255 );
00814   params.lutb_.push_back( 0 );
00815   
00816   params.lutr_.push_back( 0 );
00817   params.lutg_.push_back( 0 );
00818   params.lutb_.push_back( 255 );  
00819   
00820   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( RAMRaster, params, 
00821     TePDIUtils::TePDIUtilsAutoMemPol ), "RAM Raster Allocation error" );
00822     
00823   TEAGN_TRUE_OR_THROW( RAMRaster->setElement( 0, 0, 0, 0), 
00824     "setElement error" );
00825   TEAGN_TRUE_OR_THROW( RAMRaster->setElement( 1, 0, 1, 0),
00826     "setElement error" );
00827   TEAGN_TRUE_OR_THROW( RAMRaster->setElement( 2, 0, 2, 0),
00828     "setElement error" );
00829     
00830   TePDITypes::TePDIRasterPtrType RAMRaster2;
00831   
00832   TEAGN_TRUE_OR_THROW( TePDIUtils::convert2MultiBand( RAMRaster, true, 
00833     RAMRaster2 ), "MultiBand conversion error" );
00834     
00835   TEAGN_TRUE_OR_THROW( RAMRaster2.isActive(), "Inactive pointer" )
00836   TEAGN_TRUE_OR_THROW( ( RAMRaster2->params().nlines_ == 1 ), 
00837     "Invalid lines" )
00838   TEAGN_TRUE_OR_THROW( ( RAMRaster2->params().ncols_ == 3 ), 
00839     "Invalid columns" )
00840   TEAGN_TRUE_OR_THROW( ( RAMRaster2->params().nBands() == 3 ), 
00841     "Invalid lines" )
00842     
00843   TEAGN_TRUE_OR_THROW( ( RAMRaster2->params().photometric_[ 0 ] == 
00844     TeRasterParams::TeMultiBand ), "Invalid photometric interpretation" )
00845   TEAGN_TRUE_OR_THROW( ( RAMRaster2->params().photometric_[ 1 ] == 
00846     TeRasterParams::TeMultiBand ), "Invalid photometric interpretation" )
00847   TEAGN_TRUE_OR_THROW( ( RAMRaster2->params().photometric_[ 2 ] == 
00848     TeRasterParams::TeMultiBand ), "Invalid photometric interpretation" )
00849     
00850   double value = -1.0;
00851   
00852   TEAGN_TRUE_OR_THROW( RAMRaster2->getElement( 0,0, value, 0),
00853     "getElement error" )
00854   TEAGN_CHECK_EPS( value, 255, 0, "wrong value" );
00855   
00856   TEAGN_TRUE_OR_THROW( RAMRaster2->getElement( 0,0, value, 1),
00857     "getElement error" )
00858   TEAGN_CHECK_EPS( value, 0, 0, "wrong value" );
00859   
00860   TEAGN_TRUE_OR_THROW( RAMRaster2->getElement( 0,0, value, 2),
00861     "getElement error" )
00862   TEAGN_CHECK_EPS( value, 0, 0, "wrong value" );    
00863   
00864   
00865   TEAGN_TRUE_OR_THROW( RAMRaster2->getElement( 1,0, value, 0),
00866     "getElement error" )
00867   TEAGN_CHECK_EPS( value, 0, 0, "wrong value" );
00868   
00869   TEAGN_TRUE_OR_THROW( RAMRaster2->getElement( 1,0, value, 1),
00870     "getElement error" )
00871   TEAGN_CHECK_EPS( value, 255, 0, "wrong value" );
00872 
00873   TEAGN_TRUE_OR_THROW( RAMRaster2->getElement( 1,0, value, 2),
00874     "getElement error" )
00875   TEAGN_CHECK_EPS( value, 0, 0, "wrong value" );
00876   
00877   
00878   TEAGN_TRUE_OR_THROW( RAMRaster2->getElement( 2,0, value, 0),
00879     "getElement error" )
00880   TEAGN_CHECK_EPS( value, 0, 0, "wrong value" );
00881   
00882   TEAGN_TRUE_OR_THROW( RAMRaster2->getElement( 2,0, value, 1),
00883     "getElement error" )
00884   TEAGN_CHECK_EPS( value, 0, 0, "wrong value" );
00885 
00886   TEAGN_TRUE_OR_THROW( RAMRaster2->getElement( 2,0, value, 2),
00887     "getElement error" )
00888   TEAGN_CHECK_EPS( value, 255, 0, "wrong value" );
00889 }
00890 
00891 
00892 void compareGeometryPoints_tests()
00893 {
00894   TePolygonSet ps1;
00895   {
00896     TeLinearRing lr;
00897     lr.add( TeCoord2D( 0, 0 ) );
00898     lr.add( TeCoord2D( 1, 0 ) );
00899     lr.add( TeCoord2D( 1, 1 ) );
00900     lr.add( TeCoord2D( 0, 1 ) );
00901     lr.add( TeCoord2D( 0, 0 ) );
00902     
00903     TePolygon pol;
00904     pol.add( lr );
00905     
00906     ps1.add( pol );
00907   }
00908   
00909   TePolygonSet ps2;
00910   {
00911     TeLinearRing lr;
00912     lr.add( TeCoord2D( 0, 0 ) );
00913     lr.add( TeCoord2D( 1, 0 ) );
00914     lr.add( TeCoord2D( 1, 1 ) );
00915     lr.add( TeCoord2D( 0, 1 ) );
00916     lr.add( TeCoord2D( 0, 0 ) );
00917     
00918     TePolygon pol;
00919     pol.add( lr );
00920     
00921     ps2.add( pol );
00922   }  
00923   
00924   TEAGN_TRUE_OR_THROW( TePDIUtils::compareGeometryPoints( ps1, ps2 ),
00925     "Invalid compareGeometryPoints result" )
00926 }
00927 
00928 
00929 void resampleRaster_test()
00930 {
00931   TePDITypes::TePDIRasterPtrType input_raster;
00932   TePDITypes::TePDIRasterPtrType output_raster;
00933 
00934   TeRasterParams input_raster_params;
00935   input_raster_params.nBands( 1 );
00936   input_raster_params.setDataType( TeDOUBLE, -1 );
00937   input_raster_params.setNLinesNColumns( 4, 4 );
00938     
00939   TeRasterParams output_raster_params;
00940   output_raster_params.nBands( 1 );
00941   output_raster_params.setDataType( TeDOUBLE, -1 );
00942   output_raster_params.setNLinesNColumns( 2, 2 );
00943 
00944   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( input_raster, 
00945     input_raster_params, TePDIUtils::TePDIUtilsAutoMemPol ), 
00946     "RAM Raster Allocation error" );
00947   TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster, 
00948     output_raster_params, TePDIUtils::TePDIUtilsAutoMemPol ), 
00949     "RAM Raster Allocation error" );
00950     
00951   TEAGN_TRUE_OR_THROW( input_raster->setElement( 0, 0, 1.0, 0 ),
00952     "setElement error" );
00953   TEAGN_TRUE_OR_THROW( input_raster->setElement( 1, 0, 1.0, 0 ),
00954     "setElement error" );
00955   TEAGN_TRUE_OR_THROW( input_raster->setElement( 2, 0, 1.0, 0 ),
00956     "setElement error" );
00957   TEAGN_TRUE_OR_THROW( input_raster->setElement( 3, 0, 1.0, 0 ),
00958     "setElement error" );
00959         
00960   TEAGN_TRUE_OR_THROW( input_raster->setElement( 0, 1, 1.0, 0 ),
00961     "setElement error" );
00962   TEAGN_TRUE_OR_THROW( input_raster->setElement( 1, 1, 1.0, 0 ),
00963     "setElement error" );    
00964   TEAGN_TRUE_OR_THROW( input_raster->setElement( 2, 1, 1.0, 0 ),
00965     "setElement error" );  
00966   TEAGN_TRUE_OR_THROW( input_raster->setElement( 3, 1, 1.0, 0 ),
00967     "setElement error" );       
00968 
00969   TEAGN_TRUE_OR_THROW( input_raster->setElement( 0, 2, 1.0, 0 ),
00970     "setElement error" );
00971   TEAGN_TRUE_OR_THROW( input_raster->setElement( 1, 2, 1.0, 0 ),
00972     "setElement error" );    
00973   TEAGN_TRUE_OR_THROW( input_raster->setElement( 2, 2, 1.0, 0 ),
00974     "setElement error" );    
00975   TEAGN_TRUE_OR_THROW( input_raster->setElement( 3, 2, 1.0, 0 ),
00976     "setElement error" ); 
00977     
00978   TEAGN_TRUE_OR_THROW( input_raster->setElement( 0, 3, 1.0, 0 ),
00979     "setElement error" );
00980   TEAGN_TRUE_OR_THROW( input_raster->setElement( 1, 3, 1.0, 0 ),
00981     "setElement error" );
00982   TEAGN_TRUE_OR_THROW( input_raster->setElement( 2, 3, 1.0, 0 ),
00983     "setElement error" );
00984   TEAGN_TRUE_OR_THROW( input_raster->setElement( 3, 3, 1.0, 0 ),
00985     "setElement error" );
00986     
00987   double resolution_ratio = 2.0;
00988   
00989   TEAGN_TRUE_OR_THROW( TePDIUtils::resampleRasterByRes( input_raster, 
00990     output_raster,
00991     resolution_ratio , resolution_ratio, 
00992     TePDIInterpolator::NNMethod,
00993     true ), 
00994     "Raster resample error" )
00995   
00996   
00997   TEAGN_CHECK_EPS( output_raster->params().nlines_, 
00998     ( input_raster->params().nlines_ / resolution_ratio ), 0.0, 
00999     "invalid number of lines" )
01000   TEAGN_CHECK_EPS( output_raster->params().ncols_, 
01001     ( input_raster->params().ncols_ / resolution_ratio ), 0.0, 
01002     "invalid number of columns" )
01003   TEAGN_CHECK_EPS( output_raster->params().resx_, 3, 0.0, 
01004     "invalid X resolution" )
01005   TEAGN_CHECK_EPS( output_raster->params().resy_, 3, 0.0, 
01006     "invalid Y() resolution" )
01007   TEAGN_CHECK_EPS( output_raster->params().nBands(), 
01008     input_raster->params().nBands(), 0.0, 
01009     "invalid bands number" )
01010     
01011   double value = 0;
01012     
01013   TEAGN_TRUE_OR_THROW( output_raster->getElement( 0, 0, value, 0 ),
01014     "getElement error" )
01015   TEAGN_CHECK_EPS( value, 1.0, 0.0, "Incorrect value" )
01016   
01017   TEAGN_TRUE_OR_THROW( output_raster->getElement( 0, 1, value, 0 ),
01018     "getElement error" )
01019   TEAGN_CHECK_EPS( value, 1.0, 0.0, "Incorrect value" )
01020   
01021   TEAGN_TRUE_OR_THROW( output_raster->getElement( 1, 0, value, 0 ),
01022     "getElement error" )
01023   TEAGN_CHECK_EPS( value, 1.0, 0.0, "Incorrect value" )  
01024   
01025   TEAGN_TRUE_OR_THROW( output_raster->getElement( 1, 1, value, 0 ),
01026     "getElement error" )
01027   TEAGN_CHECK_EPS( value, 1.0, 0.0, "Incorrect value" )  
01028 }
01029 
01030 
01031 int main()
01032 {
01033   TEAGN_LOGMSG( "Test started." );
01034 
01035   TeStdIOProgress pi;
01036   TeProgress::setProgressInterf( dynamic_cast< TeProgressBase* >( &pi ) );  
01037   
01038   TeInitRasterDecoders();
01039   
01040   buildDetailedBox_test();
01041   buildDetailedBBox_test();
01042   resampleRaster_test();
01043   getBandMinMaxValues_test();
01044   makeSegmentSet_test();
01045   TeSegSetIntersection_test();
01046   TeRelation_test();
01047   TeAllocRAMRaster_usingparams_test();
01048   TeAllocRAMRaster1_test();
01049   TeAllocRAMRaster_templateraster_test();
01050   raster_compare_test();
01051   TeGetRasterMinMaxBounds_test();
01052   TeGetRasterReqMem_test();    
01053   IsFloatBand_test();
01054   TeRaster2Geotiff_test();
01055   TeRaster2RGBGeotiff_test();
01056   TeRaster2Geotiff_deprecated_test();
01057   TeRaster2Jpeg_test();
01058   TeAllocMemoryMappedRaster_test();
01059   convert2MultiBand_test();
01060   compareGeometryPoints_tests();
01061   reprojectRaster_test();
01062 
01063   TEAGN_LOGMSG( "Test OK." );
01064   return EXIT_SUCCESS;
01065 }

Generated on Sun Jul 29 04:01:25 2012 for TerraLib - Development Source by  doxygen 1.5.3