QGIS API Documentation
3.26.3-Buenos Aires (65e4edfdad)
src
analysis
raster
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
21
QgsRuggednessFilter::QgsRuggednessFilter
(
const
QString &inputFile,
const
QString &outputFile,
const
QString &outputFormat )
22
:
QgsNineCellFilter
( inputFile, outputFile, outputFormat )
23
{
24
25
}
26
27
28
float
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
QgsNineCellFilter
Base class for raster analysis methods that work with a 3x3 cell filter and calculate the value of ea...
Definition:
qgsninecellfilter.h:37
QgsRuggednessFilter::QgsRuggednessFilter
QgsRuggednessFilter(const QString &inputFile, const QString &outputFile, const QString &outputFormat)
Definition:
qgsruggednessfilter.cpp:21
QgsRuggednessFilter::processNineCellWindow
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.
Definition:
qgsruggednessfilter.cpp:28
QgsNineCellFilter::mOutputNodataValue
float mOutputNodataValue
The nodata value of the output layer.
Definition:
qgsninecellfilter.h:150
QgsNineCellFilter::mInputNodataValue
float mInputNodataValue
The nodata value of the input layer.
Definition:
qgsninecellfilter.h:148
qgsruggednessfilter.h
Generated on Sun Sep 11 2022 00:03:17 for QGIS API Documentation by
1.8.17