QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
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
20#include <cmath>
21
22QgsRuggednessFilter::QgsRuggednessFilter( const QString &inputFile, const QString &outputFile, const QString &outputFormat )
23 : QgsNineCellFilter( inputFile, outputFile, outputFormat )
24{
25}
26
27
28float QgsRuggednessFilter::processNineCellWindow( float *x11, float *x21, float *x31, float *x12, float *x22, float *x32, float *x13, float *x23, float *x33 )
29{
30 //the formula would be that easy without nodata values...
31 /*
32 //return *x22; //test: write the raster value of the middle cell
33 float diff1 = *x11 - *x22;
34 float diff2 = *x21 - *x22;
35 float diff3 = *x31 - *x22;
36 float diff4 = *x12 - *x22;
37 float diff5 = *x32 - *x22;
38 float diff6 = *x13 - *x22;
39 float diff7 = *x23 - *x22;
40 float diff8 = *x33 - *x22;
41 return sqrt(diff1 * diff1 + diff2 * diff2 + diff3 * diff3 + diff4 * diff4 + diff5 * diff5 + diff6 * diff6 + diff7 * diff7 + diff8 * diff8);
42 */
43
44 if ( *x22 == mInputNodataValue )
45 {
46 return mOutputNodataValue;
47 }
48
49 double sum = 0;
50 if ( *x11 != mInputNodataValue )
51 {
52 sum += ( *x11 - *x22 ) * ( *x11 - *x22 );
53 }
54 if ( *x21 != mInputNodataValue )
55 {
56 sum += ( *x21 - *x22 ) * ( *x21 - *x22 );
57 }
58 if ( *x31 != mInputNodataValue )
59 {
60 sum += ( *x31 - *x22 ) * ( *x31 - *x22 );
61 }
62 if ( *x12 != mInputNodataValue )
63 {
64 sum += ( *x12 - *x22 ) * ( *x12 - *x22 );
65 }
66 if ( *x32 != mInputNodataValue )
67 {
68 sum += ( *x32 - *x22 ) * ( *x32 - *x22 );
69 }
70 if ( *x13 != mInputNodataValue )
71 {
72 sum += ( *x13 - *x22 ) * ( *x13 - *x22 );
73 }
74 if ( *x23 != mInputNodataValue )
75 {
76 sum += ( *x23 - *x22 ) * ( *x23 - *x22 );
77 }
78 if ( *x33 != mInputNodataValue )
79 {
80 sum += ( *x33 - *x22 ) * ( *x33 - *x22 );
81 }
82
83 return std::sqrt( sum );
84}
QgsNineCellFilter(const QString &inputFile, const QString &outputFile, const QString &outputFormat)
Constructor that takes input file, output file and output format (GDAL string).
double mOutputNodataValue
The nodata value of the output layer.
double mInputNodataValue
The nodata value of the input 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.