QGIS API Documentation  3.0.2-Girona (307d082)
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.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 QLibrary;
47 class QPixmap;
48 class QSlider;
49 
50 typedef QList < QPair< QString, QColor > > QgsLegendColorList;
51 
139 class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
140 {
141  Q_OBJECT
142  public:
143 
145  static const double SAMPLE_SIZE;
146 
149 
152 
155 
158 
161 
164 
166  QgsRasterLayer();
167 
173  {
174 
178  explicit LayerOptions( bool loadDefaultStyle = true )
179  : loadDefaultStyle( loadDefaultStyle )
180  {}
181 
183  bool loadDefaultStyle = true;
184  };
185 
203  explicit QgsRasterLayer( const QString &uri,
204  const QString &baseName = QString(),
205  const QString &providerKey = "gdal",
207 
208  ~QgsRasterLayer() override;
209 
216  QgsRasterLayer *clone() const override SIP_FACTORY;
217 
220  {
225  UserDefinedShader
226  };
227 
230  {
234  ColorLayer
235  };
236 
243  static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
244  static bool isValidRasterFileName( const QString &fileNameQString );
245 
247  static QDateTime lastModified( const QString &name );
248 
250  void setDataProvider( const QString &provider );
251 
253  LayerType rasterType() { return mRasterType; }
254 
256  void setRenderer( QgsRasterRenderer *renderer SIP_TRANSFER );
257  QgsRasterRenderer *renderer() const { return mPipe.renderer(); }
258 
260  QgsRasterResampleFilter *resampleFilter() const { return mPipe.resampleFilter(); }
261 
262  QgsBrightnessContrastFilter *brightnessFilter() const { return mPipe.brightnessFilter(); }
263  QgsHueSaturationFilter *hueSaturationFilter() const { return mPipe.hueSaturationFilter(); }
264 
266  QgsRasterPipe *pipe() { return &mPipe; }
267 
269  int width() const;
270 
272  int height() const;
273 
275  int bandCount() const;
276 
278  QString bandName( int bandNoInt ) const;
279 
280  QgsRasterDataProvider *dataProvider() override;
281 
286  const QgsRasterDataProvider *dataProvider() const SIP_PYNAME( constDataProvider ) override;
287 
289  void reload() override;
290 
295  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
296 
298  void draw( QPainter *theQPainter,
299  QgsRasterViewPort *myRasterViewPort,
300  const QgsMapToPixel *qgsMapToPixel = nullptr );
301 
303  QgsLegendColorList legendSymbologyItems() const;
304 
305  bool isSpatial() const override { return true; }
306 
307  QString htmlMetadata() const override;
308 
310  QPixmap paletteAsPixmap( int bandNumber = 1 );
311 
313  QString providerType() const;
314 
316  double rasterUnitsPerPixelX() const;
318  double rasterUnitsPerPixelY() const;
319 
329  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
331  const QgsRectangle &extent = QgsRectangle(),
332  int sampleSize = QgsRasterLayer::SAMPLE_SIZE,
333  bool generateLookupTableFlag = true );
334 
339  // Used by QgisApp::legendLayerStretchUsingCurrentExtent()
340  void refreshContrastEnhancement( const QgsRectangle &extent ) SIP_SKIP;
341 
346  // Used by QgsRasterLayerRenderer
347  void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent ) SIP_SKIP;
348 
353  bool defaultContrastEnhancementSettings(
355  QgsRasterMinMaxOrigin::Limits &myLimits ) const SIP_SKIP;
356 
358  void setDefaultContrastEnhancement();
359 
361  QStringList subLayers() const override;
362 
366  QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
367  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
368 
375  void setLayerOrder( const QStringList &layers ) override;
376 
380  void setSubLayerVisibility( const QString &name, bool vis ) override;
381 
383  QDateTime timestamp() const override;
384 
385  public slots:
386  void showStatusMessage( const QString &message );
387 
388  protected:
390  bool readSymbology( const QDomNode &node, QString &errorMessage, const QgsReadWriteContext &context ) override;
391 
393  bool readStyle( const QDomNode &node, QString &errorMessage, const QgsReadWriteContext &context ) override;
394 
396  bool readXml( const QDomNode &layer_node, const QgsReadWriteContext &context ) override;
397 
399  bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context ) const override;
400 
402  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context ) const override;
403 
405  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
406 
407  private:
409  void init();
410 
412  void closeDataProvider();
413 
415  bool update();
416 
418  void setRendererForDrawingStyle( QgsRaster::DrawingStyle drawingStyle );
419 
420  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
422  const QgsRectangle &extent,
423  int sampleSize,
424  bool generateLookupTableFlag,
425  QgsRasterRenderer *rasterRenderer );
426 
427  void computeMinMax( int band,
428  const QgsRasterMinMaxOrigin &mmo,
430  const QgsRectangle &extent,
431  int sampleSize,
432  double &min, double &max );
433 
435  const QString QSTRING_NOT_SET;
436  const QString TRSTRING_NOT_SET;
437 
439  QgsRasterDataProvider *mDataProvider = nullptr;
440 
442  QDateTime mLastModified;
443 
444  QgsRasterViewPort mLastViewPort;
445 
447  QString mProviderKey;
448 
449  LayerType mRasterType;
450 
451  QgsRasterPipe mPipe;
452 
454  QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
455 };
456 
457 // clazy:excludeall=qstring-allocations
458 
459 #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:39
Base class for all map layer types.
Definition: qgsmaplayer.h:56
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
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()
Get raster pipe.
Resample filter pipe for rasters.
QgsRasterRenderer * renderer() const
static const double SAMPLE_SIZE
Default sample size (number of pixels) for estimated statistics/histogram calculation.
QgsBrightnessContrastFilter * brightnessFilter() const
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:36
This class describes the origin of min/max values.
#define SIP_SKIP
Definition: qgis_sip.h:119
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()
Accessor for raster layer type (which is a read only property)
#define SIP_FACTORY
Definition: qgis_sip.h:69
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
LayerOptions(bool loadDefaultStyle=true)
Constructor for LayerOptions.
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used...
Contains information about the context of a rendering operation.
QgsRasterResampleFilter * resampleFilter() const
Set raster resample filter. Takes ownership of the resample filter object.
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:74
Base class for raster data providers.