| TerraLib 4.1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files
- Examples

TePDIRegister_test.cpp

Shows how to use this class.

    #define TEAGN_ENABLE_STDOUT_LOG

    #include <TePDIExamplesBase.hpp>

    #include <TePDIRegister.hpp>

    #include <TePDIParameters.hpp>
    #include <TeAgnostic.h>
    #include <TePDIUtils.hpp>

    #include <TeInitRasterDecoders.h>
    #include <TeProgress.h>
    #include <TeStdIOProgress.h>
    #include <TePrecision.h>

    void Register_test1()
    {
      TePDIParameters params;

      TePDITypes::TePDIRasterPtrType reference_raster( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop_A.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( reference_raster->init(),
        "Unable to init reference_raster" );

      TePDITypes::TePDIRasterPtrType adjust_disk_raster( new TeRaster(
        std::string( TEPDIEXAMPLESRESPATH "cbers_b2_crop_B_contraste.tif" ), 'r' ) );
      TEAGN_TRUE_OR_THROW( adjust_disk_raster->init(),
        "Unable to init adjust_disk_raster" );

      TePDITypes::TePDIRasterPtrType adjust_raster( new TeRaster() );
      {
        TeRasterParams adjust_raster_params;

        adjust_raster_params.setDataType( TeUNSIGNEDCHAR, -1 );
        adjust_raster_params.nBands( 1 );
        adjust_raster_params.setNLinesNColumns(
          adjust_disk_raster->params().nlines_,
          adjust_disk_raster->params().ncols_ );

        TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( adjust_raster,
          adjust_raster_params, false ), "adjust_raster Alloc error" );
        TEAGN_TRUE_OR_THROW( TePDIUtils::TeCopyRasterBands( adjust_disk_raster,
          adjust_raster, false, false ), "Pixel copy error" );
      }

      TePDITypes::TePDIRasterPtrType output_raster;
      TEAGN_TRUE_OR_THROW( TePDIUtils::TeAllocRAMRaster( output_raster,
        1, 1, 1, false, TeUNSIGNEDCHAR, 0 ), "output_raster Alloc error" );

      TePDITypes::TeProjParamsPtrType proj_params( new TeProjectionParams );
      *proj_params = reference_raster->projection()->params();
      params.SetParameter( "proj_params" , proj_params );

      params.SetParameter( "res_x" , reference_raster->params().resx_ );
      params.SetParameter( "res_y" , reference_raster->params().resy_ );

      params.SetParameter( "adjust_raster" , adjust_raster );
      params.SetParameter( "output_raster" , output_raster );
      params.SetParameter( "gt_name" , std::string( "affine" ) );
      params.SetParameter( "dummy_value" , (double)0.0 );
      params.SetParameter( "interpolator" , TePDIInterpolator::NNMethod );

      std::vector< int > adjust_channels;
      adjust_channels.push_back( 0 );
      params.SetParameter( "adjust_channels" , adjust_channels );

      TePDITypes::TeCoordPairVectPtrType tie_points( new TeCoordPairVect );

      tie_points->push_back(
        TeCoordPair( TeCoord2D( 278, 269 ),
        reference_raster->index2Coord( TeCoord2D( 492, 502 ) ) ) );
      tie_points->push_back(
        TeCoordPair( TeCoord2D( 282, 88 ),
        reference_raster->index2Coord( TeCoord2D( 495, 320 ) ) ) );
      tie_points->push_back(
        TeCoordPair( TeCoord2D( 66, 12 ),
        reference_raster->index2Coord( TeCoord2D( 279, 245 ) ) ) );

      params.SetParameter( "tie_points" , tie_points );

      TePDIRegister algo;
      TEAGN_TRUE_OR_THROW( algo.Reset(params), "Apply error" );
      TEAGN_TRUE_OR_THROW( algo.Apply(), "Apply error" );

      TEAGN_TRUE_OR_THROW( TePDIUtils::TeRaster2Geotiff( output_raster,
        TEPDIEXAMPLESBINPATH "Register_test1.tif" ), "GeoTIF generation error" );

      TEAGN_CHECK_EPS( output_raster->params().nlines_,
        adjust_disk_raster->params().nlines_, 7.0, "Invalid lines number" );
      TEAGN_CHECK_EPS( output_raster->params().ncols_,
        adjust_disk_raster->params().ncols_, 2.0, "Invalid cols number" );
      TEAGN_CHECK_EPS( output_raster->params().nBands(),
        adjust_disk_raster->params().nBands(), 0.0001, "Invalid bands number" );
      TEAGN_CHECK_EPS( output_raster->params().resx_,
        adjust_disk_raster->params().resx_, 0.0001, "Invalid x res" );
      TEAGN_CHECK_EPS( output_raster->params().resy_,
        adjust_disk_raster->params().resy_, 0.0001, "Invalid y res" );
      TEAGN_CHECK_EPS( output_raster->params().box().x1(),
        adjust_disk_raster->params().box().x1(), 29.0, "Invalid box x1" );
      TEAGN_CHECK_EPS( output_raster->params().box().x2(),
        adjust_disk_raster->params().box().x2(), 22.0, "Invalid box x2" );
      TEAGN_CHECK_EPS( output_raster->params().box().y1(),
        adjust_disk_raster->params().box().y1(), 100.0, "Invalid box y1" );
      TEAGN_CHECK_EPS( output_raster->params().box().y2(),
        adjust_disk_raster->params().box().y2(), 51.0, "Invalid box y2" );

      reference_raster.reset();
      adjust_disk_raster.reset();
      adjust_raster.reset();
      output_raster.reset();
      tie_points.reset();
    }

    int main()
    {
      TEAGN_LOGMSG( "Test started." );

      try{
        TeInitRasterDecoders();

        TeStdIOProgress pi;
        TeProgress::setProgressInterf( dynamic_cast< TeProgressBase* >( &pi ) );

        TePrecision::instance().setPrecision( 0.000000000001 );

        Register_test1();
      }
      catch( const TeException& e ){
        TEAGN_LOGERR( "Test Failed - " + e.message() );
        return EXIT_FAILURE;
      }

      TEAGN_LOGMSG( "Test OK." );
      return EXIT_SUCCESS;
    }

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines