QGIS API Documentation  2.11.0-Master
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 : tim@linfiniti.com
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 <QColor>
25 #include <QDateTime>
26 #include <QList>
27 #include <QMap>
28 #include <QPair>
29 #include <QVector>
30 
31 #include "qgis.h"
33 #include "qgscolorrampshader.h"
34 #include "qgscontrastenhancement.h"
35 #include "qgshuesaturationfilter.h"
36 #include "qgsmaplayer.h"
37 #include "qgspoint.h"
38 #include "qgsraster.h"
39 #include "qgsrasterdataprovider.h"
40 #include "qgsrasterinterface.h"
41 #include "qgsrasterpipe.h"
44 #include "qgsrastershader.h"
45 #include "qgsrastertransparency.h"
46 #include "qgsrasterviewport.h"
47 
48 class QgsMapToPixel;
49 class QgsRasterRenderer;
50 class QgsRectangle;
51 class QImage;
52 class QLibrary;
53 class QPixmap;
54 class QSlider;
55 
57 
145 class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
146 {
147  Q_OBJECT
148  public:
150  static const double CUMULATIVE_CUT_LOWER;
151 
153  static const double CUMULATIVE_CUT_UPPER;
154 
156  static const double SAMPLE_SIZE;
157 
159  QgsRasterLayer();
160 
177  QgsRasterLayer( const QString &path,
178  const QString &baseName = QString::null,
179  bool loadDefaultStyleFlag = true );
180 
181  //TODO - QGIS 3.0
182  //This constructor is confusing if used with string literals for providerKey,
183  //as the previous constructor will be called with the literal for providerKey
184  //implicitly converted to a bool.
185  //for QGIS 3.0, make either constructor explicit or alter the signatures
187  QgsRasterLayer( const QString &uri,
188  const QString &baseName,
189  const QString &providerKey,
190  bool loadDefaultStyleFlag = true );
191 
193  ~QgsRasterLayer();
194 
197  {
202  UserDefinedShader
203  };
204 
207  {
211  ColorLayer
212  };
213 
219  static bool isValidRasterFileName( const QString & theFileNameQString, QString &retError );
220  static bool isValidRasterFileName( const QString & theFileNameQString );
221 
223  static QDateTime lastModified( const QString & name );
224 
226  void setDataProvider( const QString & provider );
227 
229  LayerType rasterType() { return mRasterType; }
230 
232  void setRenderer( QgsRasterRenderer* theRenderer );
233  QgsRasterRenderer* renderer() const { return mPipe.renderer(); }
234 
236  QgsRasterResampleFilter * resampleFilter() const { return mPipe.resampleFilter(); }
237 
238  QgsBrightnessContrastFilter * brightnessFilter() const { return mPipe.brightnessFilter(); }
239  QgsHueSaturationFilter * hueSaturationFilter() const { return mPipe.hueSaturationFilter(); }
240 
242  QgsRasterPipe * pipe() { return &mPipe; }
243 
245  int width() const;
246 
248  int height() const;
249 
251  int bandCount() const;
252 
254  const QString bandName( int theBandNoInt );
255 
257  QgsRasterDataProvider* dataProvider();
258 
262  const QgsRasterDataProvider* dataProvider() const;
263 
265  virtual void reload() override;
266 
270  virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) override;
271 
273  bool draw( QgsRenderContext& rendererContext ) override;
274 
276  void draw( QPainter * theQPainter,
277  QgsRasterViewPort * myRasterViewPort,
278  const QgsMapToPixel* theQgsMapToPixel = 0 );
279 
281  QgsLegendColorList legendSymbologyItems() const;
282 
284  QString metadata() override;
285 
287  QPixmap paletteAsPixmap( int theBandNumber = 1 );
288 
290  QString providerType() const;
291 
293  double rasterUnitsPerPixelX();
294  double rasterUnitsPerPixelY();
295 
304  void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm,
306  QgsRectangle theExtent = QgsRectangle(),
307  int theSampleSize = SAMPLE_SIZE,
308  bool theGenerateLookupTableFlag = true );
309 
311  void setDefaultContrastEnhancement();
312 
316  Q_DECL_DEPRECATED void setDrawingStyle( const QString & theDrawingStyleQString );
317 
319  void showProgress( int theValue );
320 
322  virtual QStringList subLayers() const override;
323 
326  Q_DECL_DEPRECATED QPixmap previewAsPixmap( QSize size, QColor bgColor = Qt::white );
327 
330  QImage previewAsImage( QSize size, QColor bgColor = Qt::white,
331  QImage::Format format = QImage::Format_ARGB32_Premultiplied );
332 
339  virtual void setLayerOrder( const QStringList &layers ) override;
340 
344  virtual void setSubLayerVisibility( QString name, bool vis ) override;
345 
347  virtual QDateTime timestamp() const override { return mDataProvider->timestamp() ; }
348 
349  public slots:
350  void showStatusMessage( const QString & theMessage );
351 
353  Q_DECL_DEPRECATED void updateProgress( int, int );
354 
356  void onProgress( int, double, QString );
357 
358  signals:
360  void progressUpdate( int theValue );
361 
362  protected:
364  bool readSymbology( const QDomNode& node, QString& errorMessage ) override;
365 
367  bool readXml( const QDomNode& layer_node ) override;
368 
370  bool writeSymbology( QDomNode&, QDomDocument& doc, QString& errorMessage ) const override;
371 
373  bool writeXml( QDomNode & layer_node, QDomDocument & doc ) override;
374 
375  private:
377  void init();
378 
380  void closeDataProvider();
381 
383  bool update();
384 
386  void setRendererForDrawingStyle( const QgsRaster::DrawingStyle & theDrawingStyle );
387 
389  const QString QSTRING_NOT_SET;
390  const QString TRSTRING_NOT_SET;
391 
393  QgsRasterDataProvider* mDataProvider;
394 
396  QDateTime mLastModified;
397 
398  QgsRasterViewPort mLastViewPort;
399 
401  QString mProviderKey;
402 
403  LayerType mRasterType;
404 
405  QgsRasterPipe mPipe;
406 };
407 
408 #endif
virtual QStringList subLayers() const
Returns the sublayers of this layer (Useful for providers that manage their own layers, such as WMS)
A rectangle specified with double values.
Definition: qgsrectangle.h:35
Base class for all map layer types.
Definition: qgsmaplayer.h:49
Base class for processing modules.
Definition: qgsrasterpipe.h:41
virtual QString metadata()
Obtain Metadata for this layer.
ContrastEnhancementLimits
Contrast enhancement limits.
Definition: qgsraster.h:86
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:129
Resample filter pipe for rasters.
static const double SAMPLE_SIZE
Default sample size (number of pixels) for estimated statistics/histogram calculation.
virtual QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext)
Return new instance of QgsMapLayerRenderer that will be used for rendering of given context...
Definition: qgsmaplayer.h:134
virtual bool writeSymbology(QDomNode &node, QDomDocument &doc, QString &errorMessage) const =0
Write the symbology for the layer into the docment provided.
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used...
virtual bool draw(QgsRenderContext &rendererContext)
This is the method that does the actual work of drawing the layer onto a paint device.
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:34
ColorShadingAlgorithm
This enumerator describes the types of shading that can be used.
virtual bool writeXml(QDomNode &layer_node, QDomDocument &document)
called by writeLayerXML(), used by children to write state specific to them to project files...
QgsRasterRenderer * renderer() const
static const double CUMULATIVE_CUT_UPPER
Default cumulative cut upper limit.
virtual void setSubLayerVisibility(QString name, bool vis)
Set the visibility of the given sublayer name.
QgsRasterResampleFilter * resampleFilter() const
Set raster resample filter.
LayerType rasterType()
Accessor for raster layer type (which is a read only property)
QList< QPair< QString, QColor > > QgsLegendColorList
Contains information about the context of a rendering operation.
virtual QDateTime timestamp() const override
Time stamp of data source in the moment when data/metadata were loaded by provider.
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.
DrawingStyle
This enumerator describes the different kinds of drawing we can do.
Definition: qgsraster.h:95
static const double CUMULATIVE_CUT_LOWER
Default cumulative cut lower limit.
QgsHueSaturationFilter * hueSaturationFilter() const
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.
virtual void setLayerOrder(const QStringList &layers)
Reorders the previously selected sublayers of this layer from bottom to top (Useful for providers tha...
LayerType
This enumerator describes the type of raster layer.
Raster renderer pipe that applies colors to a raster.
QgsBrightnessContrastFilter * brightnessFilter() const
Base class for raster data providers.