LCOV - code coverage report
Current view: top level - analysis/raster - qgsrastercalculator.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 3 0.0 %
Date: 2021-03-26 12:19:53 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                           qgsrastercalculator.h  -  description
       3                 :            :                           ---------------------
       4                 :            :     begin                : September 28th, 2010
       5                 :            :     copyright            : (C) 2010 by Marco Hugentobler
       6                 :            :     email                : marco dot hugentobler at sourcepole 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                 :            : #ifndef QGSRASTERCALCULATOR_H
      19                 :            : #define QGSRASTERCALCULATOR_H
      20                 :            : 
      21                 :            : #include "qgsrectangle.h"
      22                 :            : #include "qgscoordinatereferencesystem.h"
      23                 :            : #include <QString>
      24                 :            : #include <QVector>
      25                 :            : #include "gdal.h"
      26                 :            : #include "qgis_analysis.h"
      27                 :            : #include "qgsogrutils.h"
      28                 :            : #include "qgsrastercalcnode.h"
      29                 :            : 
      30                 :            : class QgsRasterLayer;
      31                 :            : class QgsFeedback;
      32                 :            : 
      33                 :            : /**
      34                 :            :  * \ingroup analysis
      35                 :            :  * \class QgsRasterCalculatorEntry
      36                 :            :  * \brief Represents an individual raster layer/band number entry within a raster calculation.
      37                 :            :  * \since QGIS 2.18
      38                 :            : */
      39                 :          0 : class ANALYSIS_EXPORT QgsRasterCalculatorEntry
      40                 :            : {
      41                 :            : 
      42                 :            :   public:
      43                 :            : 
      44                 :            :     /**
      45                 :            :      * Creates a list of raster entries from the current project.
      46                 :            :      *
      47                 :            :      * If there is more than one layer with the same data source
      48                 :            :      * only one of them is added to the list, duplicate names are
      49                 :            :      * also handled by appending an _n integer to the base name.
      50                 :            :      *
      51                 :            :      * \return the list of raster entries form the current project
      52                 :            :      * \since QGIS 3.6
      53                 :            :      */
      54                 :            :     static QVector<QgsRasterCalculatorEntry> rasterEntries();
      55                 :            : 
      56                 :            :     /**
      57                 :            :      * Name of entry.
      58                 :            :      */
      59                 :            :     QString ref;
      60                 :            : 
      61                 :            :     /**
      62                 :            :      * Raster layer associated with entry.
      63                 :            :      */
      64                 :          0 :     QgsRasterLayer *raster = nullptr;
      65                 :            : 
      66                 :            :     /**
      67                 :            :      * Band number for entry. Numbering for bands usually starts at 1 for the first band, not 0.
      68                 :            :      */
      69                 :          0 :     int bandNumber = 1;
      70                 :            : };
      71                 :            : 
      72                 :            : /**
      73                 :            :  * \ingroup analysis
      74                 :            :  * \brief Performs raster layer calculations.
      75                 :            : */
      76                 :            : class ANALYSIS_EXPORT QgsRasterCalculator
      77                 :            : {
      78                 :            :   public:
      79                 :            : 
      80                 :            :     //! Result of the calculation
      81                 :            :     enum Result
      82                 :            :     {
      83                 :            :       Success = 0, //!< Calculation successful
      84                 :            :       CreateOutputError = 1, //!< Error creating output data file
      85                 :            :       InputLayerError = 2, //!< Error reading input layer
      86                 :            :       Canceled = 3, //!< User canceled calculation
      87                 :            :       ParserError = 4, //!< Error parsing formula
      88                 :            :       MemoryError = 5, //!< Error allocating memory for result
      89                 :            :       BandError = 6, //!< Invalid band number for input
      90                 :            :       CalculationError = 7, //!< Error occurred while performing calculation
      91                 :            :     };
      92                 :            : 
      93                 :            : 
      94                 :            :     /**
      95                 :            :      * QgsRasterCalculator constructor.
      96                 :            :      * \param formulaString formula for raster calculation
      97                 :            :      * \param outputFile output file path
      98                 :            :      * \param outputFormat output file format
      99                 :            :      * \param outputExtent output extent. CRS for output is taken from first entry in rasterEntries.
     100                 :            :      * \param nOutputColumns number of columns in output raster
     101                 :            :      * \param nOutputRows number of rows in output raster
     102                 :            :      * \param rasterEntries list of referenced raster layers
     103                 :            :      * \param transformContext coordinate transformation context
     104                 :            :      * \since QGIS 3.8
     105                 :            :      */
     106                 :            :     QgsRasterCalculator( const QString &formulaString, const QString &outputFile, const QString &outputFormat,
     107                 :            :                          const QgsRectangle &outputExtent, int nOutputColumns, int nOutputRows,
     108                 :            :                          const QVector<QgsRasterCalculatorEntry> &rasterEntries,
     109                 :            :                          const QgsCoordinateTransformContext &transformContext );
     110                 :            : 
     111                 :            :     /**
     112                 :            :      * QgsRasterCalculator constructor.
     113                 :            :      * \param formulaString formula for raster calculation
     114                 :            :      * \param outputFile output file path
     115                 :            :      * \param outputFormat output file format
     116                 :            :      * \param outputExtent output extent, CRS is specified by outputCrs parameter
     117                 :            :      * \param outputCrs destination CRS for output raster
     118                 :            :      * \param nOutputColumns number of columns in output raster
     119                 :            :      * \param nOutputRows number of rows in output raster
     120                 :            :      * \param rasterEntries list of referenced raster layers
     121                 :            :      * \param transformContext coordinate transformation context
     122                 :            :      * \since QGIS 3.8
     123                 :            :      */
     124                 :            :     QgsRasterCalculator( const QString &formulaString, const QString &outputFile, const QString &outputFormat,
     125                 :            :                          const QgsRectangle &outputExtent, const QgsCoordinateReferenceSystem &outputCrs,
     126                 :            :                          int nOutputColumns, int nOutputRows,
     127                 :            :                          const QVector<QgsRasterCalculatorEntry> &rasterEntries,
     128                 :            :                          const QgsCoordinateTransformContext &transformContext );
     129                 :            : 
     130                 :            : 
     131                 :            :     /**
     132                 :            :     * QgsRasterCalculator constructor.
     133                 :            :     * \param formulaString formula for raster calculation
     134                 :            :     * \param outputFile output file path
     135                 :            :     * \param outputFormat output file format
     136                 :            :     * \param outputExtent output extent. CRS for output is taken from first entry in rasterEntries.
     137                 :            :     * \param nOutputColumns number of columns in output raster
     138                 :            :     * \param nOutputRows number of rows in output raster
     139                 :            :     * \param rasterEntries list of referenced raster layers
     140                 :            :     * \deprecated since QGIS 3.8, use the version with transformContext instead
     141                 :            :     */
     142                 :            :     Q_DECL_DEPRECATED QgsRasterCalculator( const QString &formulaString, const QString &outputFile, const QString &outputFormat,
     143                 :            :                                            const QgsRectangle &outputExtent, int nOutputColumns, int nOutputRows, const QVector<QgsRasterCalculatorEntry> &rasterEntries ) SIP_DEPRECATED;
     144                 :            : 
     145                 :            :     /**
     146                 :            :      * QgsRasterCalculator constructor.
     147                 :            :      * \param formulaString formula for raster calculation
     148                 :            :      * \param outputFile output file path
     149                 :            :      * \param outputFormat output file format
     150                 :            :      * \param outputExtent output extent, CRS is specified by outputCrs parameter
     151                 :            :      * \param outputCrs destination CRS for output raster
     152                 :            :      * \param nOutputColumns number of columns in output raster
     153                 :            :      * \param nOutputRows number of rows in output raster
     154                 :            :      * \param rasterEntries list of referenced raster layers
     155                 :            :      * \deprecated since QGIS 3.8, use the version with transformContext instead
     156                 :            :      * \since QGIS 2.10
     157                 :            :      */
     158                 :            :     Q_DECL_DEPRECATED QgsRasterCalculator( const QString &formulaString, const QString &outputFile, const QString &outputFormat,
     159                 :            :                                            const QgsRectangle &outputExtent, const QgsCoordinateReferenceSystem &outputCrs, int nOutputColumns, int nOutputRows, const QVector<QgsRasterCalculatorEntry> &rasterEntries ) SIP_DEPRECATED;
     160                 :            : 
     161                 :            :     /**
     162                 :            :      * Starts the calculation and writes a new raster.
     163                 :            :      *
     164                 :            :      * The optional \a feedback argument can be used for progress reporting and cancellation support.
     165                 :            :      *
     166                 :            :      * \returns QgsRasterCalculator::Success in case of success. If an error is encountered then
     167                 :            :      * a description of the error can be obtained by calling lastError().
     168                 :            :     */
     169                 :            :     Result processCalculation( QgsFeedback *feedback = nullptr );
     170                 :            : 
     171                 :            :     /**
     172                 :            :      * Returns a description of the last error encountered.
     173                 :            :      * \since QGIS 3.4
     174                 :            :      */
     175                 :            :     QString lastError() const;
     176                 :            : 
     177                 :            :   private:
     178                 :            :     //default constructor forbidden. We need formula, output file, output format and output raster resolution obligatory
     179                 :            :     QgsRasterCalculator() = delete;
     180                 :            : 
     181                 :            :     /**
     182                 :            :      * Opens the output driver and tests if it supports the creation of a new dataset
     183                 :            :      * \returns nullptr on error and the driver handle on success
     184                 :            :     */
     185                 :            :     GDALDriverH openOutputDriver();
     186                 :            : 
     187                 :            :     /**
     188                 :            :      * Opens the output file and sets the same geotransform and CRS as the input data
     189                 :            :      * \returns the output dataset or nullptr in case of error
     190                 :            :     */
     191                 :            :     gdal::dataset_unique_ptr openOutputFile( GDALDriverH outputDriver );
     192                 :            : 
     193                 :            :     /**
     194                 :            :      * Sets gdal 6 parameters array from mOutputRectangle, mNumOutputColumns, mNumOutputRows
     195                 :            :      * \param transform double[6] array that receives the GDAL parameters
     196                 :            :     */
     197                 :            :     void outputGeoTransform( double *transform ) const;
     198                 :            : 
     199                 :            :     //! Execute calculations on GPU
     200                 :            :     Result processCalculationGPU( std::unique_ptr< QgsRasterCalcNode > calcNode, QgsFeedback *feedback = nullptr );
     201                 :            : 
     202                 :            :     QString mFormulaString;
     203                 :            :     QString mOutputFile;
     204                 :            :     QString mOutputFormat;
     205                 :            : 
     206                 :            :     //! Output raster extent
     207                 :            :     QgsRectangle mOutputRectangle;
     208                 :            :     QgsCoordinateReferenceSystem mOutputCrs;
     209                 :            : 
     210                 :            :     //! Number of output columns
     211                 :            :     int mNumOutputColumns = 0;
     212                 :            :     //! Number of output rows
     213                 :            :     int mNumOutputRows = 0;
     214                 :            : 
     215                 :            :     QString mLastError;
     216                 :            : 
     217                 :            :     /***/
     218                 :            :     QVector<QgsRasterCalculatorEntry> mRasterEntries;
     219                 :            : 
     220                 :            :     QgsCoordinateTransformContext mTransformContext;
     221                 :            : };
     222                 :            : 
     223                 :            : #endif // QGSRASTERCALCULATOR_H

Generated by: LCOV version 1.14