QGIS API Documentation  3.15.0-Master (c0197371fe)
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;
46 
47 class QImage;
48 class QPixmap;
49 class QSlider;
50 
51 typedef QList < QPair< QString, QColor > > QgsLegendColorList;
52 
72 class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
73 {
74  Q_OBJECT
75  public:
76 
78  static const double SAMPLE_SIZE;
79 
82 
85 
88 
91 
94 
97 
100 
106  {
107 
111  explicit LayerOptions( bool loadDefaultStyle = true,
113  : loadDefaultStyle( loadDefaultStyle )
114  , transformContext( transformContext )
115  {}
116 
118  bool loadDefaultStyle = true;
119 
125 
139  bool skipCrsValidation = false;
140 
141  };
142 
155  explicit QgsRasterLayer( const QString &uri,
156  const QString &baseName = QString(),
157  const QString &providerType = "gdal",
159 
160  ~QgsRasterLayer() override;
161 
168  QgsRasterLayer *clone() const override SIP_FACTORY;
169 
172  {
177  UserDefinedShader
178  };
179 
182  {
186  ColorLayer
187  };
188 
195  static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
196  // TODO QGIS 4.0 - rename fileNameQString to fileName
197 
198  static bool isValidRasterFileName( const QString &fileNameQString );
199 
201  static QDateTime lastModified( const QString &name );
202 
207  Q_DECL_DEPRECATED void setDataProvider( const QString &provider ) SIP_DEPRECATED;
208 
215  void setDataProvider( const QString &provider, const QgsDataProvider::ProviderOptions &options );
216 
229  void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false ) override;
230 
234  LayerType rasterType() { return mRasterType; }
235 
240  void setRenderer( QgsRasterRenderer *renderer SIP_TRANSFER );
241 
247  QgsRasterRenderer *renderer() const { return mPipe.renderer(); }
248 
255  QgsRasterResampleFilter *resampleFilter() const { return mPipe.resampleFilter(); }
256 
263  QgsBrightnessContrastFilter *brightnessFilter() const { return mPipe.brightnessFilter(); }
264 
271  QgsHueSaturationFilter *hueSaturationFilter() const { return mPipe.hueSaturationFilter(); }
272 
280  void setResamplingStage( QgsRasterPipe::ResamplingStage stage );
281 
289  QgsRasterPipe::ResamplingStage resamplingStage() const { return mPipe.resamplingStage(); }
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 
323  QgsRasterDataProvider *dataProvider() override;
324 
330  const QgsRasterDataProvider *dataProvider() const SIP_PYNAME( constDataProvider ) override;
331 
332  void reload() override;
333  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
334 
336  void draw( QPainter *theQPainter,
337  QgsRasterViewPort *myRasterViewPort,
338  const QgsMapToPixel *qgsMapToPixel = nullptr );
339 
341  QgsLegendColorList legendSymbologyItems() const;
342 
343  bool isSpatial() const override { return true; }
344 
345  QString htmlMetadata() const override;
346 
351  QPixmap paletteAsPixmap( int bandNumber = 1 );
352 
354  QString providerType() const;
355 
364  double rasterUnitsPerPixelX() const;
365 
373  double rasterUnitsPerPixelY() const;
374 
386  const QgsRectangle &extent = QgsRectangle(),
387  int sampleSize = QgsRasterLayer::SAMPLE_SIZE,
388  bool generateLookupTableFlag = true );
389 
394  void refreshContrastEnhancement( const QgsRectangle &extent ) SIP_SKIP;
395 
400  void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent ) SIP_SKIP;
401 
407  virtual QString subsetString() const;
408 
417  virtual bool setSubsetString( const QString &subset );
418 
423  bool defaultContrastEnhancementSettings(
425  QgsRasterMinMaxOrigin::Limits &myLimits ) const SIP_SKIP;
426 
428  void setDefaultContrastEnhancement();
429 
430  QStringList subLayers() const override;
431 
435  QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
436  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
437 
438  void setLayerOrder( const QStringList &layers ) override;
439  void setSubLayerVisibility( const QString &name, bool vis ) override;
440  QDateTime timestamp() const override;
441  bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
442 
452  bool writeSld( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsStringMap &props = QgsStringMap() ) const;
453 
462  bool ignoreExtents() const;
463 
464  QgsMapLayerTemporalProperties *temporalProperties() override;
465 
466  public slots:
467  void showStatusMessage( const QString &message );
468 
474  virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
475 
476  signals:
477 
482  void subsetStringChanged();
483 
484 
485  protected:
486  bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
487  bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
488  bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
489  bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage,
490  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
491  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage,
492  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
493  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
494  QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
495  QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
496 
497  private:
499  void init();
500 
502  void closeDataProvider();
503 
505  bool update();
506 
508  void setRendererForDrawingStyle( QgsRaster::DrawingStyle drawingStyle );
509 
510  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
512  const QgsRectangle &extent,
513  int sampleSize,
514  bool generateLookupTableFlag,
515  QgsRasterRenderer *rasterRenderer );
516 
518  void refreshRenderer( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent );
519 
520  void computeMinMax( int band,
521  const QgsRasterMinMaxOrigin &mmo,
523  const QgsRectangle &extent,
524  int sampleSize,
525  double &min, double &max );
526 
528  const QString QSTRING_NOT_SET;
529  const QString TRSTRING_NOT_SET;
530 
532  QgsRasterDataProvider *mDataProvider = nullptr;
533 
535  QgsRasterLayerTemporalProperties *mTemporalProperties = nullptr;
536 
538  QDateTime mLastModified;
539 
540  QgsRasterViewPort mLastViewPort;
541 
542  LayerType mRasterType;
543 
544  QgsRasterPipe mPipe;
545 
547  QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
548 
549  QDomDocument mOriginalStyleDocument;
550  QDomElement mOriginalStyleElement;
551 };
552 
553 // clazy:excludeall=qstring-allocations
554 
555 #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:81
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
Returns the raster&#39;s hue/saturation filter.
DrawingStyle
This enumerator describes the different kinds of drawing we can do.
Definition: qgsraster.h:89
Represents a raster layer.
QgsRasterPipe * pipe()
Returns the raster pipe.
Resample filter pipe for rasters.
QgsRasterRenderer * renderer() const
Returns the raster&#39;s renderer.
static const double SAMPLE_SIZE
Default sample size (number of pixels) for estimated statistics/histogram calculation.
An interface for classes which can visit style entity (e.g.
QMap< QString, QString > QgsStringMap
Definition: qgis.h:714
QgsBrightnessContrastFilter * brightnessFilter() const
Returns the raster&#39;s brightness/contrast filter.
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:126
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:76
Contains information about the context in which a coordinate transform is executed.
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
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.
QgsRasterPipe::ResamplingStage resamplingStage() const
Returns which stage of the pipe should apply resampling.
ResamplingStage
Stage at which resampling occurs.
Limits
This enumerator describes the limits used to compute min/max values.
QList< QPair< QString, QColor > > QgsLegendColorList
Base class for storage of map layer temporal properties.
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
Returns the raster&#39;s resample filter.
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...
Implementation of map layer temporal properties for raster 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:81
Base class for raster data providers.