QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
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 QPixmap;
47 class QSlider;
48 
49 typedef QList < QPair< QString, QColor > > QgsLegendColorList;
50 
70 class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
71 {
72  Q_OBJECT
73  public:
74 
76  static const double SAMPLE_SIZE;
77 
80 
83 
86 
89 
92 
95 
98 
104  {
105 
109  explicit LayerOptions( bool loadDefaultStyle = true,
111  : loadDefaultStyle( loadDefaultStyle )
112  , transformContext( transformContext )
113  {}
114 
116  bool loadDefaultStyle = true;
117 
123 
137  bool skipCrsValidation = false;
138 
139  };
140 
156  explicit QgsRasterLayer( const QString &uri,
157  const QString &baseName = QString(),
158  const QString &providerType = "gdal",
160 
161  ~QgsRasterLayer() override;
162 
169  QgsRasterLayer *clone() const override SIP_FACTORY;
170 
173  {
178  UserDefinedShader
179  };
180 
183  {
187  ColorLayer
188  };
189 
196  static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
197  // TODO QGIS 4.0 - rename fileNameQString to fileName
198 
199  static bool isValidRasterFileName( const QString &fileNameQString );
200 
202  static QDateTime lastModified( const QString &name );
203 
208  Q_DECL_DEPRECATED void setDataProvider( const QString &provider ) SIP_DEPRECATED;
209 
216  void setDataProvider( const QString &provider, const QgsDataProvider::ProviderOptions &options );
217 
230  void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false ) override;
231 
235  LayerType rasterType() { return mRasterType; }
236 
241  void setRenderer( QgsRasterRenderer *renderer SIP_TRANSFER );
242 
248  QgsRasterRenderer *renderer() const { return mPipe.renderer(); }
249 
256  QgsRasterResampleFilter *resampleFilter() const { return mPipe.resampleFilter(); }
257 
264  QgsBrightnessContrastFilter *brightnessFilter() const { return mPipe.brightnessFilter(); }
265 
272  QgsHueSaturationFilter *hueSaturationFilter() const { return mPipe.hueSaturationFilter(); }
273 
277  QgsRasterPipe *pipe() { return &mPipe; }
278 
283  int width() const;
284 
289  int height() const;
290 
294  int bandCount() const;
295 
299  QString bandName( int bandNoInt ) const;
300 
306  QgsRasterDataProvider *dataProvider() override;
307 
313  const QgsRasterDataProvider *dataProvider() const SIP_PYNAME( constDataProvider ) override;
314 
315  void reload() override;
316  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
317 
319  void draw( QPainter *theQPainter,
320  QgsRasterViewPort *myRasterViewPort,
321  const QgsMapToPixel *qgsMapToPixel = nullptr );
322 
324  QgsLegendColorList legendSymbologyItems() const;
325 
326  bool isSpatial() const override { return true; }
327 
328  QString htmlMetadata() const override;
329 
334  QPixmap paletteAsPixmap( int bandNumber = 1 );
335 
337  QString providerType() const;
338 
347  double rasterUnitsPerPixelX() const;
348 
356  double rasterUnitsPerPixelY() const;
357 
369  const QgsRectangle &extent = QgsRectangle(),
370  int sampleSize = QgsRasterLayer::SAMPLE_SIZE,
371  bool generateLookupTableFlag = true );
372 
377  void refreshContrastEnhancement( const QgsRectangle &extent ) SIP_SKIP;
378 
383  void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent ) SIP_SKIP;
384 
389  bool defaultContrastEnhancementSettings(
391  QgsRasterMinMaxOrigin::Limits &myLimits ) const SIP_SKIP;
392 
394  void setDefaultContrastEnhancement();
395 
396  QStringList subLayers() const override;
397 
401  QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
402  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
403 
404  void setLayerOrder( const QStringList &layers ) override;
405  void setSubLayerVisibility( const QString &name, bool vis ) override;
406  QDateTime timestamp() const override;
407  bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
408 
418  bool writeSld( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsStringMap &props = QgsStringMap() ) const;
419 
428  bool ignoreExtents() const;
429 
430  public slots:
431  void showStatusMessage( const QString &message );
432 
438  virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
439 
440  protected:
441  bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
442  bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
443  bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
444  bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage,
445  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
446  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage,
447  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
448  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
449  QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
450  QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
451  private:
453  void init();
454 
456  void closeDataProvider();
457 
459  bool update();
460 
462  void setRendererForDrawingStyle( QgsRaster::DrawingStyle drawingStyle );
463 
464  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
466  const QgsRectangle &extent,
467  int sampleSize,
468  bool generateLookupTableFlag,
469  QgsRasterRenderer *rasterRenderer );
470 
471  void computeMinMax( int band,
472  const QgsRasterMinMaxOrigin &mmo,
474  const QgsRectangle &extent,
475  int sampleSize,
476  double &min, double &max );
477 
479  const QString QSTRING_NOT_SET;
480  const QString TRSTRING_NOT_SET;
481 
483  QgsRasterDataProvider *mDataProvider = nullptr;
484 
486  QDateTime mLastModified;
487 
488  QgsRasterViewPort mLastViewPort;
489 
490  LayerType mRasterType;
491 
492  QgsRasterPipe mPipe;
493 
495  QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
496 
497  QDomDocument mOriginalStyleDocument;
498  QDomElement mOriginalStyleElement;
499 };
500 
501 // clazy:excludeall=qstring-allocations
502 
503 #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:79
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:694
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.
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
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...
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.