QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsruggednessfilter.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsruggednessfilter.cpp - description
3 -----------------------
4 begin : August 7th, 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
18#include "qgsruggednessfilter.h"
19#include <cmath>
20
21QgsRuggednessFilter::QgsRuggednessFilter( const QString &inputFile, const QString &outputFile, const QString &outputFormat )
22 : QgsNineCellFilter( inputFile, outputFile, outputFormat )
23{
24
25}
26
27
28float QgsRuggednessFilter::processNineCellWindow( float *x11, float *x21, float *x31,
29 float *x12, float *x22, float *x32, float *x13, float *x23, float *x33 )
30{
31 //the formula would be that easy without nodata values...
32 /*
33 //return *x22; //test: write the raster value of the middle cell
34 float diff1 = *x11 - *x22;
35 float diff2 = *x21 - *x22;
36 float diff3 = *x31 - *x22;
37 float diff4 = *x12 - *x22;
38 float diff5 = *x32 - *x22;
39 float diff6 = *x13 - *x22;
40 float diff7 = *x23 - *x22;
41 float diff8 = *x33 - *x22;
42 return sqrt(diff1 * diff1 + diff2 * diff2 + diff3 * diff3 + diff4 * diff4 + diff5 * diff5 + diff6 * diff6 + diff7 * diff7 + diff8 * diff8);
43 */
44
45 if ( *x22 == mInputNodataValue )
46 {
47 return mOutputNodataValue;
48 }
49
50 double sum = 0;
51 if ( *x11 != mInputNodataValue )
52 {
53 sum += ( *x11 - *x22 ) * ( *x11 - *x22 );
54 }
55 if ( *x21 != mInputNodataValue )
56 {
57 sum += ( *x21 - *x22 ) * ( *x21 - *x22 );
58 }
59 if ( *x31 != mInputNodataValue )
60 {
61 sum += ( *x31 - *x22 ) * ( *x31 - *x22 );
62 }
63 if ( *x12 != mInputNodataValue )
64 {
65 sum += ( *x12 - *x22 ) * ( *x12 - *x22 );
66 }
67 if ( *x32 != mInputNodataValue )
68 {
69 sum += ( *x32 - *x22 ) * ( *x32 - *x22 );
70 }
71 if ( *x13 != mInputNodataValue )
72 {
73 sum += ( *x13 - *x22 ) * ( *x13 - *x22 );
74 }
75 if ( *x23 != mInputNodataValue )
76 {
77 sum += ( *x23 - *x22 ) * ( *x23 - *x22 );
78 }
79 if ( *x33 != mInputNodataValue )
80 {
81 sum += ( *x33 - *x22 ) * ( *x33 - *x22 );
82 }
83
84 return std::sqrt( sum );
85}
86
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.
QgsRuggednessFilter(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.