QGIS API Documentation  3.8.0-Zanzibar (11aff65)
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,
179  : loadDefaultStyle( loadDefaultStyle )
180  , transformContext( transformContext )
181  {}
182 
184  bool loadDefaultStyle = true;
185 
191 
192  };
193 
209  explicit QgsRasterLayer( const QString &uri,
210  const QString &baseName = QString(),
211  const QString &providerType = "gdal",
213 
214  ~QgsRasterLayer() override;
215 
222  QgsRasterLayer *clone() const override SIP_FACTORY;
223 
226  {
231  UserDefinedShader
232  };
233 
236  {
240  ColorLayer
241  };
242 
249  static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
250  // TODO QGIS 4.0 - rename fileNameQString to fileName
251 
252  static bool isValidRasterFileName( const QString &fileNameQString );
253 
255  static QDateTime lastModified( const QString &name );
256 
261  Q_DECL_DEPRECATED void setDataProvider( const QString &provider ) SIP_DEPRECATED;
262 
269  void setDataProvider( const QString &provider, const QgsDataProvider::ProviderOptions &options );
270 
283  void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false ) override;
284 
288  LayerType rasterType() { return mRasterType; }
289 
291  void setRenderer( QgsRasterRenderer *renderer SIP_TRANSFER );
292  QgsRasterRenderer *renderer() const { return mPipe.renderer(); }
293 
295  QgsRasterResampleFilter *resampleFilter() const { return mPipe.resampleFilter(); }
296 
297  QgsBrightnessContrastFilter *brightnessFilter() const { return mPipe.brightnessFilter(); }
298  QgsHueSaturationFilter *hueSaturationFilter() const { return mPipe.hueSaturationFilter(); }
299 
303  QgsRasterPipe *pipe() { return &mPipe; }
304 
309  int width() const;
310 
315  int height() const;
316 
320  int bandCount() const;
321 
325  QString bandName( int bandNoInt ) const;
326 
327  // Returns nullptr if not using the data provider model (i.e. directly using GDAL)
328  QgsRasterDataProvider *dataProvider() override;
329 
330  // Returns nullptr if not using the data provider model (i.e. directly using GDAL)
331  const QgsRasterDataProvider *dataProvider() const SIP_PYNAME( constDataProvider ) override;
332 
333  void reload() override;
334  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
335 
337  void draw( QPainter *theQPainter,
338  QgsRasterViewPort *myRasterViewPort,
339  const QgsMapToPixel *qgsMapToPixel = nullptr );
340 
342  QgsLegendColorList legendSymbologyItems() const;
343 
344  bool isSpatial() const override { return true; }
345 
346  QString htmlMetadata() const override;
347 
352  QPixmap paletteAsPixmap( int bandNumber = 1 );
353 
355  QString providerType() const;
356 
365  double rasterUnitsPerPixelX() const;
366 
374  double rasterUnitsPerPixelY() const;
375 
387  const QgsRectangle &extent = QgsRectangle(),
388  int sampleSize = QgsRasterLayer::SAMPLE_SIZE,
389  bool generateLookupTableFlag = true );
390 
395  void refreshContrastEnhancement( const QgsRectangle &extent ) SIP_SKIP;
396 
401  void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent ) SIP_SKIP;
402 
407  bool defaultContrastEnhancementSettings(
409  QgsRasterMinMaxOrigin::Limits &myLimits ) const SIP_SKIP;
410 
412  void setDefaultContrastEnhancement();
413 
414  QStringList subLayers() const override;
415 
419  QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
420  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
421 
422  void setLayerOrder( const QStringList &layers ) override;
423  void setSubLayerVisibility( const QString &name, bool vis ) override;
424  QDateTime timestamp() const override;
425 
435  bool writeSld( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsStringMap &props = QgsStringMap() ) const;
436 
437 
438  public slots:
439  void showStatusMessage( const QString &message );
440 
446  virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
447 
448  protected:
449  bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
450  bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
451  bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
452  bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage,
453  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
454  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage,
455  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
456  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
457  QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
458  QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
459  private:
461  void init();
462 
464  void closeDataProvider();
465 
467  bool update();
468 
470  void setRendererForDrawingStyle( QgsRaster::DrawingStyle drawingStyle );
471 
472  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
474  const QgsRectangle &extent,
475  int sampleSize,
476  bool generateLookupTableFlag,
477  QgsRasterRenderer *rasterRenderer );
478 
479  void computeMinMax( int band,
480  const QgsRasterMinMaxOrigin &mmo,
482  const QgsRectangle &extent,
483  int sampleSize,
484  double &min, double &max );
485 
487  const QString QSTRING_NOT_SET;
488  const QString TRSTRING_NOT_SET;
489 
491  QgsRasterDataProvider *mDataProvider = nullptr;
492 
494  QDateTime mLastModified;
495 
496  QgsRasterViewPort mLastViewPort;
497 
498  LayerType mRasterType;
499 
500  QgsRasterPipe mPipe;
501 
503  QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
504 };
505 
506 // clazy:excludeall=qstring-allocations
507 
508 #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:78
LayerOptions(bool loadDefaultStyle=true, const QgsCoordinateTransformContext &transformContext=QgsCoordinateTransformContext())
Constructor for LayerOptions.
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
Contains information about the context in which a coordinate transform is executed.
#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
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.