QGIS API Documentation 3.30.0-'s-Hertogenbosch (f186b8efe0)
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
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 "qgis.h"
35#include "qgsmaplayer.h"
37#include "qgsrasterviewport.h"
41
42class QgsMapToPixel;
44class QgsRectangle;
46class QgsRasterPipe;
53
54class QImage;
55class QPixmap;
56class QSlider;
57
58typedef QList < QPair< QString, QColor > > QgsLegendColorList;
59
77class CORE_EXPORT QgsRasterLayer : public QgsMapLayer, public QgsAbstractProfileSource
78{
79 Q_OBJECT
80
81 public:
82
83 static const QgsSettingsEntryBool *settingsRasterDefaultEarlyResampling SIP_SKIP;
84 static const QgsSettingsEntryDouble *settingsRasterDefaultOversampling SIP_SKIP;
85
87 static const double SAMPLE_SIZE;
88
91
94
97
100
103
106
109
115 {
116
120 explicit LayerOptions( bool loadDefaultStyle = true,
122 : loadDefaultStyle( loadDefaultStyle )
123 , transformContext( transformContext )
124 {}
125
127 bool loadDefaultStyle = true;
128
134
148 bool skipCrsValidation = false;
149
150 };
151
164 explicit QgsRasterLayer( const QString &uri,
165 const QString &baseName = QString(),
166 const QString &providerType = "gdal",
168
169 ~QgsRasterLayer() override;
170
171#ifdef SIP_RUN
172 SIP_PYOBJECT __repr__();
173 % MethodCode
174 QString str = QStringLiteral( "<QgsRasterLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
175 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
176 % End
177#endif
178
185 QgsRasterLayer *clone() const override SIP_FACTORY;
186
187 QgsAbstractProfileGenerator *createProfileGenerator( const QgsProfileRequest &request ) override SIP_FACTORY;
188
195 static bool isValidRasterFileName( const QString &fileNameQString, QString &retError );
196 // TODO QGIS 4.0 - rename fileNameQString to fileName
197
198 static bool isValidRasterFileName( const QString &fileNameQString );
199
201 static QDateTime lastModified( const QString &name );
202
207 Q_DECL_DEPRECATED void setDataProvider( const QString &provider ) SIP_DEPRECATED;
208
216 void setDataProvider( const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
217
221 Qgis::RasterLayerType rasterType() const { return mRasterType; }
222
227 void setRenderer( QgsRasterRenderer *renderer SIP_TRANSFER );
228
234 QgsRasterRenderer *renderer() const;
235
242 QgsRasterResampleFilter *resampleFilter() const;
243
250 QgsBrightnessContrastFilter *brightnessFilter() const;
251
258 QgsHueSaturationFilter *hueSaturationFilter() const;
259
267 void setResamplingStage( Qgis::RasterResamplingStage stage );
268
276 Qgis::RasterResamplingStage resamplingStage() const;
277
281 QgsRasterPipe *pipe() { return mPipe.get(); }
282
287 int width() const;
288
293 int height() const;
294
298 int bandCount() const;
299
303 QString bandName( int bandNoInt ) const;
304
309 QgsRasterAttributeTable *attributeTable( int bandNumber ) const;
310
315 int attributeTableCount( ) const;
316
321 bool canCreateRasterAttributeTable( );
322
329
335 const QgsRasterDataProvider *dataProvider() const SIP_PYNAME( constDataProvider ) override;
336
337 void reload() override;
338 QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
339
341 void draw( QPainter *theQPainter,
342 QgsRasterViewPort *myRasterViewPort,
343 const QgsMapToPixel *qgsMapToPixel = nullptr );
344
350 Q_DECL_DEPRECATED QgsLegendColorList legendSymbologyItems() const SIP_DEPRECATED;
351
352 bool isSpatial() const override { return true; }
353
354 QString htmlMetadata() const override;
355 Qgis::MapLayerProperties properties() const override;
356
361 QPixmap paletteAsPixmap( int bandNumber = 1 );
362
364 QString providerType() const;
365
374 double rasterUnitsPerPixelX() const;
375
383 double rasterUnitsPerPixelY() const;
384
385 void setOpacity( double opacity ) FINAL;
386 double opacity() const FINAL;
387
396 void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
397 QgsRasterMinMaxOrigin::Limits limits = QgsRasterMinMaxOrigin::MinMax,
398 const QgsRectangle &extent = QgsRectangle(),
399 int sampleSize = QgsRasterLayer::SAMPLE_SIZE,
400 bool generateLookupTableFlag = true );
401
406 void refreshContrastEnhancement( const QgsRectangle &extent ) SIP_SKIP;
407
412 void refreshRendererIfNeeded( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent ) SIP_SKIP;
413
419 virtual QString subsetString() const;
420
429 virtual bool setSubsetString( const QString &subset );
430
435 bool defaultContrastEnhancementSettings(
436 QgsContrastEnhancement::ContrastEnhancementAlgorithm &myAlgorithm,
437 QgsRasterMinMaxOrigin::Limits &myLimits ) const SIP_SKIP;
438
440 void setDefaultContrastEnhancement();
441
442 QStringList subLayers() const override;
443
448 QImage previewAsImage( QSize size, const QColor &bgColor = Qt::white,
449 QImage::Format format = QImage::Format_ARGB32_Premultiplied );
450
451 void setLayerOrder( const QStringList &layers ) override;
452 void setSubLayerVisibility( const QString &name, bool vis ) override;
453 QDateTime timestamp() const override;
454 bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
455
465 bool writeSld( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QVariantMap &props = QVariantMap() ) const;
466
475 bool ignoreExtents() const;
476
477 QgsMapLayerTemporalProperties *temporalProperties() override;
478 QgsMapLayerElevationProperties *elevationProperties() override;
479
480 public slots:
481 void showStatusMessage( const QString &message );
482
488 virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
489
490 signals:
491
496 void subsetStringChanged();
497
498 protected:
499 bool readSymbology( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
500 bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
501 bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
502 bool writeSymbology( QDomNode &, QDomDocument &doc, QString &errorMessage,
503 const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
504 bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage,
505 const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
506 bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
507 QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
508 QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
509
510 private:
512 void init();
513
515 void closeDataProvider();
516
518 bool update();
519
521 void setRendererForDrawingStyle( Qgis::RasterDrawingStyle drawingStyle );
522
523 void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm,
524 QgsRasterMinMaxOrigin::Limits limits,
525 const QgsRectangle &extent,
526 int sampleSize,
527 bool generateLookupTableFlag,
528 QgsRasterRenderer *rasterRenderer );
529
531 void refreshRenderer( QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent );
532
533 void computeMinMax( int band,
534 const QgsRasterMinMaxOrigin &mmo,
535 QgsRasterMinMaxOrigin::Limits limits,
536 const QgsRectangle &extent,
537 int sampleSize,
538 double &min, double &max );
539
551 void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags ) override;
552
560 void writeRasterAttributeTableExternalPaths( QDomNode &layerNode, QDomDocument &doc, const QgsReadWriteContext &context ) const;
561
568 void readRasterAttributeTableExternalPaths( const QDomNode &layerNode, QgsReadWriteContext &context ) const;
569
571 const QString QSTRING_NOT_SET;
572 const QString TRSTRING_NOT_SET;
573
575 QgsRasterDataProvider *mDataProvider = nullptr;
576
578 QgsRasterLayerTemporalProperties *mTemporalProperties = nullptr;
579
580 QgsRasterLayerElevationProperties *mElevationProperties = nullptr;
581
583 QDateTime mLastModified;
584
585 QgsRasterViewPort mLastViewPort;
586
587 Qgis::RasterLayerType mRasterType = Qgis::RasterLayerType::GrayOrUndefined;
588
589 std::unique_ptr< QgsRasterPipe > mPipe;
590
592 QgsRectangle mLastRectangleUsedByRefreshContrastEnhancementIfNeeded;
593
594 QDomDocument mOriginalStyleDocument;
595 QDomElement mOriginalStyleElement;
596
597};
598
599// clazy:excludeall=qstring-allocations
600
601#endif
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:55
RasterResamplingStage
Stage at which raster resampling occurs.
Definition: qgis.h:891
Abstract base class for objects which generate elevation profiles.
Interface for classes which can generate elevation profiles.
Brightness/contrast and gamma correction filter pipe for rasters.
Manipulates raster or point cloud pixel values so that they enhanceContrast or clip into a specified ...
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used.
Contains information about the context in which a coordinate transform is executed.
Abstract base class for spatial data provider implementations.
Color and saturation filter pipe for rasters.
Base class for storage of map layer elevation properties.
Base class for utility classes that encapsulate information necessary for rendering of map layers.
Base class for storage of map layer temporal properties.
Base class for all map layer types.
Definition: qgsmaplayer.h:73
QString providerType() const
Returns the provider type (provider key) for this layer.
virtual void setOpacity(double opacity)
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
virtual Qgis::MapLayerProperties properties() const
Returns the map layer properties of this layer.
virtual QString htmlMetadata() const
Obtain a formatted HTML string containing assorted metadata for this layer.
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
double opacity
Definition: qgsmaplayer.h:82
virtual Q_INVOKABLE QgsDataProvider * dataProvider()
Returns the layer's data provider, it may be nullptr.
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:39
Encapsulates properties and constraints relating to fetching elevation profiles from different source...
The QgsRasterAttributeTable class represents a Raster Attribute Table (RAT).
Base class for raster data providers.
Raster layer specific subclass of QgsMapLayerElevationProperties.
Implementation of map layer temporal properties for raster layers.
Represents a raster layer.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_SINGLE_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type Byte.
QgsRasterPipe * pipe()
Returns the raster pipe.
static const QgsRasterMinMaxOrigin::Limits SINGLE_BAND_MIN_MAX_LIMITS
Default enhancement limits for single band raster.
static const QgsRasterMinMaxOrigin::Limits MULTIPLE_BAND_MULTI_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type different from Byte.
static const double SAMPLE_SIZE
Default sample size (number of pixels) for estimated statistics/histogram calculation.
static const QgsRasterMinMaxOrigin::Limits MULTIPLE_BAND_SINGLE_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type Byte.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_MULTI_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type different from Byte.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm SINGLE_BAND_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for single band raster.
This class describes the origin of min/max values.
Limits
This enumerator describes the limits used to compute min/max values.
Contains a pipeline of raster interfaces for sequential raster processing.
Definition: qgsrasterpipe.h:50
Raster renderer pipe that applies colors to a raster.
Resample filter pipe for rasters.
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:42
Contains information about the context of a rendering operation.
A boolean settings entry.
A double settings entry.
An interface for classes which can visit style entity (e.g.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition: qgsgeos.h:74
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
#define str(x)
Definition: qgis.cpp:37
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_SKIP
Definition: qgis_sip.h:126
#define FINAL
Definition: qgis_sip.h:237
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_FACTORY
Definition: qgis_sip.h:76
constexpr int SAMPLE_SIZE
QList< QPair< QString, QColor > > QgsLegendColorList
Setting options for loading raster layers.
LayerOptions(bool loadDefaultStyle=true, const QgsCoordinateTransformContext &transformContext=QgsCoordinateTransformContext())
Constructor for LayerOptions.
This class provides details of the viewable area that a raster will be rendered into.