QGIS API Documentation  3.23.0-Master (eb871beae0)
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 "qgis.h"
35 #include "qgsmaplayer.h"
36 #include "qgsraster.h"
37 #include "qgsrasterdataprovider.h"
38 #include "qgsrasterviewport.h"
39 #include "qgsrasterminmaxorigin.h"
40 #include "qgscontrastenhancement.h"
41 
42 class QgsMapToPixel;
43 class QgsRasterRenderer;
44 class QgsRectangle;
46 class QgsRasterPipe;
50 
51 class QImage;
52 class QPixmap;
53 class QSlider;
54 
55 typedef QList < QPair< QString, QColor > > QgsLegendColorList;
56 
74 class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
75 {
76  Q_OBJECT
77  public:
78 
80  static const double SAMPLE_SIZE;
81 
84 
87 
90 
93 
96 
99 
101  QgsRasterLayer();
102 
108  {
109 
113  explicit LayerOptions( bool loadDefaultStyle = true,
115  : loadDefaultStyle( loadDefaultStyle )
116  , transformContext( transformContext )
117  {}
118 
120  bool loadDefaultStyle = true;
121 
127 
141  bool skipCrsValidation = false;
142 
143  };
144 
157  explicit QgsRasterLayer( const QString &uri,
158  const QString &baseName = QString(),
159  const QString &providerType = "gdal",
161 
162  ~QgsRasterLayer() override;
163 
164 #ifdef SIP_RUN
165  SIP_PYOBJECT __repr__();
166  % MethodCode
167  QString str = QStringLiteral( "<QgsRasterLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
168  sipRes = PyUnicode_FromString( str.toUtf8().constData() );
169  % End
170 #endif
171 
178  QgsRasterLayer *clone() const override SIP_FACTORY;
179 
182  {
187  UserDefinedShader
188  };
189 
192  {
196  ColorLayer
197  };
198 
205  static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
206  // TODO QGIS 4.0 - rename fileNameQString to fileName
207 
208  static bool isValidRasterFileName( const QString &fileNameQString );
209 
211  static QDateTime lastModified( const QString &name );
212 
217  Q_DECL_DEPRECATED void setDataProvider( const QString &provider ) SIP_DEPRECATED;
218 
226  void setDataProvider( const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
227 
231  LayerType rasterType() { return mRasterType; }
232 
237  void setRenderer( QgsRasterRenderer *renderer SIP_TRANSFER );
238 
244  QgsRasterRenderer *renderer() const;
245 
252  QgsRasterResampleFilter *resampleFilter() const;
253 
260  QgsBrightnessContrastFilter *brightnessFilter() const;
261 
268  QgsHueSaturationFilter *hueSaturationFilter() const;
269 
277  void setResamplingStage( Qgis::RasterResamplingStage stage );
278 
286  Qgis::RasterResamplingStage resamplingStage() const;
287 
291  QgsRasterPipe *pipe() { return mPipe.get(); }
292 
297  int width() const;
298 
303  int height() const;
304 
308  int bandCount() const;
309 
313  QString bandName( int bandNoInt ) const;
314 
321 
327  const QgsRasterDataProvider *dataProvider() const SIP_PYNAME( constDataProvider ) override;
328 
329  void reload() override;
330  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
331 
333  void draw( QPainter *theQPainter,
334  QgsRasterViewPort *myRasterViewPort,
335  const QgsMapToPixel *qgsMapToPixel = nullptr );
336 
342  Q_DECL_DEPRECATED QgsLegendColorList legendSymbologyItems() const SIP_DEPRECATED;
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 
376  void setOpacity( double opacity ) FINAL;
377  double opacity() const FINAL;
378 
387  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
388  QgsRasterMinMaxOrigin::Limits limits = QgsRasterMinMaxOrigin::MinMax,
389  const QgsRectangle &extent = QgsRectangle(),
390  int sampleSize = QgsRasterLayer::SAMPLE_SIZE,
391  bool generateLookupTableFlag = true );
392 
397  void refreshContrastEnhancement( const QgsRectangle &extent ) SIP_SKIP;
398 
403  void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent ) SIP_SKIP;
404 
410  virtual QString subsetString() const;
411 
420  virtual bool setSubsetString( const QString &subset );
421 
426  bool defaultContrastEnhancementSettings(
427  QgsContrastEnhancement::ContrastEnhancementAlgorithm &myAlgorithm,
428  QgsRasterMinMaxOrigin::Limits &myLimits ) const SIP_SKIP;
429 
431  void setDefaultContrastEnhancement();
432 
433  QStringList subLayers() const override;
434 
439  QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
440  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
441 
442  void setLayerOrder( const QStringList &layers ) override;
443  void setSubLayerVisibility( const QString &name, bool vis ) override;
444  QDateTime timestamp() const override;
445  bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
446 
456  bool writeSld( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QVariantMap &props = QVariantMap() ) const;
457 
466  bool ignoreExtents() const;
467 
468  QgsMapLayerTemporalProperties *temporalProperties() override;
469 
470  public slots:
471  void showStatusMessage( const QString &message );
472 
478  virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
479 
480  signals:
481 
486  void subsetStringChanged();
487 
488 
489  protected:
490  bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
491  bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
492  bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
493  bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage,
494  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
495  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage,
496  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
497  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
498  QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
499  QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
500 
501  private:
503  void init();
504 
506  void closeDataProvider();
507 
509  bool update();
510 
512  void setRendererForDrawingStyle( QgsRaster::DrawingStyle drawingStyle );
513 
514  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
515  QgsRasterMinMaxOrigin::Limits limits,
516  const QgsRectangle &extent,
517  int sampleSize,
518  bool generateLookupTableFlag,
519  QgsRasterRenderer *rasterRenderer );
520 
522  void refreshRenderer( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent );
523 
524  void computeMinMax( int band,
525  const QgsRasterMinMaxOrigin &mmo,
526  QgsRasterMinMaxOrigin::Limits limits,
527  const QgsRectangle &extent,
528  int sampleSize,
529  double &min, double &max );
530 
542  void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags ) override;
543 
545  const QString QSTRING_NOT_SET;
546  const QString TRSTRING_NOT_SET;
547 
549  QgsRasterDataProvider *mDataProvider = nullptr;
550 
552  QgsRasterLayerTemporalProperties *mTemporalProperties = nullptr;
553 
555  QDateTime mLastModified;
556 
557  QgsRasterViewPort mLastViewPort;
558 
559  LayerType mRasterType = GrayOrUndefined;
560 
561  std::unique_ptr< QgsRasterPipe > mPipe;
562 
564  QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
565 
566  QDomDocument mOriginalStyleDocument;
567  QDomElement mOriginalStyleElement;
568 };
569 
570 // clazy:excludeall=qstring-allocations
571 
572 #endif
RasterResamplingStage
Stage at which raster resampling occurs.
Definition: qgis.h:502
Brightness/contrast and gamma correction filter pipe for rasters.
Manipulates raster or point cloud pixel values so that they enhanceContrast or clip into a specified ...
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used.
Contains information about the context in which a coordinate transform is executed.
Abstract base class for spatial data provider implementations.
Color and saturation filter pipe for rasters.
Base class for utility classes that encapsulate information necessary for rendering of map layers.
Base class for storage of map layer temporal properties.
Base class for all map layer types.
Definition: qgsmaplayer.h:73
QString providerType() const
Returns the provider type (provider key) for this layer.
virtual void setOpacity(double opacity)
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
virtual QString htmlMetadata() const
Obtain a formatted HTML string containing assorted metadata for this layer.
double opacity
Definition: qgsmaplayer.h:82
virtual Q_INVOKABLE QgsDataProvider * dataProvider()
Returns the layer's data provider, it may be nullptr.
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:39
Base class for raster data providers.
Implementation of map layer temporal properties for raster layers.
Represents a raster layer.
LayerType
This enumerator describes the type of raster layer.
ColorShadingAlgorithm
This enumerator describes the types of shading that can be used.
QgsRasterPipe * pipe()
Returns the raster pipe.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_SINGLE_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type Byte.
static const QgsRasterMinMaxOrigin::Limits SINGLE_BAND_MIN_MAX_LIMITS
Default enhancement limits for single band raster.
static const QgsRasterMinMaxOrigin::Limits MULTIPLE_BAND_MULTI_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type different from Byte.
LayerType rasterType()
Returns the raster layer type (which is a read only property).
static const double SAMPLE_SIZE
Default sample size (number of pixels) for estimated statistics/histogram calculation.
static const QgsRasterMinMaxOrigin::Limits MULTIPLE_BAND_SINGLE_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type Byte.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_MULTI_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type different from Byte.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm SINGLE_BAND_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for single band raster.
This class describes the origin of min/max values.
Limits
This enumerator describes the limits used to compute min/max values.
Contains a pipeline of raster interfaces for sequential raster processing.
Definition: qgsrasterpipe.h:50
Raster renderer pipe that applies colors to a raster.
Resample filter pipe for rasters.
Raster namespace.
Definition: qgsraster.h:32
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:42
Contains information about the context of a rendering operation.
An interface for classes which can visit style entity (e.g.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition: qgsgeos.h:79
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
#define str(x)
Definition: qgis.cpp:37
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_SKIP
Definition: qgis_sip.h:126
#define FINAL
Definition: qgis_sip.h:228
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_FACTORY
Definition: qgis_sip.h:76
constexpr int SAMPLE_SIZE
QList< QPair< QString, QColor > > QgsLegendColorList
Setting options for creating vector data providers.
Setting options for loading raster layers.
LayerOptions(bool loadDefaultStyle=true, const QgsCoordinateTransformContext &transformContext=QgsCoordinateTransformContext())
Constructor for LayerOptions.
This class provides details of the viewable area that a raster will be rendered into.