QGIS API Documentation  2.99.0-Master (9fdd060)
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 
140 class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
141 {
142  Q_OBJECT
143  public:
144 
146  static const double SAMPLE_SIZE;
147 
150 
153 
156 
159 
162 
165 
167  QgsRasterLayer();
168 
186  QgsRasterLayer( const QString &uri,
187  const QString &baseName = QString(),
188  const QString &providerKey = "gdal",
189  bool loadDefaultStyleFlag = true );
190 
191  ~QgsRasterLayer();
192 
199  virtual QgsRasterLayer *clone() const override SIP_FACTORY;
200 
203  {
208  UserDefinedShader
209  };
210 
213  {
217  ColorLayer
218  };
219 
226  static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
227  static bool isValidRasterFileName( const QString &fileNameQString );
228 
230  static QDateTime lastModified( const QString &name );
231 
233  void setDataProvider( const QString &provider );
234 
236  LayerType rasterType() { return mRasterType; }
237 
239  void setRenderer( QgsRasterRenderer *renderer SIP_TRANSFER );
240  QgsRasterRenderer *renderer() const { return mPipe.renderer(); }
241 
243  QgsRasterResampleFilter *resampleFilter() const { return mPipe.resampleFilter(); }
244 
245  QgsBrightnessContrastFilter *brightnessFilter() const { return mPipe.brightnessFilter(); }
246  QgsHueSaturationFilter *hueSaturationFilter() const { return mPipe.hueSaturationFilter(); }
247 
249  QgsRasterPipe *pipe() { return &mPipe; }
250 
252  int width() const;
253 
255  int height() const;
256 
258  int bandCount() const;
259 
261  QString bandName( int bandNoInt ) const;
262 
264 
269  const QgsRasterDataProvider *dataProvider() const SIP_PYNAME( constDataProvider ) override;
270 
272  virtual void reload() override;
273 
278  virtual QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
279 
281  void draw( QPainter *theQPainter,
282  QgsRasterViewPort *myRasterViewPort,
283  const QgsMapToPixel *qgsMapToPixel = nullptr );
284 
286  QgsLegendColorList legendSymbologyItems() const;
287 
288  virtual bool isSpatial() const override { return true; }
289 
290  QString htmlMetadata() const override;
291 
293  QPixmap paletteAsPixmap( int bandNumber = 1 );
294 
296  QString providerType() const;
297 
299  double rasterUnitsPerPixelX() const;
301  double rasterUnitsPerPixelY() const;
302 
312  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
314  const QgsRectangle &extent = QgsRectangle(),
315  int sampleSize = QgsRasterLayer::SAMPLE_SIZE,
316  bool generateLookupTableFlag = true );
317 
322  // Used by QgisApp::legendLayerStretchUsingCurrentExtent()
323  void refreshContrastEnhancement( const QgsRectangle &extent ) SIP_SKIP;
324 
329  // Used by QgsRasterLayerRenderer
330  void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent ) SIP_SKIP;
331 
336  bool defaultContrastEnhancementSettings(
338  QgsRasterMinMaxOrigin::Limits &myLimits ) const SIP_SKIP;
339 
341  void setDefaultContrastEnhancement();
342 
344  virtual QStringList subLayers() const override;
345 
349  QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
350  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
351 
358  virtual void setLayerOrder( const QStringList &layers ) override;
359 
363  virtual void setSubLayerVisibility( const QString &name, bool vis ) override;
364 
366  virtual QDateTime timestamp() const override;
367 
368  public slots:
369  void showStatusMessage( const QString &message );
370 
371  protected:
373  bool readSymbology( const QDomNode &node, QString &errorMessage, const QgsReadWriteContext &context ) override;
374 
376  bool readStyle( const QDomNode &node, QString &errorMessage, const QgsReadWriteContext &context ) override;
377 
379  bool readXml( const QDomNode &layer_node, const QgsReadWriteContext &context ) override;
380 
382  bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context ) const override;
383 
385  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context ) const override;
386 
388  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
389 
390  private:
392  void init();
393 
395  void closeDataProvider();
396 
398  bool update();
399 
401  void setRendererForDrawingStyle( QgsRaster::DrawingStyle drawingStyle );
402 
403  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
405  const QgsRectangle &extent,
406  int sampleSize,
407  bool generateLookupTableFlag,
408  QgsRasterRenderer *rasterRenderer );
409 
410  void computeMinMax( int band,
411  const QgsRasterMinMaxOrigin &mmo,
413  const QgsRectangle &extent,
414  int sampleSize,
415  double &min, double &max );
416 
418  const QString QSTRING_NOT_SET;
419  const QString TRSTRING_NOT_SET;
420 
422  QgsRasterDataProvider *mDataProvider = nullptr;
423 
425  QDateTime mLastModified;
426 
427  QgsRasterViewPort mLastViewPort;
428 
430  QString mProviderKey;
431 
432  LayerType mRasterType;
433 
434  QgsRasterPipe mPipe;
435 
437  QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
438 };
439 
440 // clazy:excludeall=qstring-allocations
441 
442 #endif
virtual QStringList subLayers() const
Returns the sublayers of this layer.
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
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
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.
virtual QgsDataProvider * dataProvider()
Returns the layer&#39;s data provider.
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.
virtual void reload()
Synchronises with changes in the datasource.
Definition: qgsmaplayer.h:375
virtual bool readXml(const QDomNode &layer_node, const QgsReadWriteContext &context)
Called by readLayerXML(), used by children to read state specific to them from project files...
virtual bool isSpatial() const override
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
virtual bool writeXml(QDomNode &layer_node, QDomDocument &document, const QgsReadWriteContext &context) const
Called by writeLayerXML(), used by children to write state specific to them to project files...
Resample filter pipe for rasters.
QgsRasterRenderer * renderer() const
static const double SAMPLE_SIZE
Default sample size (number of pixels) for estimated statistics/histogram calculation.
virtual bool readSymbology(const QDomNode &node, QString &errorMessage, const QgsReadWriteContext &context)=0
Read the symbology for the current layer from the Dom node supplied.
virtual QString htmlMetadata() const
Obtain a formatted HTML string containing assorted metadata for this layer.
QgsBrightnessContrastFilter * brightnessFilter() const
virtual bool writeSymbology(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context) const =0
Write the symbology for the layer into the docment provided.
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.
virtual void setSubLayerVisibility(const QString &name, bool visible)
Set the visibility of the given sublayer name.
#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
virtual bool readStyle(const QDomNode &node, QString &errorMessage, const QgsReadWriteContext &context)
Read the style for the current layer from the Dom node supplied.
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.
Base class for utility classes that encapsulate information necessary for rendering of map layers...
virtual bool writeStyle(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context) const
Write just the style information for the layer into the document.
virtual QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext)=0
Return new instance of QgsMapLayerRenderer that will be used for rendering of given context...
This class provides details of the viewable area that a raster will be rendered into.
LayerType
This enumerator describes the type of raster layer.
virtual QDateTime timestamp() const
Time stamp of data source in the moment when data/metadata were loaded by provider.
virtual void setLayerOrder(const QStringList &layers)
Reorders the previously selected sublayers of this layer from bottom to top.
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.
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.