QGIS API Documentation  3.17.0-Master (a035f434f4)
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 
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 
153  explicit QgsRasterLayer( const QString &uri,
154  const QString &baseName = QString(),
155  const QString &providerType = "gdal",
157 
158  ~QgsRasterLayer() override;
159 
160 #ifdef SIP_RUN
161  SIP_PYOBJECT __repr__();
162  % MethodCode
163  QString str = QStringLiteral( "<QgsRasterLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
164  sipRes = PyUnicode_FromString( str.toUtf8().constData() );
165  % End
166 #endif
167 
174  QgsRasterLayer *clone() const override SIP_FACTORY;
175 
178  {
183  UserDefinedShader
184  };
185 
188  {
192  ColorLayer
193  };
194 
201  static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
202  // TODO QGIS 4.0 - rename fileNameQString to fileName
203 
204  static bool isValidRasterFileName( const QString &fileNameQString );
205 
207  static QDateTime lastModified( const QString &name );
208 
213  Q_DECL_DEPRECATED void setDataProvider( const QString &provider ) SIP_DEPRECATED;
214 
222  void setDataProvider( const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
223 
236  void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false ) override;
237 
241  LayerType rasterType() { return mRasterType; }
242 
247  void setRenderer( QgsRasterRenderer *renderer SIP_TRANSFER );
248 
254  QgsRasterRenderer *renderer() const { return mPipe.renderer(); }
255 
262  QgsRasterResampleFilter *resampleFilter() const { return mPipe.resampleFilter(); }
263 
270  QgsBrightnessContrastFilter *brightnessFilter() const { return mPipe.brightnessFilter(); }
271 
278  QgsHueSaturationFilter *hueSaturationFilter() const { return mPipe.hueSaturationFilter(); }
279 
287  void setResamplingStage( QgsRasterPipe::ResamplingStage stage );
288 
296  QgsRasterPipe::ResamplingStage resamplingStage() const { return mPipe.resamplingStage(); }
297 
301  QgsRasterPipe *pipe() { return &mPipe; }
302 
307  int width() const;
308 
313  int height() const;
314 
318  int bandCount() const;
319 
323  QString bandName( int bandNoInt ) const;
324 
330  QgsRasterDataProvider *dataProvider() override;
331 
337  const QgsRasterDataProvider *dataProvider() const SIP_PYNAME( constDataProvider ) override;
338 
339  void reload() override;
340  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
341 
343  void draw( QPainter *theQPainter,
344  QgsRasterViewPort *myRasterViewPort,
345  const QgsMapToPixel *qgsMapToPixel = nullptr );
346 
348  QgsLegendColorList legendSymbologyItems() const;
349 
350  bool isSpatial() const override { return true; }
351 
352  QString htmlMetadata() const override;
353 
358  QPixmap paletteAsPixmap( int bandNumber = 1 );
359 
361  QString providerType() const;
362 
371  double rasterUnitsPerPixelX() const;
372 
380  double rasterUnitsPerPixelY() const;
381 
382  void setOpacity( double opacity ) FINAL;
383  double opacity() const FINAL;
384 
395  const QgsRectangle &extent = QgsRectangle(),
396  int sampleSize = QgsRasterLayer::SAMPLE_SIZE,
397  bool generateLookupTableFlag = true );
398 
403  void refreshContrastEnhancement( const QgsRectangle &extent ) SIP_SKIP;
404 
409  void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent ) SIP_SKIP;
410 
416  virtual QString subsetString() const;
417 
426  virtual bool setSubsetString( const QString &subset );
427 
432  bool defaultContrastEnhancementSettings(
434  QgsRasterMinMaxOrigin::Limits &myLimits ) const SIP_SKIP;
435 
437  void setDefaultContrastEnhancement();
438 
439  QStringList subLayers() const override;
440 
445  QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
446  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
447 
448  void setLayerOrder( const QStringList &layers ) override;
449  void setSubLayerVisibility( const QString &name, bool vis ) override;
450  QDateTime timestamp() const override;
451  bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
452 
462  bool writeSld( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsStringMap &props = QgsStringMap() ) const;
463 
472  bool ignoreExtents() const;
473 
474  QgsMapLayerTemporalProperties *temporalProperties() override;
475 
476  public slots:
477  void showStatusMessage( const QString &message );
478 
484  virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
485 
486  signals:
487 
492  void subsetStringChanged();
493 
494 
495  protected:
496  bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
497  bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
498  bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
499  bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage,
500  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
501  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage,
502  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
503  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
504  QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
505  QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
506 
507  private:
509  void init();
510 
512  void closeDataProvider();
513 
515  bool update();
516 
518  void setRendererForDrawingStyle( QgsRaster::DrawingStyle drawingStyle );
519 
520  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
522  const QgsRectangle &extent,
523  int sampleSize,
524  bool generateLookupTableFlag,
525  QgsRasterRenderer *rasterRenderer );
526 
528  void refreshRenderer( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent );
529 
530  void computeMinMax( int band,
531  const QgsRasterMinMaxOrigin &mmo,
533  const QgsRectangle &extent,
534  int sampleSize,
535  double &min, double &max );
536 
538  const QString QSTRING_NOT_SET;
539  const QString TRSTRING_NOT_SET;
540 
542  QgsRasterDataProvider *mDataProvider = nullptr;
543 
545  QgsRasterLayerTemporalProperties *mTemporalProperties = nullptr;
546 
548  QDateTime mLastModified;
549 
550  QgsRasterViewPort mLastViewPort;
551 
552  LayerType mRasterType;
553 
554  QgsRasterPipe mPipe;
555 
557  QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
558 
559  QDomDocument mOriginalStyleDocument;
560  QDomElement mOriginalStyleElement;
561 };
562 
563 // clazy:excludeall=qstring-allocations
564 
565 #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:83
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:759
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.
#define FINAL
Definition: qgis_sip.h:228
QgsRasterResampleFilter * resampleFilter() const
Returns the raster&#39;s resample filter.
Brightness/contrast and gamma correction 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.