QGIS API Documentation  2.3.0-Master
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 QgsRuggednessFilter::QgsRuggednessFilter( const QString& inputFile, const QString& outputFile, const QString& outputFormat ): QgsNineCellFilter( inputFile, outputFile, outputFormat )
21 {
22 
23 }
24 
26 {
27 
28 }
29 
30 
32 {
33 
34 }
35 
36 float QgsRuggednessFilter::processNineCellWindow( float* x11, float* x21, float* x31,
37  float* x12, float* x22, float* x32, float* x13, float* x23, float* x33 )
38 {
39  //the formula would be that easy without nodata values...
40  /*
41  //return *x22; //test: write the raster value of the middle cell
42  float diff1 = *x11 - *x22;
43  float diff2 = *x21 - *x22;
44  float diff3 = *x31 - *x22;
45  float diff4 = *x12 - *x22;
46  float diff5 = *x32 - *x22;
47  float diff6 = *x13 - *x22;
48  float diff7 = *x23 - *x22;
49  float diff8 = *x33 - *x22;
50  return sqrt(diff1 * diff1 + diff2 * diff2 + diff3 * diff3 + diff4 * diff4 + diff5 * diff5 + diff6 * diff6 + diff7 * diff7 + diff8 * diff8);
51  */
52 
53  if ( *x22 == mInputNodataValue )
54  {
55  return mOutputNodataValue;
56  }
57 
58  double sum = 0;
59  if ( *x11 != mInputNodataValue )
60  {
61  sum += ( *x11 - *x22 ) * ( *x11 - *x22 );
62  }
63  if ( *x21 != mInputNodataValue )
64  {
65  sum += ( *x21 - *x22 ) * ( *x21 - *x22 );
66  }
67  if ( *x31 != mInputNodataValue )
68  {
69  sum += ( *x31 - *x22 ) * ( *x31 - *x22 );
70  }
71  if ( *x12 != mInputNodataValue )
72  {
73  sum += ( *x12 - *x22 ) * ( *x12 - *x22 );
74  }
75  if ( *x32 != mInputNodataValue )
76  {
77  sum += ( *x32 - *x22 ) * ( *x32 - *x22 );
78  }
79  if ( *x13 != mInputNodataValue )
80  {
81  sum += ( *x13 - *x22 ) * ( *x13 - *x22 );
82  }
83  if ( *x23 != mInputNodataValue )
84  {
85  sum += ( *x23 - *x22 ) * ( *x23 - *x22 );
86  }
87  if ( *x33 != mInputNodataValue )
88  {
89  sum += ( *x33 - *x22 ) * ( *x33 - *x22 );
90  }
91 
92  return sqrt( sum );
93 }
94 
float processNineCellWindow(float *x11, float *x21, float *x31, float *x12, float *x22, float *x32, float *x13, float *x23, float *x33)
Calculates output value from nine input values.
float mOutputNodataValue
The nodata value of the output layer.
float mInputNodataValue
The nodata value of the input layer.
Base class for raster analysis methods that work with a 3x3 cell filter and calculate the value of ea...