QGIS API Documentation  3.6.0-Noosa (5873452)
qgsrasterlayer.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsrasterlayer.h - description
3  -------------------
4  begin : Fri Jun 28 2002
5  copyright : (C) 2004 by T.Sutton, Gary E.Sherman, Steve Halasz
6  email : [email protected]
7 ***************************************************************************/
8 /*
9  * Peter J. Ersts - contributed to the refactoring and maintenance of this class
10  * B. Morley - added functions to convert this class to a data provider interface
11  * Frank Warmerdam - contributed bug fixes and migrated class to use all GDAL_C_API calls
12  */
13 /***************************************************************************
14  * *
15  * This program is free software; you can redistribute it and/or modify *
16  * it under the terms of the GNU General Public License as published by *
17  * the Free Software Foundation; either version 2 of the License, or *
18  * (at your option) any later version. *
19  * *
20  ***************************************************************************/
21 #ifndef QGSRASTERLAYER_H
22 #define QGSRASTERLAYER_H
23 
24 #include "qgis_core.h"
25 #include "qgis_sip.h"
26 #include <QColor>
27 #include <QDateTime>
28 #include <QList>
29 #include <QMap>
30 #include <QPair>
31 #include <QVector>
32 
33 #include "qgis_sip.h"
34 #include "qgsmaplayer.h"
35 #include "qgsraster.h"
36 #include "qgsrasterdataprovider.h"
37 #include "qgsrasterpipe.h"
38 #include "qgsrasterviewport.h"
39 #include "qgsrasterminmaxorigin.h"
40 #include "qgscontrastenhancement.h"
41 
42 class QgsMapToPixel;
43 class QgsRasterRenderer;
44 class QgsRectangle;
45 class QImage;
46 class QLibrary;
47 class QPixmap;
48 class QSlider;
49 
50 typedef QList < QPair< QString, QColor > > QgsLegendColorList;
51 
138 class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
139 {
140  Q_OBJECT
141  public:
142 
144  static const double SAMPLE_SIZE;
145 
148 
151 
154 
157 
160 
163 
165  QgsRasterLayer();
166 
172  {
173 
177  explicit LayerOptions( bool loadDefaultStyle = true )
178  : loadDefaultStyle( loadDefaultStyle )
179  {}
180 
182  bool loadDefaultStyle = true;
183  };
184 
200  explicit QgsRasterLayer( const QString &uri,
201  const QString &baseName = QString(),
202  const QString &providerType = "gdal",
204 
205  ~QgsRasterLayer() override;
206 
213  QgsRasterLayer *clone() const override SIP_FACTORY;
214 
217  {
222  UserDefinedShader
223  };
224 
227  {
231  ColorLayer
232  };
233 
240  static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
241  // TODO QGIS 4.0 - rename fileNameQString to fileName
242 
243  static bool isValidRasterFileName( const QString &fileNameQString );
244 
246  static QDateTime lastModified( const QString &name );
247 
252  Q_DECL_DEPRECATED void setDataProvider( const QString &provider ) SIP_DEPRECATED;
253 
260  void setDataProvider( const QString &provider, const QgsDataProvider::ProviderOptions &options );
261 
274  void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false ) override;
275 
279  LayerType rasterType() { return mRasterType; }
280 
282  void setRenderer( QgsRasterRenderer *renderer SIP_TRANSFER );
283  QgsRasterRenderer *renderer() const { return mPipe.renderer(); }
284 
286  QgsRasterResampleFilter *resampleFilter() const { return mPipe.resampleFilter(); }
287 
288  QgsBrightnessContrastFilter *brightnessFilter() const { return mPipe.brightnessFilter(); }
289  QgsHueSaturationFilter *hueSaturationFilter() const { return mPipe.hueSaturationFilter(); }
290 
294  QgsRasterPipe *pipe() { return &mPipe; }
295 
300  int width() const;
301 
306  int height() const;
307 
311  int bandCount() const;
312 
316  QString bandName( int bandNoInt ) const;
317 
318  // Returns nullptr if not using the data provider model (i.e. directly using GDAL)
319  QgsRasterDataProvider *dataProvider() override;
320 
321  // Returns nullptr if not using the data provider model (i.e. directly using GDAL)
322  const QgsRasterDataProvider *dataProvider() const SIP_PYNAME( constDataProvider ) override;
323 
324  void reload() override;
325  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
326 
328  void draw( QPainter *theQPainter,
329  QgsRasterViewPort *myRasterViewPort,
330  const QgsMapToPixel *qgsMapToPixel = nullptr );
331 
333  QgsLegendColorList legendSymbologyItems() const;
334 
335  bool isSpatial() const override { return true; }
336 
337  QString htmlMetadata() const override;
338 
343  QPixmap paletteAsPixmap( int bandNumber = 1 );
344 
346  QString providerType() const;
347 
356  double rasterUnitsPerPixelX() const;
357 
365  double rasterUnitsPerPixelY() const;
366 
378  const QgsRectangle &extent = QgsRectangle(),
379  int sampleSize = QgsRasterLayer::SAMPLE_SIZE,
380  bool generateLookupTableFlag = true );
381 
386  void refreshContrastEnhancement( const QgsRectangle &extent ) SIP_SKIP;
387 
392  void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent ) SIP_SKIP;
393 
398  bool defaultContrastEnhancementSettings(
400  QgsRasterMinMaxOrigin::Limits &myLimits ) const SIP_SKIP;
401 
403  void setDefaultContrastEnhancement();
404 
405  QStringList subLayers() const override;
406 
410  QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
411  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
412 
413  void setLayerOrder( const QStringList &layers ) override;
414  void setSubLayerVisibility( const QString &name, bool vis ) override;
415  QDateTime timestamp() const override;
416 
426  bool writeSld( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsStringMap &props = QgsStringMap() ) const;
427 
428 
429  public slots:
430  void showStatusMessage( const QString &message );
431 
432  protected:
433  bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
434  bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
435  bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
436  bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage,
437  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
438  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage,
439  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
440  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
441  QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
442  QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
443  private:
445  void init();
446 
448  void closeDataProvider();
449 
451  bool update();
452 
454  void setRendererForDrawingStyle( QgsRaster::DrawingStyle drawingStyle );
455 
456  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
458  const QgsRectangle &extent,
459  int sampleSize,
460  bool generateLookupTableFlag,
461  QgsRasterRenderer *rasterRenderer );
462 
463  void computeMinMax( int band,
464  const QgsRasterMinMaxOrigin &mmo,
466  const QgsRectangle &extent,
467  int sampleSize,
468  double &min, double &max );
469 
471  const QString QSTRING_NOT_SET;
472  const QString TRSTRING_NOT_SET;
473 
475  QgsRasterDataProvider *mDataProvider = nullptr;
476 
478  QDateTime mLastModified;
479 
480  QgsRasterViewPort mLastViewPort;
481 
482  LayerType mRasterType;
483 
484  QgsRasterPipe mPipe;
485 
487  QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
488 };
489 
490 // clazy:excludeall=qstring-allocations
491 
492 #endif
The class is used as a container of context for various read/write operations on other objects...
A rectangle specified with double values.
Definition: qgsrectangle.h:41
Base class for all map layer types.
Definition: qgsmaplayer.h:64
Base class for processing modules.
Definition: qgsrasterpipe.h:46
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_MULTI_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type different from Byte.
QgsHueSaturationFilter * hueSaturationFilter() const
DrawingStyle
This enumerator describes the different kinds of drawing we can do.
Definition: qgsraster.h:89
This class provides qgis with the ability to render raster datasets onto the mapcanvas.
QgsRasterPipe * pipe()
Returns the raster pipe.
Resample filter pipe for rasters.
QgsRasterRenderer * renderer() const
static const double SAMPLE_SIZE
Default sample size (number of pixels) for estimated statistics/histogram calculation.
QMap< QString, QString > QgsStringMap
Definition: qgis.h:587
QgsBrightnessContrastFilter * brightnessFilter() const
ColorShadingAlgorithm
This enumerator describes the types of shading that can be used.
static const QgsRasterMinMaxOrigin::Limits MULTIPLE_BAND_SINGLE_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type Byte.
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:37
This class describes the origin of min/max values.
#define SIP_SKIP
Definition: qgis_sip.h:119
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm SINGLE_BAND_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for single band raster.
#define SIP_TRANSFER
Definition: qgis_sip.h:36
LayerType rasterType()
Returns the raster layer type (which is a read only property).
#define SIP_FACTORY
Definition: qgis_sip.h:69
#define SIP_DEPRECATED
Definition: qgis_sip.h:99
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into allowing algorithms to be written in pure substantial changes are required in order to port existing x Processing algorithms for QGIS x The most significant changes are outlined not GeoAlgorithm For algorithms which operate on features one by consider subclassing the QgsProcessingFeatureBasedAlgorithm class This class allows much of the boilerplate code for looping over features from a vector layer to be bypassed and instead requires implementation of a processFeature method Ensure that your algorithm(or algorithm 's parent class) implements the new pure virtual createInstance(self) call
static const QgsRasterMinMaxOrigin::Limits SINGLE_BAND_MIN_MAX_LIMITS
Default enhancement limits for single band raster.
Limits
This enumerator describes the limits used to compute min/max values.
QList< QPair< QString, QColor > > QgsLegendColorList
LayerOptions(bool loadDefaultStyle=true)
Constructor for LayerOptions.
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used...
Contains information about the context of a rendering operation.
Setting options for creating vector data providers.
QgsRasterResampleFilter * resampleFilter() const
Sets raster resample filter. Takes ownership of the resample filter object.
Brightness/contrast filter pipe for rasters.
Color and saturation filter pipe for rasters.
bool isSpatial() const override
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
Base class for utility classes that encapsulate information necessary for rendering of map layers...
This class provides details of the viewable area that a raster will be rendered into.
LayerType
This enumerator describes the type of raster layer.
Raster renderer pipe that applies colors to a raster.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_SINGLE_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type Byte.
Setting options for loading raster layers.
static const QgsRasterMinMaxOrigin::Limits MULTIPLE_BAND_MULTI_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type different from Byte.
#define SIP_PYNAME(name)
Definition: qgis_sip.h:74
Base class for raster data providers.