25 #ifndef __TERRALIB_RP_INTERNAL_ARITHMETICOPERATIONS_H 26 #define __TERRALIB_RP_INTERNAL_ARITHMETICOPERATIONS_H 29 #include "../raster/Grid.h" 30 #include "../raster/Interpolator.h" 31 #include "../common/progress/TaskProgress.h" 34 #include <boost/math/constants/constants.hpp> 117 AbstractParameters* clone() const;
147 AbstractParameters* clone() const;
155 bool execute( AlgorithmOutputParameters& outputParams )
_NOEXCEPT_OP(false);
163 bool isInitialized() const;
196 : m_isRaster(false), m_isRealNumber(false), m_isBinaryOp(false), m_isUnaryOp(false),
197 m_realNumberValue(0), m_rasterBand(0), m_rasterNPtr(0), m_binaryOp(
""), m_unaryOp(
"")
203 : m_isRaster(false), m_isRealNumber(false), m_isBinaryOp(false), m_isUnaryOp(false),
204 m_realNumberValue(0), m_rasterBand(0), m_rasterNPtr(0), m_binaryOp(
""), m_unaryOp(
"")
207 ExecStackElement&
operator=(
const ExecStackElement& rhs )
232 double& outputValue )
const;
243 inline void additionBinOp(
const double& inputValue1,
const double& inputValue2,
244 double& outputValue )
const { outputValue = inputValue1 + inputValue2; }
250 double& outputValue )
const { outputValue = inputValue1 - inputValue2; }
256 double& outputValue )
const { outputValue = inputValue1 * inputValue2; }
261 inline void divisionBinOp(
const double& inputValue1,
const double& inputValue2,
262 double& outputValue )
const {
263 ( inputValue2 == 0.0 ) ? ( outputValue = 0 )
264 : ( outputValue = inputValue1 / inputValue2 );
271 double& outputValue )
const { outputValue = pow(inputValue1, inputValue2); }
277 double& outputValue)
const { outputValue = sqrt(inputValue); }
283 double& outputValue)
const { outputValue = sin(inputValue); }
289 double& outputValue)
const { outputValue = asin(inputValue); }
295 double& outputValue)
const { outputValue = cos(inputValue); }
301 double& outputValue)
const { outputValue = acos(inputValue); }
307 double& outputValue)
const { outputValue = log10(inputValue); }
313 double& outputValue)
const { outputValue = tan(inputValue); }
319 double& outputValue)
const { outputValue = atan(inputValue); }
325 double& outputValue)
const { outputValue = log(inputValue); }
335 bool executeString(
const std::string& aStr,
336 const std::vector< te::rst::Raster* >& inRasters,
337 std::unique_ptr<te::rst::Raster>& outRaster,
346 void inFix2PostFix(
const std::vector< std::string >& input,
347 std::vector< std::string >& output )
const;
353 void printTokens(
const std::vector< std::string >& input )
const;
360 bool isOperator(
const std::string& inputToken )
const;
367 bool isBinaryOperator(
const std::string& inputToken )
const;
374 bool isUnaryOperator(
const std::string& inputToken )
const;
382 bool op1HasGreaterOrEqualPrecedence(
const std::string& operator1,
383 const std::string& operator2 )
const;
392 bool isRasterBandToken(
const std::string& token,
unsigned int& rasterIdx,
393 unsigned int& bandIdx )
const;
402 bool execBinaryOperator(
const std::string& token, ExecStackT&
403 execStack,
bool generateOutput )
const;
415 bool execBinaryOperatorRasterXRaster(
const te::rst::Raster& inRaster1,
417 const unsigned int band2,
418 const BinOpFuncPtrT binOptFunctPtr,
419 std::unique_ptr<te::rst::Raster>& outRasterPtr )
const;
431 const unsigned int bandIdx,
const double value,
432 const BinOpFuncPtrT binOptFunctPtr,
433 std::unique_ptr<te::rst::Raster>& outRasterPtr,
434 const bool realNumberIsRigthtTerm )
const;
443 bool execUnaryOperator(
const std::string& token, ExecStackT&
444 execStack,
bool generateOutput )
const;
455 const unsigned int band,
const UnaryOpFuncPtrT unaryOptFunctPtr,
456 std::unique_ptr<te::rst::Raster>& outRasterPtr)
const;
465 bool execUnaryOperatorReal(
const double value,
466 const UnaryOpFuncPtrT unaryOptFunctPtr,
467 std::unique_ptr<te::rst::Raster>& outRasterPtr,
468 const bool realNumberIsRigthtTerm)
const;
476 bool isRealNumberToken(
const std::string& token,
double& realValue )
const;
485 std::unique_ptr<te::rst::Raster>& rasterPtr )
const;
492 void getTokensStrs(
const std::string& inputStr,
493 std::vector< std::string >& outTokens )
const;
498 #endif // __TERRALIB_RP_INTERNAL_ARITHMETICOPERATIONS_H void asinUnaryOp(const double &inputValue, double &outputValue) const
Arc sine unary operator function.
std::string m_rType
Output raster data source type (as described in te::raster::RasterFactory ).
void divisionBinOp(const double &inputValue1, const double &inputValue2, double &outputValue) const
Division binary operator function.
std::string m_binaryOp
Binary operator.
void cosUnaryOp(const double &inputValue, double &outputValue) const
Cosine unary operator function.
bool m_isBinaryOp
true if this is a binary operator pointer element.
bool m_isInitialized
Tells if this instance is initialized.
This class can be used to inform the progress of a task.
Raster Processing algorithm output parameters base interface.
ArithmeticOperations::InputParameters m_inputParameters
Input execution parameters.
void exponencialBinOp(const double &inputValue1, const double &inputValue2, double &outputValue) const
Exponencial binary operator function.
std::map< std::string, std::string > m_rInfo
The necessary information to create the output rasters (as described in te::raster::RasterFactory).
#define TERPEXPORT
You can use this macro in order to export/import classes and functions from this module.
double m_realNumberValue
Real number value.
Raster Processing algorithm base interface class.
InterpolationMethod
Allowed interpolation methods.
bool m_isRaster
true if this is a raster pointer element.
void acosUnaryOp(const double &inputValue, double &outputValue) const
Arc cosine unary operator function.
std::stack< ExecStackElement > ExecStackT
Execution stack type definition.
Raster Processing algorithm base interface.
An abstract class for raster data strucutures.
bool m_isUnaryOp
true if this is a unary operator pointer element.
std::unique_ptr< te::rst::Raster > m_outputRasterPtr
The generated output registered raster.
ExecStackElement(const ExecStackElement &rhs)
ArithmeticOperations output parameters.
void tanUnaryOp(const double &inputValue, double &outputValue) const
Tangent unary operator function.
ExecStackElement & operator=(const ExecStackElement &rhs)
std::string m_unaryOp
Unary operator.
void sqrtUnaryOp(const double &inputValue, double &outputValue) const
Square root unary operator function.
te::rst::Raster * m_rasterNPtr
Raster pointer.
rasterPointer reset(te::rst::RasterFactory::make("MEM", new te::rst::Grid(nCols, nLines), bandsProps, std::map< std::string, std::string >(), 0, 0))
void logUnaryOp(const double &inputValue, double &outputValue) const
Common logarithm unary operator function.
void lnUnaryOp(const double &inputValue, double &outputValue) const
unary operator function.
void atanUnaryOp(const double &inputValue, double &outputValue) const
Arc Tangent unary operator function.
void subtractionBinOp(const double &inputValue1, const double &inputValue2, double &outputValue) const
Subtraction binary operator function.
std::unique_ptr< te::rst::Raster > m_rasterHandler
Raster handler.
unsigned int m_rasterBand
Raster band index.
Performs arithmetic operation over raster data.
A rectified grid is the spatial support for raster data.
bool m_isRealNumber
true if this is a real number element.
void multiplicationBinOp(const double &inputValue1, const double &inputValue2, double &outputValue) const
Multiplication binary operator function.
void sinUnaryOp(const double &inputValue, double &outputValue) const
Sine unary operator function.
void additionBinOp(const double &inputValue1, const double &inputValue2, double &outputValue) const
Addition binary operator function.