QGIS API Documentation  3.22.4-Białowieża (ce8e65e95e)
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 
20 QgsTotalCurvatureFilter::QgsTotalCurvatureFilter( const QString &inputFile, const QString &outputFile, const QString &outputFormat )
21  : QgsNineCellFilter( inputFile, outputFile, outputFormat )
22 {
23 
24 }
25 
26 float 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.