QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgstotalcurvaturefilter.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgstotalcurvaturefilter.h - description
3 -------------------
4 begin : August 21th, 2009
5 copyright : (C) 2009 by Marco Hugentobler
6 email : marco dot hugentobler at karto dot baug dot ethz dot ch
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
19
20QgsTotalCurvatureFilter::QgsTotalCurvatureFilter( const QString &inputFile, const QString &outputFile, const QString &outputFormat )
21 : QgsNineCellFilter( inputFile, outputFile, outputFormat )
22{
23
24}
25
26float QgsTotalCurvatureFilter::processNineCellWindow( float *x11, float *x21, float *x31, float *x12,
27 float *x22, float *x32, float *x13, float *x23, float *x33 )
28{
29 //return nodata if one value is the nodata value
30 if ( *x11 == mInputNodataValue || *x21 == mInputNodataValue || *x31 == mInputNodataValue || *x12 == mInputNodataValue
31 || *x22 == mInputNodataValue || *x32 == mInputNodataValue || *x13 == mInputNodataValue || *x23 == mInputNodataValue
32 || *x33 == mInputNodataValue )
33 {
34 return mOutputNodataValue;
35 }
36
37 const double cellSizeAvg = ( mCellSizeX + mCellSizeY ) / 2.0;
38 const double dxx = ( *x32 - 2 * *x22 + *x12 ) / ( mCellSizeX * mCellSizeX );
39 const double dxy = ( -*x11 + *x31 + *x13 - *x33 ) / ( 4 * cellSizeAvg * cellSizeAvg );
40 const double dyy = ( *x21 - 2 * *x22 + *x23 ) / ( mCellSizeY * mCellSizeY );
41
42 return dxx * dxx + 2 * dxy * dxy + dyy * dyy;
43}
Base class for raster analysis methods that work with a 3x3 cell filter and calculate the value of ea...
float mInputNodataValue
The nodata value of the input layer.
float mOutputNodataValue
The nodata value of the output layer.
QgsTotalCurvatureFilter(const QString &inputFile, const QString &outputFile, const QString &outputFormat)
float processNineCellWindow(float *x11, float *x21, float *x31, float *x12, float *x22, float *x32, float *x13, float *x23, float *x33) override
Calculates output value from nine input values.