26 #include "../geometry/MultiPoint.h"
27 #include "../geometry/Point.h"
28 #include "../geometry/Polygon.h"
29 #include "../geometry/Envelope.h"
30 #include "../geometry/GTFactory.h"
31 #include "../geometry/GTFilter.h"
32 #include "../memory/CachedRaster.h"
33 #include "../raster/Grid.h"
34 #include "../common/progress/TaskProgress.h"
42 #include <boost/lexical_cast.hpp>
68 m_inRasterBands2Process.clear();
69 m_inRasterTPLocationBands.clear();
70 m_referenceRastersPtr = 0;
71 m_referenceRastersWeights.clear();
72 m_referenceTPLocationBands.clear();
73 m_enableMultiThread =
true;
74 m_enableProgress =
false;
76 m_locatorParams.reset();
77 m_minInRasterCoveredAreaPercent = 25.0;
78 m_minrReferenceRasterCoveredAreaPercent = 50.0;
79 m_minrReferenceRasterRequiredTiePointsFactor = 1.5;
80 m_inRasterSubSectorsFactor = 3;
81 m_inRasterExpectedRowError = 10;
82 m_inRasterExpectedColError = 10;
83 m_inRasterExpectedRowDisplacement = 0;
84 m_inRasterExpectedColDisplacement = 0;
85 m_processAllReferenceRasters =
true;
86 m_enableRasterCache =
true;
87 m_geomTransfName =
"Affine";
88 m_geomTransfMaxTiePointError = 2.0;
89 m_outliersRemotionAssurance = 0.75;
90 m_outliersRemotionMaxIterations = 0;
91 m_outputNoDataValue = 0.0;
153 m_inRasterCoveredAreaPercent = 0.0;
156 m_outputRasterPtr.reset();
157 m_matchingResult.clear();
158 m_geomTransPtr.reset();
194 throw( te::rp::Exception )
219 std::auto_ptr< te::common::TaskProgress > progressPtr;
224 progressPtr->setTotalSteps(
227 progressPtr->setMessage(
"Analysing reference images" );
236 std::auto_ptr< te::mem::CachedRaster > inputCachedRasterPtr;
242 inputRasterPtr = inputCachedRasterPtr.get();
247 std::vector< std::vector< unsigned int > > refRastersIndexesBySector(
250 unsigned int validReferenceRastersNumber = 0;
255 std::vector< double > referenceRastersWeights;
278 inRasterExpectedXError + inRasterExpectedXDisplacement;
280 inRasterExpectedXError + inRasterExpectedXDisplacement;
283 inRasterExpectedYError + inRasterExpectedYDisplacement;
285 inRasterExpectedYError + inRasterExpectedYDisplacement;
289 std::vector< te::gm::Envelope > selectedRefRastersBBoxes;
290 std::vector< unsigned int > selectedRefRastersIndexes;
308 ( refRasterEnvelope.getLowerLeftX() > searchAreaMinX )
309 && ( refRasterEnvelope.getLowerLeftX() < searchAreaMaxX )
310 && ( refRasterEnvelope.getUpperRightX() > searchAreaMinX )
311 && ( refRasterEnvelope.getUpperRightX() < searchAreaMaxX )
312 && ( refRasterEnvelope.getLowerLeftY() > searchAreaMinY )
313 && ( refRasterEnvelope.getLowerLeftY() < searchAreaMaxY )
314 && ( refRasterEnvelope.getUpperRightY() > searchAreaMinY )
315 && ( refRasterEnvelope.getUpperRightY() < searchAreaMaxY )
318 selectedRefRastersBBoxes.push_back( refRasterEnvelope );
319 selectedRefRastersIndexes.push_back(
321 ++validReferenceRastersNumber;
332 progressPtr->pulse();
333 if( ! progressPtr->isActive() )
return false;
339 double sectoXSize = ( searchAreaMaxX - searchAreaMinX ) /
341 double sectoYSize = ( searchAreaMaxY - searchAreaMinY ) /
345 unsigned int sectoXOff = 0;
346 unsigned int sectoYOff = 0;
347 unsigned int refRastersIndexesBySectorIdx = 0;
349 for(
unsigned int selectedRefRastersBBoxesIdx = 0 ; selectedRefRastersBBoxesIdx <
350 selectedRefRastersBBoxes.size() ; ++selectedRefRastersBBoxesIdx )
352 center = selectedRefRastersBBoxes[ selectedRefRastersBBoxesIdx ].getCenter();
353 sectoXOff = (
unsigned int)std::floor( ( center.
x - searchAreaMinX ) / sectoXSize );
354 sectoYOff = (
unsigned int)std::floor( ( center.
y - searchAreaMinY ) / sectoYSize );
358 assert( refRastersIndexesBySectorIdx < refRastersIndexesBySector.size() );
360 refRastersIndexesBySector[ refRastersIndexesBySectorIdx ].push_back(
361 selectedRefRastersIndexes[ selectedRefRastersBBoxesIdx ] );
367 unsigned int sectorRastersIndexesIdx = 0;
368 unsigned int sectorRastersIndexesIdxBound = 0;
369 unsigned int sectorRastersIndexesNextIdx = 0;
370 unsigned int rasterIdx = 0;
371 unsigned int nextRasterIdx = 0;
373 for( refRastersIndexesBySectorIdx = 0 ; refRastersIndexesBySectorIdx <
374 refRastersIndexesBySector.size() ; ++refRastersIndexesBySectorIdx )
376 std::vector< unsigned int >& sectorRastersIndexes =
377 refRastersIndexesBySector[ refRastersIndexesBySectorIdx ];
379 if( sectorRastersIndexes.size() > 1 )
381 sectorRastersIndexesIdxBound = sectorRastersIndexes.size() - 1;
383 while( sectorRastersIndexesIdxBound != 0 )
385 for( sectorRastersIndexesIdx = 0 ; sectorRastersIndexesIdx <
386 sectorRastersIndexesIdxBound ; ++sectorRastersIndexesIdx )
388 sectorRastersIndexesNextIdx = sectorRastersIndexesIdx + 1;
390 rasterIdx = sectorRastersIndexes[ sectorRastersIndexesIdx ];
391 nextRasterIdx = sectorRastersIndexes[ sectorRastersIndexesNextIdx ];
394 referenceRastersWeights[ rasterIdx ]
396 referenceRastersWeights[ nextRasterIdx ]
399 sectorRastersIndexes[ sectorRastersIndexesIdx ] = nextRasterIdx;
400 sectorRastersIndexes[ sectorRastersIndexesNextIdx ] = rasterIdx;
404 --sectorRastersIndexesIdxBound;
417 progressPtr->setTotalSteps( validReferenceRastersNumber );
419 progressPtr->setMessage(
"Matching reference images" );
428 const unsigned int minimumRequiredTiePointsNumber = (
unsigned int)
432 ((
double)outParamsPtr->
m_geomTransPtr->getMinRequiredTiePoints() )
436 std::vector< InternalMatchingInfo > refRastersMatchingInfo;
438 bool continueOnLoop =
true;
440 while( continueOnLoop )
442 bool aRefRasterWasProcessed =
false;
444 for(
unsigned int refRastersIndexesBySectorIdx = 0 ; refRastersIndexesBySectorIdx <
445 refRastersIndexesBySector.size() ; ++refRastersIndexesBySectorIdx )
447 std::vector< unsigned int >& sector =
448 refRastersIndexesBySector[ refRastersIndexesBySectorIdx ];
450 for(
unsigned int sectorIdx = 0 ; sectorIdx < sector.size() ; ++sectorIdx )
452 const unsigned int refRasterIdx = sector[ sectorIdx ];
454 if( refRasterIdx < m_inputParameters.m_referenceRastersPtr->getObjsCount() )
458 sector[ sectorIdx ] = std::numeric_limits< unsigned int >::max();
460 aRefRasterWasProcessed =
true;
465 "Rasters feeder mover error" );
475 std::auto_ptr< te::rst::Raster > reprojectedRefRasterPtr;
477 if( inputRasterPtr->
getSRID() != refRasterPtr->getSRID() )
479 std::map< std::string, std::string > rInfo;
480 rInfo[
"FORCE_MEM_DRIVER" ] =
"TRUE";
482 reprojectedRefRasterPtr.reset( refRasterPtr->transform(
486 "Raster reprojection error" );
488 refRasterPtr = reprojectedRefRasterPtr.get();
496 const double searchAreaULX = refRasterPtr->getGrid()->getExtent()->getLowerLeftX();
497 const double searchAreaULY = refRasterPtr->getGrid()->getExtent()->getUpperRightY();
501 double searchAreaULRow = 0;
502 double searchAreaULCol = 0;
503 inputRasterPtr->
getGrid()->
geoToGrid( searchAreaULX, searchAreaULY, searchAreaULCol, searchAreaULRow );
505 double searchAreaLRRow = searchAreaULRow - 1.0 + ((double)refRasterPtr->getNumberOfRows());
506 double searchAreaLRCol = searchAreaULCol - 1.0 + ((double)refRasterPtr->getNumberOfColumns());
510 searchAreaULRow = std::max( 0.0, searchAreaULRow );
511 searchAreaULRow = std::min( searchAreaULRow, (
double)( inputRasterPtr->
getNumberOfRows() - 1 ) );
515 searchAreaLRRow = std::max( 0.0, searchAreaLRRow );
516 searchAreaLRRow = std::min( searchAreaLRRow, (
double)( inputRasterPtr->
getNumberOfRows() - 1 ) );
520 searchAreaULCol = std::max( 0.0, searchAreaULCol );
521 searchAreaULCol = std::min( searchAreaULCol, (
double)( inputRasterPtr->
getNumberOfColumns() - 1 ) );
525 searchAreaLRCol = std::max( 0.0, searchAreaLRCol );
526 searchAreaLRCol = std::min( searchAreaLRCol, (
double)( inputRasterPtr->
getNumberOfColumns() - 1 ) );
528 const unsigned int searchAreaWidth = (
unsigned int)( searchAreaLRCol - searchAreaULCol + 1.0 );
529 const unsigned int searchAreaHeight = (
unsigned int)( searchAreaLRRow - searchAreaULRow + 1.0 );
531 if( ( searchAreaWidth > 1 ) && ( searchAreaHeight > 1 ) )
533 outParamsPtr->
m_matchingResult[ refRasterIdx ].m_searchAreaRowStart = (
unsigned int)
535 outParamsPtr->
m_matchingResult[ refRasterIdx ].m_searchAreaColStart = (
unsigned int)
565 refRasterPtr->getResolutionX();
567 refRasterPtr->getResolutionY();
576 if( locator.
initialize( locatorInputParams ) )
580 if( locator.
execute( locatorOutputParams ) )
588 minimumRequiredTiePointsNumber
592 const double convexHullAreaPercent =
598 refRasterPtr->getNumberOfColumns()
600 refRasterPtr->getNumberOfRows()
604 if( ( 100.0 * convexHullAreaPercent ) >=
612 for(
unsigned int tpIdx = 0 ; tpIdx < locatorOutputParams.
m_tiePoints.size() ;
615 tiePoint.first.x = locatorOutputParams.
m_tiePoints[ tpIdx ].first.x;
616 tiePoint.first.y = locatorOutputParams.
m_tiePoints[ tpIdx ].first.y;
618 refRasterPtr->getGrid()->gridToGeo(
629 refRastersMatchingInfo.push_back( matchingInfo );
637 for(
unsigned int tpIdx = 0 ; tpIdx < locatorOutputParams.
m_tiePoints.size() ;
640 tiePoint.first.x = locatorOutputParams.
m_tiePoints[ tpIdx ].first.x;
641 tiePoint.first.y = locatorOutputParams.
m_tiePoints[ tpIdx ].first.y;
643 refRasterPtr->getGrid()->gridToGeo(
660 0.0, 0.0, ulCol, ulRow );
665 (
double)( refRasterPtr->getNumberOfColumns() - 1 ),
666 (
double)( refRasterPtr->getNumberOfRows() - 1 ), lrCol, lrRow );
669 (
unsigned int)std::min( ulRow, lrRow );
671 (
unsigned int)std::min( ulCol, lrCol );
674 (
unsigned int)std::abs( lrCol - ulCol );
676 (
unsigned int)std::abs( lrRow - ulRow );
706 sectorIdx = sector.size();
718 refRastersIndexesBySectorIdx = refRastersIndexesBySector.size();
719 continueOnLoop =
false;
727 progressPtr->pulse();
728 if( ! progressPtr->isActive() )
return false;
734 if( ! aRefRasterWasProcessed )
736 continueOnLoop =
false;
779 if( ! registerInstance.
initialize( regInParams ) )
784 if( ! registerInstance.
execute( regOutParams ) )
801 throw( te::rp::Exception )
814 "Invalid raster pointer" );
822 for(
unsigned int inRasterBands2ProcessIdx = 0 ; inRasterBands2ProcessIdx <
824 ++inRasterBands2ProcessIdx )
828 "Invalid raster bands" );
831 for(
unsigned int inRasterTPLocationBandsIdx = 0 ; inRasterTPLocationBandsIdx <
833 ++inRasterTPLocationBandsIdx )
837 "Invalid raster bands" );
843 "Invalid reference rasters feeder pointer" )
847 "Invalid number of reference rasters" )
855 "Invalid reference rasters weights" );
862 "Invalid parameter m_minRasterCoveredAreaPercent" );
867 "Invalid parameter m_minrReferenceRasterCoveredAreaPercent" );
871 "Invalid parameter m_minrReferenceRasterRequiredTiePointsFactor" );
875 "Invalid parameter m_rasterSubSectorsFactor" );
879 "Invalid parameter m_inRasterRowMaxError" );
883 "Invalid parameter m_inRasterColMaxError" );
896 const std::vector< InternalMatchingInfo >& inTiePoints,
897 std::vector< te::gm::GTParameters::TiePoint >& outTiePoints,
898 std::vector< double >& outTiePointsWeights )
const
900 outTiePoints.clear();
901 outTiePointsWeights.clear();
905 std::auto_ptr< te::gm::GeometricTransformation > baseGeometricTransformPtr(
909 const unsigned int minimumRequiredTiePointsNumber = (
unsigned int)
913 ((
double)baseGeometricTransformPtr->getMinRequiredTiePoints() )
916 double referenceImagesWeightsMin = std::numeric_limits< double >::max();
917 double referenceImagesWeightsMax = -1.0 * referenceImagesWeightsMin;
918 unsigned int inTiePointsIdx = 0;
919 unsigned int mInfoTiePointsIdx = 0;
920 double minTPNumberByRefRaster = std::numeric_limits< double >::max();
921 double maxTPNumberByRefRaster = -1.0 * minTPNumberByRefRaster;
922 double minConvexHullAreaPercentByRefRaster = std::numeric_limits< double >::max();
923 double maxConvexHullAreaPercentByRefRaster = -1.0 * minConvexHullAreaPercentByRefRaster;
924 double realTiePointsNumber = 0;
926 for( inTiePointsIdx = 0 ; inTiePointsIdx < inTiePoints.size() ; ++inTiePointsIdx )
930 realTiePointsNumber = (double)( mInfo.
m_tiePoints.size() - minimumRequiredTiePointsNumber );
932 if( minTPNumberByRefRaster > realTiePointsNumber )
934 minTPNumberByRefRaster = realTiePointsNumber;
937 if( maxTPNumberByRefRaster < realTiePointsNumber )
939 maxTPNumberByRefRaster = realTiePointsNumber;
954 if( referenceImagesWeightsMin >
957 referenceImagesWeightsMin =
961 if( referenceImagesWeightsMax <
964 referenceImagesWeightsMax =
971 const double convexHullAreaPercentGain = ( maxConvexHullAreaPercentByRefRaster ==
972 minConvexHullAreaPercentByRefRaster ) ? 0.0 :
973 1.0 / ( maxConvexHullAreaPercentByRefRaster - minConvexHullAreaPercentByRefRaster );
974 const double convexHullAreaPercentOffset = (convexHullAreaPercentGain == 0.0 ) ?
975 1.0 : -1.0 * minConvexHullAreaPercentByRefRaster;
976 const double tiePointsNumberGain = ( maxTPNumberByRefRaster ==
977 minTPNumberByRefRaster ) ? 0.0 :
978 1.0 / ( maxTPNumberByRefRaster - minTPNumberByRefRaster );
979 const double tiePointsNumberOffset = ( tiePointsNumberGain == 0.0 ) ? 1.0 : -1.0 * minTPNumberByRefRaster;
981 double referenceImagesWeightsGain = 0.0;
982 double referenceImagesWeightsOffset = 0.0;
985 referenceImagesWeightsGain = ( referenceImagesWeightsMax ==
986 referenceImagesWeightsMin ) ? 0.0 :
987 1.0 / ( referenceImagesWeightsMax - referenceImagesWeightsMin );
988 referenceImagesWeightsOffset = (referenceImagesWeightsGain == 0.0 ) ?
989 1.0 : -1.0 * referenceImagesWeightsMin;
992 for( inTiePointsIdx = 0 ; inTiePointsIdx < inTiePoints.size() ; ++inTiePointsIdx )
996 realTiePointsNumber = (double)( mInfo.
m_tiePoints.size() - minimumRequiredTiePointsNumber );
1003 convexHullAreaPercentGain
1007 ( realTiePointsNumber + tiePointsNumberOffset )
1023 referenceImagesWeightsOffset
1026 referenceImagesWeightsGain
1033 for( mInfoTiePointsIdx = 0 ; mInfoTiePointsIdx < mInfo.
m_tiePoints.size() ;
1034 ++mInfoTiePointsIdx )
1036 outTiePoints.push_back( mInfo.
m_tiePoints[ mInfoTiePointsIdx ] );
1037 outTiePointsWeights.push_back( weight );
1043 const std::vector< te::gm::GTParameters::TiePoint >& tiePoints,
1044 const bool useTPSecondCoordPair )
const
1046 std::auto_ptr< te::gm::Surface > convexHullPtr;
1047 if( !
getTPConvexHull( tiePoints, useTPSecondCoordPair, convexHullPtr ) )
1053 return convexHullPtr->getArea();
1058 const std::vector< te::gm::GTParameters::TiePoint >& tiePoints,
1059 const bool useTPSecondCoordPair,
1060 std::auto_ptr< te::gm::Surface >& convexHullPtr )
const
1062 if( tiePoints.size() < 3 )
1070 for(
unsigned int tiePointsIdx = 0 ; tiePointsIdx < tiePoints.size() ;
1073 if( useTPSecondCoordPair )
1075 tiePoints[ tiePointsIdx ].second.y ) );
1078 tiePoints[ tiePointsIdx ].first.y ) );
1081 std::auto_ptr< te::gm::Geometry > geomPtr( points.
convexHull() );
1083 if( dynamic_cast< te::gm::Surface* >( geomPtr.get() ) )
1085 convexHullPtr.reset(
1086 dynamic_cast< te::gm::Surface* >( geomPtr.release() ) );
1097 std::auto_ptr< te::gm::GeometricTransformation >& geometricTransformPtr,
1098 std::vector< te::gm::GTParameters::TiePoint >& baseTransAgreementTiePoints,
1099 double& convexHullAreaPercent )
const
1101 geometricTransformPtr.reset();
1102 baseTransAgreementTiePoints.clear();
1103 convexHullAreaPercent = 0.0;
1106 std::vector< double > tiePointsWeights;
1130 baseTransAgreementTiePoints,
1131 geometricTransformPtr
1135 geometricTransformPtr.reset();
1136 baseTransAgreementTiePoints.clear();
1140 convexHullAreaPercent =
1160 geometricTransformPtr.reset();
1161 baseTransAgreementTiePoints.clear();
virtual unsigned int getObjsCount() const =0
Return the total number of feeder objects.
te::gm::Envelope * getExtent()
Returns the geographic extension of the raster data.
std::vector< te::gm::GTParameters::TiePoint > m_tiePoints
The generated tie-pionts (te::gm::GTParameters::TiePoint::first are raster 1 line/column indexes...
bool getTransformation(const std::vector< InternalMatchingInfo > &inTiePoints, std::auto_ptr< te::gm::GeometricTransformation > &baseGeometricTransformPtr, std::vector< te::gm::GTParameters::TiePoint > &baseTransAgreementTiePoints, double &convexHullAreaPercent) const
Try to instantiate a valid geometric transformation following the user parameters.
std::vector< TiePoint > m_tiePoints
Tie points.
bool execute(AlgorithmOutputParameters &outputParams)
Executes the algorithm using the supplied parameters.
double m_inRasterCoveredAreaPercent
The area percent (from the input raster ) covered by tie-points - valid range [0,100].
unsigned int getNumberOfColumns() const
Returns the raster number of columns.
Performs raster data registering into a SRS using a set of tie points.
const double & getUpperRightX() const
It returns a constant refernce to the x coordinate of the upper right corner.
bool execute(AlgorithmOutputParameters &outputParams)
Executes the algorithm using the supplied parameters.
This class can be used to inform the progress of a task.
Raster Processing algorithm output parameters base interface.
const double & getLowerLeftY() const
It returns a constant refernce to the y coordinate of the lower left corner.
An utility struct for representing 2D coordinates.
const double & getUpperRightY() const
It returns a constant refernce to the x coordinate of the upper right corner.
bool execute(AlgorithmOutputParameters &outputParams)
Executes the algorithm using the supplied parameters.
std::pair< Coord2D, Coord2D > TiePoint
Tie point type definition.
2D Geometric transformation tie-points filter (outliers remotion).
void convert(const std::vector< InternalMatchingInfo > &inTiePoints, std::vector< te::gm::GTParameters::TiePoint > &outTiePoints, std::vector< double > &outTiePointsWeights) const
Convesion from matching infor tie-points to a vector of tie-points.
void geoToGrid(const double &x, const double &y, double &col, double &row) const
Get the grid point associated to a spatial location.
Raster Processing functions.
#define TERP_TRUE_OR_RETURN_FALSE(value, message)
Checks if value is true. For false values a warning message will be logged and a return of context wi...
const Algorithm & operator=(const Algorithm &)
Geometric (and positioning) correction of a already geo-referenced raster using a set of reference ra...
te::common::AccessPolicy getAccessPolicy() const
Returns the raster access policy.
std::string m_rType
Output raster data source type (as described in te::raster::RasterFactory ).
std::auto_ptr< te::gm::GeometricTransformation > m_geomTransPtr
The geometric transformation (direct mapping raster lines/cols to input raster corrected world coords...
bool initialize(const AlgorithmInputParameters &inputParams)
Initialize the algorithm instance making it ready for execution.
bool applyRansac(const std::string &transfName, const GTParameters &inputParams, const double maxDirectMapError, const double maxInverseMapError, const RansacItCounterT &maxIterations, const double &assurance, const bool enableMultiThread, const std::vector< double > &tiePointsWeights, std::vector< te::gm::GTParameters::TiePoint > &outTiePoints, std::auto_ptr< GeometricTransformation > &outTransf)
Apply a RANSAC based outliers remotion strategy.
MultiPoint is a GeometryCollection whose elements are restricted to points.
virtual bool moveTo(const unsigned int index)=0
Jump to the given object index.
std::auto_ptr< te::rst::Raster > m_outputRasterPtr
A pointer the generated output raster.
bool m_isInitialized
Tells if this instance is initialized.
AbstractParameters * clone() const
Create a clone copy of this instance.
A point with x and y coordinate values.
virtual void reset()=0
Reset the feeder to the first position (subsequent accesses will start from the first sequence obejct...
An Envelope defines a 2D rectangular region.
std::auto_ptr< te::gm::GeometricTransformation > m_transformationPtr
The generated geometric transformation with the base mininum required tie-points set ( depending on t...
An abstract class for raster data strucutures.
unsigned int getNumberOfRows() const
Returns the raster number of rows.
virtual std::size_t getNumberOfBands() const =0
Returns the number of bands (dimension of cells attribute values) in the raster.
std::map< std::string, std::string > m_rInfo
The necessary information to create the output rasters (as described in te::raster::RasterFactory).
GeometricRefining::InputParameters m_inputParameters
Input execution parameters.
Reference rasters matching info.
double getResolutionX() const
Returns the raster horizontal (x-axis) resolution.
std::vector< te::gm::GTParameters::TiePoint > m_tiePoints
The tie-points generated by matching (first: input rasters lines/cols, second:input raster world coor...
A RAM cache adaptor to an external existent raster that must always be avaliable. ...
Grid * getGrid()
It returns the raster grid.
static GeometricTransformation * make(const std::string &factoryKey)
It creates an object with the appropriated factory.
bool isInitialized() const
Returns true if the algorithm instance is initialized and ready for execution.
TiePointsLocator output parameters.
std::auto_ptr< te::rst::Raster > m_outputRasterPtr
The generated output registered raster.
const OutputParameters & operator=(const OutputParameters ¶ms)
Abstract parameters base interface.
double getTPConvexHullArea(const std::vector< te::gm::GTParameters::TiePoint > &tiePoints, const bool useTPSecondCoordPair) const
Returns the tie points converx hull area.
std::map< std::string, std::string > m_rInfo
The necessary information to create the raster (as described in te::raster::RasterFactory).
int getSRID() const
Returns the raster spatial reference system identifier.
Performs raster data registering into a SRS using a set of tie points.
unsigned int m_referenceRasterIndex
Reference raster index.
void add(Geometry *g)
It adds the geometry into the collection.
const double & getLowerLeftX() const
It returns a constant reference to the x coordinate of the lower left corner.
te::gm::Envelope * getExtent()
Returns the geographic extension of the grid.
Register output parameters.
double m_convexHullAreaPercent
The tie points covered area percent [0,1].
double getResolutionY() const
Returns the raster vertical (y-axis) resolution.
virtual Geometry * convexHull() const
This method calculates the Convex Hull of a geometry.
void reset()
Clear all internal allocated resources and reset the parameters instance to its initial state...
2D Geometric transformation parameters.
std::string m_rType
Output raster data source type (as described in te::raster::RasterFactory ).
virtual bool moveNext()=0
Advances to the next sequence obeject.
Near neighborhood interpolation method.
#define TERP_DEBUG_TRUE_OR_THROW(value, message)
Checks if value is true and throws an exception if not.
virtual te::rst::Raster const * getCurrentObj() const =0
Return the current sequence object.
std::vector< MatchingResult > m_matchingResult
The matching result status for all given reference rasters.
bool getTPConvexHull(const std::vector< te::gm::GTParameters::TiePoint > &tiePoints, const bool useTPSecondCoordPair, std::auto_ptr< te::gm::Surface > &convexHullPtr) const
Returns the tie points converx hull.
void transform(int oldsrid, int newsrid)
It will transform the coordinates of the Envelope from the old SRS to the new one.
virtual unsigned int getCurrentOffset() const =0
Return the index of the current object.
#define TERP_TRUE_OR_THROW(value, message)
Checks if value is true and throws an exception if not.
void reset()
Clear all internal allocated objects and reset the algorithm to its initial state.
bool initialize(const AlgorithmInputParameters &inputParams)
Initialize the algorithm instance making it ready for execution.
std::vector< te::gm::GTParameters::TiePoint > m_tiePoints
The tie-points in agreenment with the geometric transformation given by m_geomTransPtr (first: input ...
bool initialize(const AlgorithmInputParameters &inputParams)
Initialize the algorithm instance making it ready for execution.