Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsrasterbandstats.h - description 3 : : ------------------- 4 : : begin : Fri Jun 28 2002 5 : : copyright : (C) 2005 by T.Sutton 6 : : email : tim@linfiniti.com 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 : : #ifndef QGSRASTERBANDSTATS 19 : : #define QGSRASTERBANDSTATS 20 : : 21 : : #include "qgis_core.h" 22 : : #include <QString> 23 : : #include <QVector> 24 : : 25 : : #include <limits> 26 : : 27 : : #include "qgsrectangle.h" 28 : : 29 : : /** 30 : : * \ingroup core 31 : : * \brief The RasterBandStats struct is a container for statistics about a single 32 : : * raster band. 33 : : */ 34 : 0 : class CORE_EXPORT QgsRasterBandStats 35 : : { 36 : : public: 37 : : enum Stats 38 : : { 39 : : None = 0, 40 : : Min = 1, 41 : : Max = 1 << 1, 42 : : Range = 1 << 2, 43 : : Sum = 1 << 3, 44 : : Mean = 1 << 4, 45 : : StdDev = 1 << 5, 46 : : SumOfSquares = 1 << 6, 47 : : All = Min | Max | Range | Sum | Mean | StdDev | SumOfSquares 48 : : }; 49 : : 50 : 0 : QgsRasterBandStats() 51 : : { 52 : 0 : statsGathered = None; 53 : 0 : minimumValue = std::numeric_limits<double>::max(); 54 : 0 : maximumValue = -std::numeric_limits<double>::max(); 55 : 0 : range = 0.0; 56 : 0 : mean = 0.0; 57 : 0 : sumOfSquares = 0.0; 58 : 0 : stdDev = 0.0; 59 : 0 : sum = 0.0; 60 : 0 : elementCount = 0; 61 : 0 : width = 0; 62 : 0 : height = 0; 63 : 0 : bandNumber = 1; 64 : 0 : } 65 : : 66 : : //! Compares region, size etc. not collected statistics 67 : 0 : bool contains( const QgsRasterBandStats &s ) const 68 : : { 69 : 0 : return ( s.bandNumber == bandNumber && 70 : 0 : s.extent == extent && 71 : 0 : s.width == width && 72 : 0 : s.height == height && 73 : 0 : s.statsGathered == ( statsGathered & s.statsGathered ) ); 74 : : } 75 : : 76 : : //! \brief The gdal band number (starts at 1) 77 : : int bandNumber; 78 : : 79 : : // TODO: check if no data are excluded in stats calculation 80 : : 81 : : //! \brief The number of not no data cells in the band. 82 : : qgssize elementCount; 83 : : 84 : : /** 85 : : * \brief The maximum cell value in the raster band. NO_DATA values 86 : : * are ignored. This does not use the gdal GetMaximmum function. 87 : : */ 88 : : double maximumValue; 89 : : 90 : : /** 91 : : * \brief The minimum cell value in the raster band. NO_DATA values 92 : : * are ignored. This does not use the gdal GetMinimum function. 93 : : */ 94 : : double minimumValue; 95 : : 96 : : //! \brief The mean cell value for the band. NO_DATA values are excluded. 97 : : double mean; 98 : : 99 : : //! \brief The range is the distance between min & max. 100 : : double range; 101 : : 102 : : //! \brief The standard deviation of the cell values. 103 : : double stdDev; 104 : : 105 : : //! \brief Collected statistics 106 : : int statsGathered; 107 : : 108 : : //! \brief The sum of all cells in the band. NO_DATA values are excluded. 109 : : double sum; 110 : : 111 : : //! \brief The sum of the squares. Used to calculate standard deviation. 112 : : double sumOfSquares; 113 : : 114 : : //! \brief Number of columns used to calc statistics 115 : : int width; 116 : : 117 : : //! \brief Number of rows used to calc statistics 118 : : int height; 119 : : 120 : : //! \brief Extent used to calc statistics 121 : : QgsRectangle extent; 122 : : }; 123 : : #endif