QGIS API Documentation  3.16.0-Hannover (43b64b13f3)
qgsrasterinterface.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsrasterface.h - Internal raster processing modules interface
3  --------------------------------------
4  Date : Jun 21, 2012
5  Copyright : (C) 2012 by Radim Blazek
6  email : radim dot blazek at gmail dot 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 QGSRASTERINTERFACE_H
19 #define QGSRASTERINTERFACE_H
20 
21 #include "qgis_core.h"
22 #include "qgis_sip.h"
23 #include <limits>
24 
25 #include <QCoreApplication> // for tr()
26 #include <QImage>
27 
28 #include "qgsfeedback.h"
29 #include "qgsrasterbandstats.h"
30 #include "qgsrasterblock.h"
31 #include "qgsrasterhistogram.h"
32 #include "qgsrectangle.h"
33 
40 class CORE_EXPORT QgsRasterBlockFeedback : public QgsFeedback
41 {
42  Q_OBJECT
43 
44  public:
46  QgsRasterBlockFeedback( QObject *parent = nullptr ) : QgsFeedback( parent ) {}
47 
52  virtual void onNewData() {}
53 
59  bool isPreviewOnly() const { return mPreviewOnly; }
60 
65  void setPreviewOnly( bool preview ) { mPreviewOnly = preview; }
66 
71  bool renderPartialOutput() const { return mRenderPartialOutput; }
72 
77  void setRenderPartialOutput( bool enable ) { mRenderPartialOutput = enable; }
78 
86  void appendError( const QString &error ) { mErrors.append( error ); }
87 
94  QStringList errors() const { return mErrors; }
95 
96  private:
97 
102  bool mPreviewOnly = false;
103 
105  bool mRenderPartialOutput = false;
106 
108  QStringList mErrors;
109 };
110 
111 
116 class CORE_EXPORT QgsRasterInterface
117 {
118 #ifdef SIP_RUN
119 // QgsRasterInterface subclasses
121 #include <qgshuesaturationfilter.h>
122 #include <qgsrasterdataprovider.h>
123 #include <qgsrasternuller.h>
124 #include <qgsrasterprojector.h>
125 #include <qgsrasterrenderer.h>
126 #include <qgsrasterresamplefilter.h>
127 
128 // QgsRasterRenderer subclasses
129 #include <qgshillshaderenderer.h>
135 #endif
136 
137 
138 #ifdef SIP_RUN
140  if ( dynamic_cast<QgsBrightnessContrastFilter *>( sipCpp ) )
141  sipType = sipType_QgsBrightnessContrastFilter;
142  else if ( dynamic_cast<QgsHueSaturationFilter *>( sipCpp ) )
143  sipType = sipType_QgsHueSaturationFilter;
144  else if ( dynamic_cast<QgsRasterDataProvider *>( sipCpp ) )
145  {
146  sipType = sipType_QgsRasterDataProvider;
147  // use static cast because QgsRasterDataProvider has multiple inheritance
148  // and we would end up with bad pointer otherwise!
149  *sipCppRet = static_cast<QgsRasterDataProvider *>( sipCpp );
150  }
151  else if ( dynamic_cast<QgsRasterNuller *>( sipCpp ) )
152  sipType = sipType_QgsRasterNuller;
153  else if ( dynamic_cast<QgsRasterProjector *>( sipCpp ) )
154  sipType = sipType_QgsRasterProjector;
155  else if ( dynamic_cast<QgsRasterRenderer *>( sipCpp ) )
156  {
157  if ( dynamic_cast<QgsHillshadeRenderer *>( sipCpp ) )
158  sipType = sipType_QgsHillshadeRenderer;
159  else if ( dynamic_cast<QgsMultiBandColorRenderer *>( sipCpp ) )
160  sipType = sipType_QgsMultiBandColorRenderer;
161  else if ( dynamic_cast<QgsPalettedRasterRenderer *>( sipCpp ) )
162  sipType = sipType_QgsPalettedRasterRenderer;
163  else if ( dynamic_cast<QgsSingleBandColorDataRenderer *>( sipCpp ) )
164  sipType = sipType_QgsSingleBandColorDataRenderer;
165  else if ( dynamic_cast<QgsSingleBandGrayRenderer *>( sipCpp ) )
166  sipType = sipType_QgsSingleBandGrayRenderer;
167  else if ( dynamic_cast<QgsSingleBandPseudoColorRenderer *>( sipCpp ) )
168  sipType = sipType_QgsSingleBandPseudoColorRenderer;
169  else
170  sipType = sipType_QgsRasterRenderer;
171  }
172  else if ( dynamic_cast<QgsRasterResampleFilter *>( sipCpp ) )
173  sipType = sipType_QgsRasterResampleFilter;
174  else
175  sipType = 0;
176  SIP_END
177 #endif
178 
179  Q_DECLARE_TR_FUNCTIONS( QgsRasterInterface )
180 
181  public:
184  {
185  NoCapabilities = 0,
186  Size = 1 << 1, // original data source size (and thus resolution) is known, it is not always available, for example for WMS
187  Create = 1 << 2, // create new datasets
188  Remove = 1 << 3, // delete datasets
189  BuildPyramids = 1 << 4, // supports building of pyramids (overviews)
190  Identify = 1 << 5, // at least one identify format supported
191  IdentifyValue = 1 << 6, // numerical values
192  IdentifyText = 1 << 7, // WMS text
193  IdentifyHtml = 1 << 8, // WMS HTML
194  IdentifyFeature = 1 << 9, // WMS GML -> feature
195  Prefetch = 1 << 10, // allow prefetching of out-of-view images
196  };
197 
198  QgsRasterInterface( QgsRasterInterface *input = nullptr );
199 
200  virtual ~QgsRasterInterface() = default;
201 
203  virtual QgsRasterInterface *clone() const = 0 SIP_FACTORY;
204 
206  virtual int capabilities() const
207  {
209  }
210 
214  QString capabilitiesString() const;
215 
217  virtual Qgis::DataType dataType( int bandNo ) const = 0;
218 
223  virtual Qgis::DataType sourceDataType( int bandNo ) const { return mInput ? mInput->sourceDataType( bandNo ) : Qgis::UnknownDataType; }
224 
229  virtual QgsRectangle extent() const { return mInput ? mInput->extent() : QgsRectangle(); }
230 
231  int dataTypeSize( int bandNo ) { return QgsRasterBlock::typeSize( dataType( bandNo ) ); }
232 
234  virtual int bandCount() const = 0;
235 
237  virtual int xBlockSize() const { return mInput ? mInput->xBlockSize() : 0; }
238  virtual int yBlockSize() const { return mInput ? mInput->yBlockSize() : 0; }
239 
241  virtual int xSize() const { return mInput ? mInput->xSize() : 0; }
242  virtual int ySize() const { return mInput ? mInput->ySize() : 0; }
243 
245  virtual QString generateBandName( int bandNumber ) const
246  {
247  return tr( "Band" ) + QStringLiteral( " %1" ) .arg( bandNumber, 1 + static_cast< int >( std::log10( static_cast< double >( bandCount() ) ) ), 10, QChar( '0' ) );
248  }
249 
260  virtual QgsRasterBlock *block( int bandNo, const QgsRectangle &extent, int width, int height, QgsRasterBlockFeedback *feedback = nullptr ) = 0 SIP_FACTORY;
261 
266  virtual bool setInput( QgsRasterInterface *input ) { mInput = input; return true; }
267 
269  virtual QgsRasterInterface *input() const { return mInput; }
270 
272  virtual bool on() const { return mOn; }
273 
275  virtual void setOn( bool on ) { mOn = on; }
276 
283  virtual const QgsRasterInterface *sourceInput() const SIP_SKIP
284  {
285  QgsDebugMsgLevel( QStringLiteral( "Entered" ), 4 );
286  return mInput ? mInput->sourceInput() : this;
287  }
288 
295  {
296  QgsDebugMsgLevel( QStringLiteral( "Entered" ), 4 );
297  return mInput ? mInput->sourceInput() : this;
298  }
299 
308  virtual QgsRasterBandStats bandStatistics( int bandNo,
309  int stats = QgsRasterBandStats::All,
310  const QgsRectangle &extent = QgsRectangle(),
311  int sampleSize = 0, QgsRasterBlockFeedback *feedback = nullptr );
312 
317  virtual bool hasStatistics( int bandNo,
318  int stats = QgsRasterBandStats::All,
319  const QgsRectangle &extent = QgsRectangle(),
320  int sampleSize = 0 );
321 
322 
336 #ifndef SIP_RUN
337  virtual QgsRasterHistogram histogram( int bandNo,
338  int binCount = 0,
339  double minimum = std::numeric_limits<double>::quiet_NaN(),
340  double maximum = std::numeric_limits<double>::quiet_NaN(),
341  const QgsRectangle &extent = QgsRectangle(),
342  int sampleSize = 0,
343  bool includeOutOfRange = false,
344  QgsRasterBlockFeedback *feedback = nullptr );
345 #else
346  virtual QgsRasterHistogram histogram( int bandNo,
347  int binCount = 0,
348  SIP_PYOBJECT minimum = Py_None,
349  SIP_PYOBJECT maximum = Py_None,
350  const QgsRectangle &extent = QgsRectangle(),
351  int sampleSize = 0,
352  bool includeOutOfRange = false,
353  QgsRasterBlockFeedback *feedback = nullptr )
354  [QgsRasterHistogram( int bandNo,
355  int binCount = 0,
356  double minimum = 0.0,
357  double maximum = 0.0,
358  const QgsRectangle &extent = QgsRectangle(),
359  int sampleSize = 0,
360  bool includeOutOfRange = false,
361  QgsRasterBlockFeedback *feedback = nullptr )];
362  % MethodCode
363  double minimum;
364  double maximum;
365  if ( a2 == Py_None )
366  {
367  minimum = std::numeric_limits<double>::quiet_NaN();
368  }
369  else
370  {
371  minimum = PyFloat_AsDouble( a2 );
372  }
373 
374  if ( a3 == Py_None )
375  {
376  maximum = std::numeric_limits<double>::quiet_NaN();
377  }
378  else
379  {
380  maximum = PyFloat_AsDouble( a3 );
381  }
382 
383  QgsRasterHistogram *h = new QgsRasterHistogram( sipCpp->histogram( a0, a1, minimum, maximum, *a4, a5, a6, a7 ) );
384  return sipConvertFromType( h, sipType_QgsRasterHistogram, Py_None );
385  % End
386 #endif
387 
388 
393 #ifndef SIP_RUN
394  virtual bool hasHistogram( int bandNo,
395  int binCount,
396  double minimum = std::numeric_limits<double>::quiet_NaN(),
397  double maximum = std::numeric_limits<double>::quiet_NaN(),
398  const QgsRectangle &extent = QgsRectangle(),
399  int sampleSize = 0,
400  bool includeOutOfRange = false );
401 #else
402  virtual bool hasHistogram( int bandNo,
403  int binCount,
404  SIP_PYOBJECT minimum = Py_None,
405  SIP_PYOBJECT maximum = Py_None,
406  const QgsRectangle &extent = QgsRectangle(),
407  int sampleSize = 0,
408  bool includeOutOfRange = false )
409  [bool( int bandNo,
410  int binCount,
411  double minimum = 0.0,
412  double maximum = 0.0,
413  const QgsRectangle &extent = QgsRectangle(),
414  int sampleSize = 0,
415  bool includeOutOfRange = false )];
416  % MethodCode
417  double minimum;
418  double maximum;
419  if ( a2 == Py_None )
420  {
421  minimum = std::numeric_limits<double>::quiet_NaN();
422  }
423  else
424  {
425  minimum = PyFloat_AsDouble( a2 );
426  }
427 
428  if ( a3 == Py_None )
429  {
430  maximum = std::numeric_limits<double>::quiet_NaN();
431  }
432  else
433  {
434  maximum = PyFloat_AsDouble( a3 );
435  }
436 
437  sipRes = sipCpp->hasHistogram( a0, a1, minimum, maximum, *a4, a5, a6 );
438  % End
439 #endif
440 
441 
452  virtual void cumulativeCut( int bandNo,
453  double lowerCount,
454  double upperCount,
455  double &lowerValue,
456  double &upperValue,
457  const QgsRectangle &extent = QgsRectangle(),
458  int sampleSize = 0 );
459 
461  virtual void writeXml( QDomDocument &doc, QDomElement &parentElem ) const { Q_UNUSED( doc ) Q_UNUSED( parentElem ); }
463  virtual void readXml( const QDomElement &filterElem ) { Q_UNUSED( filterElem ) }
464 
465  protected:
466  // QgsRasterInterface used as input
467  QgsRasterInterface *mInput = nullptr;
468 
470  QList<QgsRasterBandStats> mStatistics;
471 
473  QList<QgsRasterHistogram> mHistograms;
474 
475  // On/off state, if off, it does not do anything, replicates input
476  bool mOn = true;
477 
482 #ifndef SIP_RUN
483  void initHistogram( QgsRasterHistogram &histogram,
484  int bandNo,
485  int binCount,
486  double minimum = std::numeric_limits<double>::quiet_NaN(),
487  double maximum = std::numeric_limits<double>::quiet_NaN(),
488  const QgsRectangle &boundingBox = QgsRectangle(),
489  int sampleSize = 0,
490  bool includeOutOfRange = false );
491 #else
492  void initHistogram( QgsRasterHistogram &histogram,
493  int bandNo,
494  int binCount,
495  SIP_PYOBJECT minimum = Py_None,
496  SIP_PYOBJECT maximum = Py_None,
497  const QgsRectangle &boundingBox = QgsRectangle(),
498  int sampleSize = 0,
499  bool includeOutOfRange = false )
500  [void ( QgsRasterHistogram & histogram,
501  int bandNo,
502  int binCount,
503  double minimum = 0.0,
504  double maximum = 0.0,
505  const QgsRectangle &boundingBox = QgsRectangle(),
506  int sampleSize = 0,
507  bool includeOutOfRange = false )];
508  % MethodCode
509  double minimum;
510  double maximum;
511  if ( a3 == Py_None )
512  {
513  minimum = std::numeric_limits<double>::quiet_NaN();
514  }
515  else
516  {
517  minimum = PyFloat_AsDouble( a3 );
518  }
519 
520  if ( a4 == Py_None )
521  {
522  maximum = std::numeric_limits<double>::quiet_NaN();
523  }
524  else
525  {
526  maximum = PyFloat_AsDouble( a4 );
527  }
528 
529 #if defined(SIP_PROTECTED_IS_PUBLIC)
530  sipCpp->initHistogram( *a0, a1, a2, minimum, maximum, *a5, a6, a7 );
531 #else
532  sipCpp->sipProtect_initHistogram( *a0, a1, a2, minimum, maximum, *a5, a6, a7 );
533 #endif
534  % End
535 #endif
536 
537 
538 
540  void initStatistics( QgsRasterBandStats &statistics, int bandNo,
541  int stats = QgsRasterBandStats::All,
542  const QgsRectangle &boundingBox = QgsRectangle(),
543  int binCount = 0 );
544 
545  private:
546 #ifdef SIP_RUN
548  QgsRasterInterface &operator=( const QgsRasterInterface & );
549 #endif
550 
551  Q_DISABLE_COPY( QgsRasterInterface ) // there is clone() for copying
552 };
553 
554 #endif
555 
556 
qgsrasterbandstats.h
qgsrasterprojector.h
QgsRasterInterface::setOn
virtual void setOn(bool on)
Sets whether the interface is on or off.
Definition: qgsrasterinterface.h:275
QgsRasterInterface::generateBandName
virtual QString generateBandName(int bandNumber) const
helper function to create zero padded band names
Definition: qgsrasterinterface.h:245
Qgis::DataType
DataType
Raster data types.
Definition: qgis.h:102
QgsHillshadeRenderer
A renderer for generating live hillshade models.
Definition: qgshillshaderenderer.h:37
QgsRasterBlockFeedback::QgsRasterBlockFeedback
QgsRasterBlockFeedback(QObject *parent=nullptr)
Construct a new raster block feedback object.
Definition: qgsrasterinterface.h:46
QgsRasterInterface::mStatistics
QList< QgsRasterBandStats > mStatistics
List of cached statistics, all bands mixed.
Definition: qgsrasterinterface.h:470
QgsRasterBlockFeedback::errors
QStringList errors() const
Returns a list of any errors encountered while retrieving the raster block.
Definition: qgsrasterinterface.h:94
QgsRasterInterface::writeXml
virtual void writeXml(QDomDocument &doc, QDomElement &parentElem) const
Write base class members to xml.
Definition: qgsrasterinterface.h:461
QgsRasterInterface::sourceDataType
virtual Qgis::DataType sourceDataType(int bandNo) const
Returns source data type for the band specified by number, source data type may be shorter than dataT...
Definition: qgsrasterinterface.h:223
qgsrectangle.h
qgsrasterhistogram.h
QgsDebugMsgLevel
#define QgsDebugMsgLevel(str, level)
Definition: qgslogger.h:39
QgsRasterBandStats
The RasterBandStats struct is a container for statistics about a single raster band.
Definition: qgsrasterbandstats.h:35
QgsRasterBlockFeedback::appendError
void appendError(const QString &error)
Appends an error message to the stored list of errors.
Definition: qgsrasterinterface.h:86
QgsRasterInterface::xBlockSize
virtual int xBlockSize() const
Gets block size.
Definition: qgsrasterinterface.h:237
QgsRasterInterface::yBlockSize
virtual int yBlockSize() const
Definition: qgsrasterinterface.h:238
QgsSingleBandGrayRenderer
Raster renderer pipe for single band gray.
Definition: qgssinglebandgrayrenderer.h:34
qgssinglebandcolordatarenderer.h
qgsrasterrenderer.h
QgsRasterNuller
Raster pipe that deals with null values.
Definition: qgsrasternuller.h:33
qgssinglebandpseudocolorrenderer.h
QgsRectangle
A rectangle specified with double values.
Definition: qgsrectangle.h:42
SIP_FACTORY
#define SIP_FACTORY
Definition: qgis_sip.h:76
QgsSingleBandColorDataRenderer
Raster renderer pipe for single band color.
Definition: qgssinglebandcolordatarenderer.h:32
QgsRasterProjector
QgsRasterProjector implements approximate projection support for it calculates grid of points in sour...
Definition: qgsrasterprojector.h:48
SIP_CONVERT_TO_SUBCLASS_CODE
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:177
QgsRasterInterface::NoCapabilities
@ NoCapabilities
Definition: qgsrasterinterface.h:185
qgshillshaderenderer.h
QgsRasterInterface::sourceInput
virtual const QgsRasterInterface * sourceInput() const
Gets source / raw input, the first in pipe, usually provider.
Definition: qgsrasterinterface.h:283
QgsRasterBlock::typeSize
static int typeSize(int dataType) SIP_HOLDGIL
Returns the size in bytes for the specified dataType.
Definition: qgsrasterblock.h:83
SIP_SKIP
#define SIP_SKIP
Definition: qgis_sip.h:126
QgsRasterBlockFeedback::isPreviewOnly
bool isPreviewOnly() const
Whether the raster provider should return only data that are already available without waiting for fu...
Definition: qgsrasterinterface.h:59
QgsRasterInterface::setInput
virtual bool setInput(QgsRasterInterface *input)
Set input.
Definition: qgsrasterinterface.h:266
QgsRasterBandStats::All
@ All
Definition: qgsrasterbandstats.h:47
qgspalettedrasterrenderer.h
QgsRasterInterface::xSize
virtual int xSize() const
Gets raster size.
Definition: qgsrasterinterface.h:241
QgsRasterRenderer
Raster renderer pipe that applies colors to a raster.
Definition: qgsrasterrenderer.h:39
qgsrasterblock.h
QgsRasterInterface::dataType
virtual Qgis::DataType dataType(int bandNo) const =0
Returns data type for the band specified by number.
QgsFeedback
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition: qgsfeedback.h:44
qgis_sip.h
QgsRasterInterface::clone
virtual QgsRasterInterface * clone() const =0
Clone itself, create deep copy.
QgsRasterBlockFeedback::renderPartialOutput
bool renderPartialOutput() const
Whether our painter is drawing to a temporary image used just by this layer.
Definition: qgsrasterinterface.h:71
QgsHueSaturationFilter
Color and saturation filter pipe for rasters.
Definition: qgshuesaturationfilter.h:32
QgsRasterBlockFeedback::onNewData
virtual void onNewData()
May be emitted by raster data provider to indicate that some partial data are available and a new pre...
Definition: qgsrasterinterface.h:52
QgsRasterInterface::readXml
virtual void readXml(const QDomElement &filterElem)
Sets base class members from xml. Usually called from create() methods of subclasses.
Definition: qgsrasterinterface.h:463
QgsMultiBandColorRenderer
Renderer for multiband images with the color components.
Definition: qgsmultibandcolorrenderer.h:33
QgsPalettedRasterRenderer
Renderer for paletted raster images.
Definition: qgspalettedrasterrenderer.h:36
QgsRasterBlockFeedback::setRenderPartialOutput
void setRenderPartialOutput(bool enable)
Set whether our painter is drawing to a temporary image used just by this layer.
Definition: qgsrasterinterface.h:77
qgsrasterresamplefilter.h
qgsbrightnesscontrastfilter.h
qgssinglebandgrayrenderer.h
QgsRasterInterface::ySize
virtual int ySize() const
Definition: qgsrasterinterface.h:242
qgshuesaturationfilter.h
QgsRasterInterface::mHistograms
QList< QgsRasterHistogram > mHistograms
List of cached histograms, all bands mixed.
Definition: qgsrasterinterface.h:473
QgsRasterInterface
Base class for processing filters like renderers, reprojector, resampler etc.
Definition: qgsrasterinterface.h:117
QgsBrightnessContrastFilter
Brightness/contrast and gamma correction filter pipe for rasters.
Definition: qgsbrightnesscontrastfilter.h:32
QgsRasterInterface::Capability
Capability
If you add to this, please also add to capabilitiesString()
Definition: qgsrasterinterface.h:184
QgsRasterHistogram
The QgsRasterHistogram is a container for histogram of a single raster band.
Definition: qgsrasterhistogram.h:34
QgsRasterResampleFilter
Resample filter pipe for rasters.
Definition: qgsrasterresamplefilter.h:33
QgsRasterInterface::input
virtual QgsRasterInterface * input() const
Current input.
Definition: qgsrasterinterface.h:269
qgsmultibandcolorrenderer.h
QgsRasterBlockFeedback
Feedback object tailored for raster block reading.
Definition: qgsrasterinterface.h:41
QgsRasterBlockFeedback::setPreviewOnly
void setPreviewOnly(bool preview)
set flag whether the block request is for preview purposes only
Definition: qgsrasterinterface.h:65
QgsRasterInterface::sourceInput
virtual QgsRasterInterface * sourceInput()
Gets source / raw input, the first in pipe, usually provider.
Definition: qgsrasterinterface.h:294
Qgis::UnknownDataType
@ UnknownDataType
Unknown or unspecified type.
Definition: qgis.h:103
QgsSingleBandPseudoColorRenderer
Raster renderer pipe for single band pseudocolor.
Definition: qgssinglebandpseudocolorrenderer.h:36
QgsRasterInterface::bandCount
virtual int bandCount() const =0
Gets number of bands.
QgsRasterInterface::on
virtual bool on() const
Returns whether the interface is on or off.
Definition: qgsrasterinterface.h:272
QgsRasterInterface::block
virtual QgsRasterBlock * block(int bandNo, const QgsRectangle &extent, int width, int height, QgsRasterBlockFeedback *feedback=nullptr)=0
Read block of data using given extent and size.
QgsRasterInterface::~QgsRasterInterface
virtual ~QgsRasterInterface()=default
qgsrasternuller.h
qgsfeedback.h
SIP_END
#define SIP_END
Definition: qgis_sip.h:194
QgsRasterInterface::capabilities
virtual int capabilities() const
Returns a bitmask containing the supported capabilities.
Definition: qgsrasterinterface.h:206
QgsRasterDataProvider
Base class for raster data providers.
Definition: qgsrasterdataprovider.h:89
QgsRasterInterface::dataTypeSize
int dataTypeSize(int bandNo)
Definition: qgsrasterinterface.h:231
QgsRasterBlock
Raster data container.
Definition: qgsrasterblock.h:37
QgsRasterInterface::extent
virtual QgsRectangle extent() const
Gets the extent of the interface.
Definition: qgsrasterinterface.h:229
qgsrasterdataprovider.h