QGIS API Documentation  3.10.0-A Coruña (6c816b4204)
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 
137 class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
138 {
139  Q_OBJECT
140  public:
141 
143  static const double SAMPLE_SIZE;
144 
147 
150 
153 
156 
159 
162 
164  QgsRasterLayer();
165 
171  {
172 
176  explicit LayerOptions( bool loadDefaultStyle = true,
178  : loadDefaultStyle( loadDefaultStyle )
179  , transformContext( transformContext )
180  {}
181 
183  bool loadDefaultStyle = true;
184 
190 
204  bool skipCrsValidation = false;
205 
206  };
207 
223  explicit QgsRasterLayer( const QString &uri,
224  const QString &baseName = QString(),
225  const QString &providerType = "gdal",
227 
228  ~QgsRasterLayer() override;
229 
236  QgsRasterLayer *clone() const override SIP_FACTORY;
237 
240  {
245  UserDefinedShader
246  };
247 
250  {
254  ColorLayer
255  };
256 
263  static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
264  // TODO QGIS 4.0 - rename fileNameQString to fileName
265 
266  static bool isValidRasterFileName( const QString &fileNameQString );
267 
269  static QDateTime lastModified( const QString &name );
270 
275  Q_DECL_DEPRECATED void setDataProvider( const QString &provider ) SIP_DEPRECATED;
276 
283  void setDataProvider( const QString &provider, const QgsDataProvider::ProviderOptions &options );
284 
297  void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false ) override;
298 
302  LayerType rasterType() { return mRasterType; }
303 
308  void setRenderer( QgsRasterRenderer *renderer SIP_TRANSFER );
309 
315  QgsRasterRenderer *renderer() const { return mPipe.renderer(); }
316 
323  QgsRasterResampleFilter *resampleFilter() const { return mPipe.resampleFilter(); }
324 
331  QgsBrightnessContrastFilter *brightnessFilter() const { return mPipe.brightnessFilter(); }
332 
339  QgsHueSaturationFilter *hueSaturationFilter() const { return mPipe.hueSaturationFilter(); }
340 
344  QgsRasterPipe *pipe() { return &mPipe; }
345 
350  int width() const;
351 
356  int height() const;
357 
361  int bandCount() const;
362 
366  QString bandName( int bandNoInt ) const;
367 
373  QgsRasterDataProvider *dataProvider() override;
374 
380  const QgsRasterDataProvider *dataProvider() const SIP_PYNAME( constDataProvider ) override;
381 
382  void reload() override;
383  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
384 
386  void draw( QPainter *theQPainter,
387  QgsRasterViewPort *myRasterViewPort,
388  const QgsMapToPixel *qgsMapToPixel = nullptr );
389 
391  QgsLegendColorList legendSymbologyItems() const;
392 
393  bool isSpatial() const override { return true; }
394 
395  QString htmlMetadata() const override;
396 
401  QPixmap paletteAsPixmap( int bandNumber = 1 );
402 
404  QString providerType() const;
405 
414  double rasterUnitsPerPixelX() const;
415 
423  double rasterUnitsPerPixelY() const;
424 
436  const QgsRectangle &extent = QgsRectangle(),
437  int sampleSize = QgsRasterLayer::SAMPLE_SIZE,
438  bool generateLookupTableFlag = true );
439 
444  void refreshContrastEnhancement( const QgsRectangle &extent ) SIP_SKIP;
445 
450  void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent ) SIP_SKIP;
451 
456  bool defaultContrastEnhancementSettings(
458  QgsRasterMinMaxOrigin::Limits &myLimits ) const SIP_SKIP;
459 
461  void setDefaultContrastEnhancement();
462 
463  QStringList subLayers() const override;
464 
468  QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
469  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
470 
471  void setLayerOrder( const QStringList &layers ) override;
472  void setSubLayerVisibility( const QString &name, bool vis ) override;
473  QDateTime timestamp() const override;
474  bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
475 
485  bool writeSld( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsStringMap &props = QgsStringMap() ) const;
486 
495  bool ignoreExtents() const;
496 
497  public slots:
498  void showStatusMessage( const QString &message );
499 
505  virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
506 
507  protected:
508  bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
509  bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
510  bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
511  bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage,
512  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
513  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage,
514  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
515  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
516  QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
517  QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
518  private:
520  void init();
521 
523  void closeDataProvider();
524 
526  bool update();
527 
529  void setRendererForDrawingStyle( QgsRaster::DrawingStyle drawingStyle );
530 
531  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
533  const QgsRectangle &extent,
534  int sampleSize,
535  bool generateLookupTableFlag,
536  QgsRasterRenderer *rasterRenderer );
537 
538  void computeMinMax( int band,
539  const QgsRasterMinMaxOrigin &mmo,
541  const QgsRectangle &extent,
542  int sampleSize,
543  double &min, double &max );
544 
546  const QString QSTRING_NOT_SET;
547  const QString TRSTRING_NOT_SET;
548 
550  QgsRasterDataProvider *mDataProvider = nullptr;
551 
553  QDateTime mLastModified;
554 
555  QgsRasterViewPort mLastViewPort;
556 
557  LayerType mRasterType;
558 
559  QgsRasterPipe mPipe;
560 
562  QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
563 
564  QDomDocument mOriginalStyleDocument;
565  QDomElement mOriginalStyleElement;
566 };
567 
568 // clazy:excludeall=qstring-allocations
569 
570 #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
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
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:612
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.