QGIS API Documentation  2.99.0-Master (40f86b2)
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 <QColor>
26 #include <QDateTime>
27 #include <QList>
28 #include <QMap>
29 #include <QPair>
30 #include <QVector>
31 
32 #include "qgis.h"
33 #include "qgsmaplayer.h"
34 #include "qgsraster.h"
35 #include "qgsrasterpipe.h"
36 #include "qgsrasterviewport.h"
37 #include "qgsrasterminmaxorigin.h"
38 #include "qgscontrastenhancement.h"
39 
40 class QgsMapToPixel;
41 class QgsRasterRenderer;
42 class QgsRectangle;
43 class QImage;
44 class QLibrary;
45 class QPixmap;
46 class QSlider;
47 
48 typedef QList < QPair< QString, QColor > > QgsLegendColorList;
49 
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 
182  QgsRasterLayer( const QString &uri,
183  const QString &baseName = QString(),
184  const QString &providerKey = "gdal",
185  bool loadDefaultStyleFlag = true );
186 
187  ~QgsRasterLayer();
188 
191  {
196  UserDefinedShader
197  };
198 
201  {
205  ColorLayer
206  };
207 
213  static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
214  static bool isValidRasterFileName( const QString &fileNameQString );
215 
217  static QDateTime lastModified( const QString &name );
218 
220  void setDataProvider( const QString &provider );
221 
223  LayerType rasterType() { return mRasterType; }
224 
226  void setRenderer( QgsRasterRenderer *renderer );
227  QgsRasterRenderer *renderer() const { return mPipe.renderer(); }
228 
230  QgsRasterResampleFilter *resampleFilter() const { return mPipe.resampleFilter(); }
231 
232  QgsBrightnessContrastFilter *brightnessFilter() const { return mPipe.brightnessFilter(); }
233  QgsHueSaturationFilter *hueSaturationFilter() const { return mPipe.hueSaturationFilter(); }
234 
236  QgsRasterPipe *pipe() { return &mPipe; }
237 
239  int width() const;
240 
242  int height() const;
243 
245  int bandCount() const;
246 
248  QString bandName( int bandNoInt ) const;
249 
251  QgsRasterDataProvider *dataProvider();
252 
256  const QgsRasterDataProvider *dataProvider() const;
257 
259  virtual void reload() override;
260 
264  virtual QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override;
265 
267  void draw( QPainter *theQPainter,
268  QgsRasterViewPort *myRasterViewPort,
269  const QgsMapToPixel *qgsMapToPixel = nullptr );
270 
272  QgsLegendColorList legendSymbologyItems() const;
273 
274  virtual bool isSpatial() const override { return true; }
275 
277  QString metadata() const override;
278 
280  QPixmap paletteAsPixmap( int bandNumber = 1 );
281 
283  QString providerType() const;
284 
286  double rasterUnitsPerPixelX() const;
288  double rasterUnitsPerPixelY() const;
289 
298  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
300  const QgsRectangle &extent = QgsRectangle(),
301  int sampleSize = SAMPLE_SIZE,
302  bool generateLookupTableFlag = true );
303 
307  // Used by QgisApp::legendLayerStretchUsingCurrentExtent()
308  void refreshContrastEnhancement( const QgsRectangle &extent );
309 
313  // Used by QgsRasterLayerRenderer
314  void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent );
315 
319  bool defaultContrastEnhancementSettings(
321  QgsRasterMinMaxOrigin::Limits &myLimits ) const;
322 
324  void setDefaultContrastEnhancement();
325 
327  void showProgress( int value );
328 
330  virtual QStringList subLayers() const override;
331 
334  QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
335  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
336 
343  virtual void setLayerOrder( const QStringList &layers ) override;
344 
348  virtual void setSubLayerVisibility( const QString &name, bool vis ) override;
349 
351  virtual QDateTime timestamp() const override;
352 
353  public slots:
354  void showStatusMessage( const QString &message );
355 
357  void onProgress( int, double, const QString & );
358 
359  signals:
361  void progressUpdate( int value );
362 
363  protected:
365  bool readSymbology( const QDomNode &node, QString &errorMessage ) override;
366 
368  bool readStyle( const QDomNode &node, QString &errorMessage ) override;
369 
371  bool readXml( const QDomNode &layer_node ) override;
372 
374  bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage ) const override;
375 
377  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage ) const override;
378 
380  bool writeXml( QDomNode &layer_node, QDomDocument &doc ) const override;
381 
382  private:
384  void init();
385 
387  void closeDataProvider();
388 
390  bool update();
391 
393  void setRendererForDrawingStyle( QgsRaster::DrawingStyle drawingStyle );
394 
395  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
397  const QgsRectangle &extent,
398  int sampleSize,
399  bool generateLookupTableFlag,
400  QgsRasterRenderer *rasterRenderer );
401 
402  void computeMinMax( int band,
403  const QgsRasterMinMaxOrigin &mmo,
405  const QgsRectangle &extent,
406  int sampleSize,
407  double &min, double &max );
408 
410  const QString QSTRING_NOT_SET;
411  const QString TRSTRING_NOT_SET;
412 
414  QgsRasterDataProvider *mDataProvider = nullptr;
415 
417  QDateTime mLastModified;
418 
419  QgsRasterViewPort mLastViewPort;
420 
422  QString mProviderKey;
423 
424  LayerType mRasterType;
425 
426  QgsRasterPipe mPipe;
427 
429  QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
430 };
431 
432 #endif
virtual QStringList subLayers() const
Returns the sublayers of this layer.
A rectangle specified with double values.
Definition: qgsrectangle.h:36
Base class for all map layer types.
Definition: qgsmaplayer.h:52
Base class for processing modules.
Definition: qgsrasterpipe.h:44
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:104
This class provides qgis with the ability to render raster datasets onto the mapcanvas.
QgsRasterPipe * pipe()
Get raster pipe.
virtual bool readSymbology(const QDomNode &node, QString &errorMessage)=0
Read the symbology for the current layer from the Dom node supplied.
virtual void reload()
Synchronises with changes in the datasource.
Definition: qgsmaplayer.h:299
virtual bool isSpatial() const override
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
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 QDateTime timestamp() const
Time stamp of data source in the moment when data/metadata were loaded by provider.
Definition: qgsmaplayer.h:727
virtual bool writeSymbology(QDomNode &node, QDomDocument &doc, QString &errorMessage) const =0
Write the symbology for the layer into the docment provided.
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:34
This class describes the origin of min/max values.
virtual bool writeXml(QDomNode &layer_node, QDomDocument &document) const
Called by writeLayerXML(), used by children to write state specific to them to project files...
virtual void setSubLayerVisibility(const QString &name, bool visible)
Set the visibility of the given sublayer name.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm SINGLE_BAND_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for single band raster.
LayerType rasterType()
Accessor for raster layer type (which is a read only property)
double ANALYSIS_EXPORT min(double x, double y)
Returns the minimum of two doubles or the first argument if both are equal.
Definition: MathUtils.cc:452
virtual bool readStyle(const QDomNode &node, QString &errorMessage)
Read the style for the current layer from the Dom node supplied.
virtual bool writeStyle(QDomNode &node, QDomDocument &doc, QString &errorMessage) const
Write just the style information for the layer into the document.
double ANALYSIS_EXPORT max(double x, double y)
Returns the maximum of two doubles or the first argument if both are equal.
Definition: MathUtils.cc:437
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.
QgsRasterResampleFilter * resampleFilter() const
Set raster resample filter. Takes ownership of the resample filter object.
virtual bool readXml(const QDomNode &layer_node)
Called by readLayerXML(), used by children to read state specific to them from project files...
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 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 QString metadata() const
Obtain Metadata for this layer.
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.
Base class for raster data providers.