QGIS API Documentation
3.26.3-Buenos Aires (65e4edfdad)
|
Go to the documentation of this file.
55 #include "qgsgdalprovider.h"
70 #include <QApplication>
73 #include <QDomElement>
78 #include <QFontMetrics>
85 #include <QRegularExpression>
89 #define ERR(message) QGS_ERROR_MESSAGE(message,"Raster layer")
109 , QSTRING_NOT_SET( QStringLiteral(
"Not Set" ) )
110 , TRSTRING_NOT_SET( tr(
"Not Set" ) )
120 const QString &baseName,
121 const QString &providerKey,
125 , QSTRING_NOT_SET( QStringLiteral(
"Not Set" ) )
126 , TRSTRING_NOT_SET( tr(
"Not Set" ) )
137 QgsDataProvider::ReadFlags providerFlags = QgsDataProvider::ReadFlags();
142 setDataSource( uri, baseName, providerKey, providerOptions, providerFlags );
168 layer->mElevationProperties = mElevationProperties->
clone();
169 layer->mElevationProperties->setParent( layer );
172 for (
int i = 1; i < mPipe->size(); i++ )
174 if ( mPipe->at( i ) )
175 layer->
pipe()->
set( mPipe->at( i )->clone() );
184 if ( !mElevationProperties->
isEnabled() )
198 const bool myIsValid = QgsGdalProvider::isValidRasterFileName( fileNameQString, retErrMsg );
213 const QFileInfo fi(
name );
219 t = fi.lastModified();
242 if ( !mDataProvider )
return 0;
248 if ( !mDataProvider )
return QString();
259 return mDataProvider;
264 return mDataProvider;
296 bool restoreOldResamplingStage =
false;
304 if ( mDataProvider !=
nullptr &&
309 restoreOldResamplingStage =
true;
318 drawer.
draw( theQPainter, rasterViewPort, qgsMapToPixel );
320 if ( restoreOldResamplingStage )
325 QgsDebugMsgLevel( QStringLiteral(
"total raster draw time (ms): %1" ).arg( time.elapsed(), 5 ), 4 );
336 if ( !mDataProvider )
340 QString myMetadata = QStringLiteral(
"<html><head></head>\n<body>\n" );
345 myMetadata += QStringLiteral(
"<h1>" ) + tr(
"Information from provider" ) + QStringLiteral(
"</h1>\n<hr>\n" ) + QStringLiteral(
"<table class=\"list-view\">\n" );
347 myMetadata += QStringLiteral(
"\n" ) %
349 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Extent" ) % QStringLiteral(
"</td><td>" ) %
extent().
toString() % QStringLiteral(
"</td></tr>\n" ) %
352 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Width" ) % QStringLiteral(
"</td><td>" );
354 myMetadata += QString::number(
width() );
356 myMetadata += tr(
"n/a" );
357 myMetadata += QStringLiteral(
"</td></tr>\n" ) %
360 QStringLiteral(
"<tr><td class=\"highlight\">" ) + tr(
"Height" ) + QStringLiteral(
"</td><td>" );
362 myMetadata += QString::number(
height() );
364 myMetadata += tr(
"n/a" );
365 myMetadata += QStringLiteral(
"</td></tr>\n" ) %
368 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Data type" ) % QStringLiteral(
"</td><td>" );
373 myMetadata += tr(
"Byte - Eight bit unsigned integer" );
376 myMetadata += tr(
"UInt16 - Sixteen bit unsigned integer " );
379 myMetadata += tr(
"Int16 - Sixteen bit signed integer " );
382 myMetadata += tr(
"UInt32 - Thirty two bit unsigned integer " );
385 myMetadata += tr(
"Int32 - Thirty two bit signed integer " );
388 myMetadata += tr(
"Float32 - Thirty two bit floating point " );
391 myMetadata += tr(
"Float64 - Sixty four bit floating point " );
394 myMetadata += tr(
"CInt16 - Complex Int16 " );
397 myMetadata += tr(
"CInt32 - Complex Int32 " );
400 myMetadata += tr(
"CFloat32 - Complex Float32 " );
403 myMetadata += tr(
"CFloat64 - Complex Float64 " );
406 myMetadata += tr(
"Could not determine raster data type." );
408 myMetadata += QStringLiteral(
"</td></tr>\n" ) %
414 QStringLiteral(
"</table>\n<br><br>" );
420 myMetadata += QStringLiteral(
"<h1>" ) % tr(
"Identification" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
422 QStringLiteral(
"<br><br>\n" ) %
425 QStringLiteral(
"<h1>" ) % tr(
"Extent" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
427 QStringLiteral(
"<br><br>\n" ) %
430 QStringLiteral(
"<h1>" ) % tr(
"Access" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
432 QStringLiteral(
"<br><br>\n" ) %
435 QStringLiteral(
"</table>\n<br><br><h1>" ) % tr(
"Bands" ) % QStringLiteral(
"</h1>\n<hr>\n<table class=\"list-view\">\n" ) %
438 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Band count" ) % QStringLiteral(
"</td><td>" ) % QString::number(
bandCount() ) % QStringLiteral(
"</td></tr>\n" );
441 myMetadata += QStringLiteral(
"</table>\n<br><table width=\"100%\" class=\"tabular-view\">\n" ) %
442 QStringLiteral(
"<tr><th>" ) % tr(
"Number" ) % QStringLiteral(
"</th><th>" ) % tr(
"Band" ) % QStringLiteral(
"</th><th>" ) % tr(
"No-Data" ) % QStringLiteral(
"</th><th>" ) %
443 tr(
"Min" ) % QStringLiteral(
"</th><th>" ) % tr(
"Max" ) % QStringLiteral(
"</th></tr>\n" );
450 rowClass = QStringLiteral(
"class=\"odd-row\"" );
452 myMetadata += QStringLiteral(
"<tr " ) % rowClass % QStringLiteral(
"><td>" ) % QString::number( i ) % QStringLiteral(
"</td><td>" ) %
bandName( i ) % QStringLiteral(
"</td><td>" );
455 myMetadata += QString::number(
dataProvider()->sourceNoDataValue( i ) );
457 myMetadata += tr(
"n/a" );
458 myMetadata += QLatin1String(
"</td>" );
463 myMetadata += QStringLiteral(
"<td>" ) % QString::number( myRasterBandStats.
minimumValue,
'f', 10 ) % QStringLiteral(
"</td>" ) %
464 QStringLiteral(
"<td>" ) % QString::number( myRasterBandStats.
maximumValue,
'f', 10 ) % QStringLiteral(
"</td>" );
468 myMetadata += QStringLiteral(
"<td>" ) % tr(
"n/a" ) % QStringLiteral(
"</td><td>" ) % tr(
"n/a" ) % QStringLiteral(
"</td>" );
471 myMetadata += QLatin1String(
"</tr>\n" );
475 myMetadata += QStringLiteral(
"</table>\n<br><br>" ) %
478 QStringLiteral(
"<h1>" ) % tr(
"Contacts" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
480 QStringLiteral(
"<br><br>\n" ) %
483 QStringLiteral(
"<h1>" ) % tr(
"References" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
485 QStringLiteral(
"<br><br>\n" ) %
488 QStringLiteral(
"<h1>" ) % tr(
"History" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
490 QStringLiteral(
"<br><br>\n" ) %
492 QStringLiteral(
"\n</body>\n</html>\n" );
498 Qgis::MapLayerProperties res;
513 if ( mDataProvider &&
518 const QList<QgsColorRampShader::ColorRampItem> myColorRampItemList = mDataProvider->
colorTable( bandNumber );
519 if ( !myColorRampItemList.isEmpty() )
525 const int mySize = 100;
526 QPixmap myPalettePixmap( mySize, mySize );
527 QPainter myQPainter( &myPalettePixmap );
529 QImage myQImage = QImage( mySize, mySize, QImage::Format_RGB32 );
531 myPalettePixmap.fill();
533 const double myStep = (
static_cast< double >( myColorRampItemList.size() ) - 1 ) /
static_cast< double >( mySize * mySize );
534 double myValue = 0.0;
535 for (
int myRow = 0; myRow < mySize; myRow++ )
537 QRgb *myLineBuffer =
reinterpret_cast< QRgb *
>( myQImage.scanLine( myRow ) );
538 for (
int myCol = 0; myCol < mySize; myCol++ )
540 myValue = myStep *
static_cast< double >( myCol + myRow * mySize );
542 myShader.
shade( myValue, &c1, &c2, &c3, &c4 );
543 myLineBuffer[ myCol ] = qRgba( c1, c2, c3, c4 );
547 myQPainter.drawImage( 0, 0, myQImage );
548 return myPalettePixmap;
550 const QPixmap myNullPixmap;
556 const QPixmap myNullPixmap;
574 if ( mDataProvider &&
584 if ( mDataProvider &&
594 if ( !mPipe->renderer() || mPipe->renderer()->opacity() ==
opacity )
597 mPipe->renderer()->setOpacity(
opacity );
604 return mPipe->renderer() ? mPipe->renderer()->opacity() : 1.0;
607 void QgsRasterLayer::init()
626 mPipe = std::make_unique< QgsRasterPipe >();
627 mDataProvider =
nullptr;
641 std::unique_ptr< QgsScopedRuntimeProfile > profile;
643 profile = std::make_unique< QgsScopedRuntimeProfile >( tr(
"Create %1 provider" ).arg( provider ), QStringLiteral(
"projectload" ) );
646 if ( !mDataProvider )
653 mDataProvider->setParent(
this );
656 mPipe->set( mDataProvider );
657 if ( !mDataProvider->
isValid() )
667 QgsDebugMsgLevel( QStringLiteral(
"Set Data provider QgsLayerMetadata identifier[%1]" ).arg(
metadata().identifier() ), 4 );
670 if ( provider == QLatin1String(
"gdal" ) )
703 if ( ( mDataProvider->
bandCount() > 1 ) )
751 const QList<QgsColorRampShader::ColorRampItem> colorTable = mDataProvider->
colorTable( 1 );
774 for (
int bandNo = 1; bandNo <= mDataProvider->
bandCount(); bandNo++ )
778 if (
auto *lRenderer = mPipe->renderer() )
780 lRenderer->setAlphaBand( bandNo );
801 QString resampling = settings.
value( QStringLiteral(
"/Raster/defaultZoomedInResampling" ), QStringLiteral(
"nearest neighbour" ) ).toString();
802 if ( resampling == QLatin1String(
"bilinear" ) )
807 else if ( resampling == QLatin1String(
"cubic" ) )
812 resampling = settings.
value( QStringLiteral(
"/Raster/defaultZoomedOutResampling" ), QStringLiteral(
"nearest neighbour" ) ).toString();
813 if ( resampling == QLatin1String(
"bilinear" ) )
819 const double maxOversampling = settings.
value( QStringLiteral(
"/Raster/defaultOversampling" ), 2.0 ).toDouble();
824 settings.
value( QStringLiteral(
"/Raster/defaultEarlyResampling" ),
false ).toBool() )
836 mPipe->set( projector );
880 void QgsRasterLayer::setDataSourcePrivate(
const QString &dataSource,
const QString &baseName,
const QString &provider,
883 const bool hadRenderer(
renderer() );
885 QDomImplementation domImplementation;
886 QDomDocumentType documentType;
889 bool loadDefaultStyleFlag =
false;
892 loadDefaultStyleFlag =
true;
896 if ( hadRenderer && ! loadDefaultStyleFlag )
898 documentType = domImplementation.createDocumentType(
899 QStringLiteral(
"qgis" ), QStringLiteral(
"http://mrcc.com/qgis.dtd" ), QStringLiteral(
"SYSTEM" ) );
901 QDomDocument doc = QDomDocument( documentType );
902 QDomElement styleElem = doc.createElement( QStringLiteral(
"qgis" ) );
903 styleElem.setAttribute( QStringLiteral(
"version" ),
Qgis::version() );
907 QgsDebugMsg( QStringLiteral(
"Could not store symbology for layer %1: %2" )
913 doc.appendChild( styleElem );
915 mOriginalStyleDocument = doc;
916 mOriginalStyleElement = styleElem;
925 for (
int i = mPipe->size() - 1; i >= 0; --i )
941 bool defaultLoadedFlag =
false;
942 bool restoredStyle =
false;
943 if ( loadDefaultStyleFlag )
947 else if ( !mOriginalStyleElement.isNull() )
950 if ( !
readSymbology( mOriginalStyleElement, errorMsg, readContext ) )
952 QgsDebugMsg( QStringLiteral(
"Could not restore symbology for layer %1: %2" )
959 restoredStyle =
true;
966 if ( !defaultLoadedFlag && !restoredStyle )
973 void QgsRasterLayer::closeDataProvider()
976 mPipe->remove( mDataProvider );
977 mDataProvider =
nullptr;
980 void QgsRasterLayer::computeMinMax(
int band,
985 double &min,
double &max )
988 min = std::numeric_limits<double>::quiet_NaN();
989 max = std::numeric_limits<double>::quiet_NaN();
990 if ( !mDataProvider )
997 if ( myRasterBandStats.
statsGathered == QgsRasterBandStats::Stats::None )
1000 switch ( mDataProvider->
dataType( band ) )
1011 myRasterBandStats.
maximumValue = std::numeric_limits<uint16_t>::max();
1017 myRasterBandStats.
maximumValue = std::numeric_limits<uint32_t>::max();
1023 myRasterBandStats.
minimumValue = std::numeric_limits<int16_t>::lowest();
1024 myRasterBandStats.
maximumValue = std::numeric_limits<int16_t>::max();
1030 myRasterBandStats.
minimumValue = std::numeric_limits<int32_t>::lowest();
1031 myRasterBandStats.
maximumValue = std::numeric_limits<int32_t>::max();
1037 myRasterBandStats.
minimumValue = std::numeric_limits<float_t>::lowest();
1038 myRasterBandStats.
maximumValue = std::numeric_limits<float_t>::max();
1044 myRasterBandStats.
minimumValue = std::numeric_limits<double_t>::lowest();
1045 myRasterBandStats.
maximumValue = std::numeric_limits<double_t>::max();
1070 QgsDebugMsgLevel( QStringLiteral(
"myLower = %1 myUpper = %2" ).arg( myLower ).arg( myUpper ), 4 );
1073 QgsDebugMsgLevel( QStringLiteral(
"band = %1 min = %2 max = %3" ).arg( band ).arg( min ).arg( max ), 4 );
1079 return mDataProvider ? mDataProvider->
ignoreExtents() :
false;
1084 return mTemporalProperties;
1089 return mElevationProperties;
1098 generateLookupTableFlag,
1099 mPipe->renderer() );
1106 bool generateLookupTableFlag,
1110 if ( !rasterRenderer || !mDataProvider )
1116 QList<QgsContrastEnhancement *> myEnhancements;
1122 const QString rendererType = rasterRenderer->
type();
1123 if ( rendererType == QLatin1String(
"singlebandgray" ) )
1126 if ( !myGrayRenderer )
1130 myBands << myGrayRenderer->
grayBand();
1131 myRasterRenderer = myGrayRenderer;
1134 else if ( rendererType == QLatin1String(
"multibandcolor" ) )
1137 if ( !myMultiBandRenderer )
1142 myRasterRenderer = myMultiBandRenderer;
1145 else if ( rendererType == QLatin1String(
"singlebandpseudocolor" ) )
1148 if ( !myPseudoColorRenderer )
1152 myBands << myPseudoColorRenderer->
band();
1153 myRasterRenderer = myPseudoColorRenderer;
1154 myMinMaxOrigin = myPseudoColorRenderer->
minMaxOrigin();
1161 const auto constMyBands = myBands;
1162 for (
const int myBand : constMyBands )
1168 myEnhancement->setContrastEnhancementAlgorithm(
algorithm, generateLookupTableFlag );
1172 computeMinMax( myBand, myMinMaxOrigin, limits,
extent, sampleSize, min, max );
1174 if ( rendererType == QLatin1String(
"singlebandpseudocolor" ) )
1178 if ( myPseudoColorRenderer->
shader() )
1181 if ( colorRampShader )
1189 myEnhancement->setMinimumValue( min );
1190 myEnhancement->setMaximumValue( max );
1191 myEnhancements.append( myEnhancement.release() );
1196 myEnhancements.append(
nullptr );
1200 if ( rendererType == QLatin1String(
"singlebandgray" ) )
1204 else if ( rendererType == QLatin1String(
"multibandcolor" ) )
1212 qDeleteAll( myEnhancements );
1220 if ( myRasterRenderer )
1225 if ( rasterRenderer ==
renderer() )
1277 if ( mDataProvider &&
1278 mLastRectangleUsedByRefreshContrastEnhancementIfNeeded !=
extent &&
1282 refreshRenderer( rasterRenderer,
extent );
1288 if ( mDataProvider )
1304 mLastRectangleUsedByRefreshContrastEnhancementIfNeeded =
extent;
1307 computeMinMax( sbpcr->
band(),
1317 if ( colorRampShader )
1330 if ( colorRampShader )
1345 mLastRectangleUsedByRefreshContrastEnhancementIfNeeded =
extent;
1355 if ( singleBandRenderer )
1357 else if ( multiBandRenderer )
1381 if ( !
isValid() || !mDataProvider )
1383 QgsDebugMsgLevel( QStringLiteral(
"invoked with invalid layer or null mDataProvider" ), 3 );
1384 return customProperty( QStringLiteral(
"storedSubsetString" ) ).toString();
1395 if ( !
isValid() || !mDataProvider )
1397 QgsDebugMsgLevel( QStringLiteral(
"invoked with invalid layer or null mDataProvider or while editing" ), 3 );
1433 QString defaultLimits;
1438 key = QStringLiteral(
"singleBand" );
1448 key = QStringLiteral(
"multiBandSingleByte" );
1456 key = QStringLiteral(
"multiBandMultiByte" );
1464 if ( key.isEmpty() )
1466 QgsDebugMsgLevel( QStringLiteral(
"No default contrast enhancement for this drawing style" ), 2 );
1473 const QString myAlgorithmString = mySettings.
value(
"/Raster/defaultContrastEnhancementAlgorithm/" + key, defaultAlg ).toString();
1478 const QString myLimitsString = mySettings.
value(
"/Raster/defaultContrastEnhancementLimits/" + key, defaultLimits ).toString();
1500 if ( mDataProvider )
1502 QgsDebugMsgLevel( QStringLiteral(
"About to mDataProvider->setLayerOrder(layers)." ), 4 );
1511 if ( mDataProvider )
1513 QgsDebugMsgLevel( QStringLiteral(
"About to mDataProvider->setSubLayerVisibility(name, vis)." ), 4 );
1521 if ( !mDataProvider )
1528 if (
auto *lRenderer = mPipe->renderer() )
1530 if ( !lRenderer->accept( visitor ) )
1539 Q_UNUSED( errorMessage )
1541 QVariantMap localProps = QVariantMap( props );
1551 QDomElement constraintElem = doc.createElement( QStringLiteral(
"sld:LayerFeatureConstraints" ) );
1552 node.appendChild( constraintElem );
1554 const QDomElement featureTypeConstraintElem = doc.createElement( QStringLiteral(
"sld:FeatureTypeConstraint" ) );
1555 constraintElem.appendChild( featureTypeConstraintElem );
1557 QDomElement userStyleElem = doc.createElement( QStringLiteral(
"sld:UserStyle" ) );
1558 node.appendChild( userStyleElem );
1560 if ( !
name().isEmpty() )
1562 QDomElement nameElem = doc.createElement( QStringLiteral(
"sld:Name" ) );
1563 nameElem.appendChild( doc.createTextNode(
name() ) );
1564 userStyleElem.appendChild( nameElem );
1567 if ( !
abstract().isEmpty() )
1569 QDomElement abstractElem = doc.createElement( QStringLiteral(
"sld:Abstract" ) );
1570 abstractElem.appendChild( doc.createTextNode(
abstract() ) );
1571 userStyleElem.appendChild( abstractElem );
1574 if ( !
title().isEmpty() )
1576 QDomElement titleElem = doc.createElement( QStringLiteral(
"sld:Title" ) );
1577 titleElem.appendChild( doc.createTextNode(
title() ) );
1578 userStyleElem.appendChild( titleElem );
1581 QDomElement featureTypeStyleElem = doc.createElement( QStringLiteral(
"sld:FeatureTypeStyle" ) );
1582 userStyleElem.appendChild( featureTypeStyleElem );
1592 QDomElement typeStyleNameElem = doc.createElement( QStringLiteral(
"sld:Name" ) );
1593 featureTypeStyleElem.appendChild( typeStyleNameElem );
1596 QDomElement typeStyleRuleElem = doc.createElement( QStringLiteral(
"sld:Rule" ) );
1597 featureTypeStyleElem.appendChild( typeStyleRuleElem );
1605 QDomElement minScaleElem = doc.createElement( QStringLiteral(
"sld:MinScaleDenominator" ) );
1606 minScaleElem.appendChild( doc.createTextNode( QString::number(
maximumScale() ) ) );
1607 typeStyleRuleElem.appendChild( minScaleElem );
1610 QDomElement maxScaleElem = doc.createElement( QStringLiteral(
"sld:MaxScaleDenominator" ) );
1611 maxScaleElem.appendChild( doc.createTextNode( QString::number(
minimumScale() ) ) );
1612 typeStyleRuleElem.appendChild( maxScaleElem );
1616 mPipe->renderer()->toSld( doc, typeStyleRuleElem, localProps );
1621 const QDomNodeList elements = typeStyleRuleElem.elementsByTagName( QStringLiteral(
"sld:RasterSymbolizer" ) );
1622 if ( elements.size() != 0 )
1625 QDomElement rasterSymbolizerElem = elements.at( 0 ).toElement();
1628 auto vendorOptionWriter = [&]( QString
name, QString value )
1630 QDomElement vendorOptionElem = doc.createElement( QStringLiteral(
"sld:VendorOption" ) );
1631 vendorOptionElem.setAttribute( QStringLiteral(
"name" ),
name );
1632 vendorOptionElem.appendChild( doc.createTextNode( value ) );
1633 rasterSymbolizerElem.appendChild( vendorOptionElem );
1638 vendorOptionWriter( QStringLiteral(
"invertColors" ), QString::number( 1 ) );
1648 property = QStringLiteral(
"lightness" );
1651 property = QStringLiteral(
"luminosity" );
1654 property = QStringLiteral(
"average" );
1660 if ( !property.isEmpty() )
1661 vendorOptionWriter( QStringLiteral(
"grayScale" ), property );
1667 vendorOptionWriter( QStringLiteral(
"colorizeOn" ), QString::number(
hueSaturationFilter()->colorizeOn() ) );
1668 vendorOptionWriter( QStringLiteral(
"colorizeRed" ), QString::number(
hueSaturationFilter()->colorizeColor().red() ) );
1669 vendorOptionWriter( QStringLiteral(
"colorizeGreen" ), QString::number(
hueSaturationFilter()->colorizeColor().green() ) );
1670 vendorOptionWriter( QStringLiteral(
"colorizeBlue" ), QString::number(
hueSaturationFilter()->colorizeColor().blue() ) );
1672 vendorOptionWriter( QStringLiteral(
"colorizeStrength" ), QString::number(
hueSaturationFilter()->colorizeStrength() / 100.0 ) );
1673 vendorOptionWriter( QStringLiteral(
"saturation" ), QString::number(
hueSaturationFilter()->colorizeColor().saturationF() ) );
1682 const double sF = ( s - ( -100.0 ) ) / ( 100.0 - ( -100.0 ) );
1683 vendorOptionWriter( QStringLiteral(
"saturation" ), QString::number( sF ) );
1692 const double bF = ( b - ( -255.0 ) ) / ( 255.0 - ( -255.0 ) );
1693 vendorOptionWriter( QStringLiteral(
"brightness" ), QString::number( bF ) );
1701 const double cF = (
c - ( -100.0 ) ) / ( 100.0 - ( -100.0 ) );
1702 vendorOptionWriter( QStringLiteral(
"contrast" ), QString::number( cF ) );
1716 if ( newProps.contains( QStringLiteral(
"contrast" ) ) )
1719 double contrast = newProps[ QStringLiteral(
"contrast" ) ].toDouble();
1720 double percentage = ( contrast - ( -100.0 ) ) / ( 100.0 - ( -100.0 ) );
1721 if ( percentage <= 0.5 )
1724 gamma = percentage / 0.5;
1731 QDomElement globalContrastEnhancementElem = doc.createElement( QStringLiteral(
"sld:ContrastEnhancement" ) );
1732 rasterSymolizerElem.appendChild( globalContrastEnhancementElem );
1734 QDomElement gammaValueElem = doc.createElement( QStringLiteral(
"sld:GammaValue" ) );
1735 gammaValueElem.appendChild( doc.createTextNode( QString::number( gamma ) ) );
1736 globalContrastEnhancementElem.appendChild( gammaValueElem );
1760 return mPipe->renderer();
1765 return mPipe->resampleFilter();
1770 return mPipe->brightnessFilter();
1775 return mPipe->hueSaturationFilter();
1789 if ( mDataProvider )
1796 if ( ! mDataProvider )
1797 return QStringList();
1805 QImage image( size, format );
1810 if ( image.format() == QImage::Format_Indexed8 )
1812 image.setColor( 0, bgColor.rgba() );
1817 image.fill( bgColor );
1822 double mapUnitsPerPixel;
1828 mapUnitsPerPixel =
extent.
width() / image.width();
1829 y = ( image.height() -
extent.
height() / mapUnitsPerPixel ) / 2;
1834 x = ( image.width() -
extent.
width() / mapUnitsPerPixel ) / 2;
1837 const double pixelWidth =
extent.
width() / mapUnitsPerPixel;
1838 const double pixelHeight =
extent.
height() / mapUnitsPerPixel;
1842 rasterViewPort->
mWidth = image.width();
1843 rasterViewPort->
mHeight = image.height();
1851 QPainter *painter =
new QPainter( &image );
1852 draw( painter, rasterViewPort, mapToPixel );
1853 delete rasterViewPort;
1875 Q_UNUSED( errorMessage )
1878 QDomElement rasterRendererElem;
1880 const QDomElement layerElement = layer_node.toElement();
1887 QDomNode pipeNode = layer_node.firstChildElement( QStringLiteral(
"pipe" ) );
1888 if ( pipeNode.isNull() )
1890 pipeNode = layer_node;
1894 if ( !layer_node.firstChildElement( QStringLiteral(
"rasterproperties" ) ).isNull() )
1897 QDomNode layerNodeCopy = layer_node.cloneNode();
1898 QDomDocument doc = layerNodeCopy.ownerDocument();
1899 QDomElement rasterPropertiesElem = layerNodeCopy.firstChildElement( QStringLiteral(
"rasterproperties" ) );
1902 rasterRendererElem = layerNodeCopy.firstChildElement( QStringLiteral(
"rasterrenderer" ) );
1907 rasterRendererElem = pipeNode.firstChildElement( QStringLiteral(
"rasterrenderer" ) );
1910 if ( !rasterRendererElem.isNull() )
1912 const QString rendererType = rasterRendererElem.attribute( QStringLiteral(
"type" ) );
1926 const QDomElement brightnessElem = pipeNode.firstChildElement( QStringLiteral(
"brightnesscontrast" ) );
1927 if ( !brightnessElem.isNull() )
1937 const QDomElement hueSaturationElem = pipeNode.firstChildElement( QStringLiteral(
"huesaturation" ) );
1938 if ( !hueSaturationElem.isNull() )
1948 const QDomElement resampleElem = pipeNode.firstChildElement( QStringLiteral(
"rasterresampler" ) );
1949 if ( !resampleElem.isNull() )
1955 if ( mDataProvider )
1957 const QDomElement providerElem = pipeNode.firstChildElement( QStringLiteral(
"provider" ) );
1958 if ( !providerElem.isNull() )
1960 mDataProvider->
readXml( providerElem );
1965 const QDomNode resamplingStageElement = pipeNode.namedItem( QStringLiteral(
"resamplingStage" ) );
1966 if ( !resamplingStageElement.isNull() )
1968 const QDomElement e = resamplingStageElement.toElement();
1969 if ( e.text() == QLatin1String(
"provider" ) )
1971 else if ( e.text() == QLatin1String(
"resamplingFilter" ) )
1976 const QDomNode blendModeNode = layer_node.namedItem( QStringLiteral(
"blendMode" ) );
1977 if ( !blendModeNode.isNull() )
1979 const QDomElement e = blendModeNode.toElement();
1983 const QDomElement elemDataDefinedProperties = layer_node.firstChildElement( QStringLiteral(
"pipe-data-defined-properties" ) );
1984 if ( !elemDataDefinedProperties.isNull() )
1997 return readSymbology( node, errorMessage, context, categories );
2006 const QDomNode pkeyNode = layer_node.namedItem( QStringLiteral(
"provider" ) );
2008 if ( pkeyNode.isNull() )
2014 const QDomElement pkeyElt = pkeyNode.toElement();
2028 const QDomNode rpNode = layer_node.namedItem( QStringLiteral(
"rasterproperties" ) );
2034 if ( !
mDataSource.contains( QLatin1String(
"crs=" ) ) && !
mDataSource.contains( QLatin1String(
"format=" ) ) )
2036 QgsDebugMsgLevel( QStringLiteral(
"Old WMS URI format detected -> adding params" ), 4 );
2039 QDomElement layerElement = rpNode.firstChildElement( QStringLiteral(
"wmsSublayer" ) );
2040 while ( !layerElement.isNull() )
2045 uri.
setParam( QStringLiteral(
"layers" ), layerElement.namedItem( QStringLiteral(
"name" ) ).toElement().text() );
2048 uri.
setParam( QStringLiteral(
"styles" ), layerElement.namedItem( QStringLiteral(
"style" ) ).toElement().text() );
2050 layerElement = layerElement.nextSiblingElement( QStringLiteral(
"wmsSublayer" ) );
2054 uri.
setParam( QStringLiteral(
"format" ), rpNode.namedItem( QStringLiteral(
"wmsFormat" ) ).toElement().text() );
2058 uri.
setParam( QStringLiteral(
"crs" ),
crs().authid() );
2067 QgsDataProvider::ReadFlags
flags = QgsDataProvider::ReadFlags();
2075 const QDomNode extentNode = layer_node.namedItem( QStringLiteral(
"extent" ) );
2076 if ( !extentNode.isNull() )
2091 mOriginalStyleElement = layer_node.namedItem( QStringLiteral(
"originalStyle" ) ).firstChildElement();
2092 if ( mOriginalStyleElement.isNull() )
2093 mOriginalStyleElement = layer_node.toElement();
2094 mOriginalStyleDocument = layer_node.ownerDocument();
2096 if ( ! mDataProvider )
2120 QDomNode stampNode = layer_node.namedItem(
"timestamp" );
2121 if ( !stampNode.isNull() )
2123 QDateTime stamp = QDateTime::fromString( stampNode.toElement().text(), Qt::ISODate );
2125 if ( stamp < mDataProvider->dataTimestamp() )
2128 closeDataProvider();
2131 if ( !
isValid() )
return false;
2137 const QDomElement noDataElement = layer_node.firstChildElement( QStringLiteral(
"noData" ) );
2139 const QDomNodeList noDataBandList = noDataElement.elementsByTagName( QStringLiteral(
"noDataList" ) );
2141 for (
int i = 0; i < noDataBandList.size(); ++i )
2143 const QDomElement bandElement = noDataBandList.at( i ).toElement();
2145 const int bandNo = bandElement.attribute( QStringLiteral(
"bandNo" ) ).toInt( &ok );
2147 if ( ok && ( bandNo > 0 ) && ( bandNo <= mDataProvider->
bandCount() ) )
2149 mDataProvider->
setUseSourceNoDataValue( bandNo, bandElement.attribute( QStringLiteral(
"useSrcNoData" ) ).toInt() );
2152 const QDomNodeList rangeList = bandElement.elementsByTagName( QStringLiteral(
"noDataRange" ) );
2154 myNoDataRangeList.reserve( rangeList.size() );
2155 for (
int j = 0; j < rangeList.size(); ++j )
2157 const QDomElement rangeElement = rangeList.at( j ).toElement();
2158 const QgsRasterRange myNoDataRange( rangeElement.attribute( QStringLiteral(
"min" ) ).toDouble(),
2159 rangeElement.attribute( QStringLiteral(
"max" ) ).toDouble() );
2160 QgsDebugMsgLevel( QStringLiteral(
"min = %1 %2" ).arg( rangeElement.attribute(
"min" ) ).arg( myNoDataRange.
min() ), 4 );
2161 myNoDataRangeList << myNoDataRange;
2175 Q_UNUSED( errorMessage )
2178 QDomElement layerElement = layer_node.toElement();
2183 QDomElement pipeElement = document.createElement( QStringLiteral(
"pipe" ) );
2185 for (
int i = 0; i < mPipe->size(); i++ )
2188 if ( !interface )
continue;
2189 interface->writeXml( document, pipeElement );
2192 QDomElement elemDataDefinedProperties = document.createElement( QStringLiteral(
"pipe-data-defined-properties" ) );
2194 layer_node.appendChild( elemDataDefinedProperties );
2196 QDomElement resamplingStageElement = document.createElement( QStringLiteral(
"resamplingStage" ) );
2198 resamplingStageElement.appendChild( resamplingStageText );
2199 pipeElement.appendChild( resamplingStageElement );
2201 layer_node.appendChild( pipeElement );
2203 if ( !
isValid() && !mOriginalStyleElement.isNull() )
2205 QDomElement originalStyleElement = document.createElement( QStringLiteral(
"originalStyle" ) );
2206 originalStyleElement.appendChild( mOriginalStyleElement );
2207 layer_node.appendChild( originalStyleElement );
2211 QDomElement blendModeElement = document.createElement( QStringLiteral(
"blendMode" ) );
2213 blendModeElement.appendChild( blendModeText );
2214 layer_node.appendChild( blendModeElement );
2222 return writeSymbology( node, doc, errorMessage, context, categories );
2230 QDomDocument &document,
2233 if ( !mDataProvider )
2238 QDomElement mapLayerNode = layer_node.toElement();
2240 if ( mapLayerNode.isNull() ||
"maplayer" != mapLayerNode.nodeName() )
2250 QDomElement provider = document.createElement( QStringLiteral(
"provider" ) );
2251 const QDomText providerText = document.createTextNode(
mProviderKey );
2252 provider.appendChild( providerText );
2253 layer_node.appendChild( provider );
2256 QDomElement noData = document.createElement( QStringLiteral(
"noData" ) );
2258 for (
int bandNo = 1; bandNo <= mDataProvider->
bandCount(); bandNo++ )
2260 QDomElement noDataRangeList = document.createElement( QStringLiteral(
"noDataList" ) );
2261 noDataRangeList.setAttribute( QStringLiteral(
"bandNo" ), bandNo );
2262 noDataRangeList.setAttribute( QStringLiteral(
"useSrcNoData" ), mDataProvider->
useSourceNoDataValue( bandNo ) );
2264 const auto constUserNoDataValues = mDataProvider->
userNoDataValues( bandNo );
2267 QDomElement noDataRange = document.createElement( QStringLiteral(
"noDataRange" ) );
2271 noDataRangeList.appendChild( noDataRange );
2274 noData.appendChild( noDataRangeList );
2277 if ( noData.hasChildNodes() )
2279 layer_node.appendChild( noData );
2288 return writeSymbology( layer_node, document, errorMsg, context );
2292 static bool _parseGpkgColons(
const QString &src, QString &filename, QString &tablename )
2297 QStringList lst = src.split(
':' );
2298 if ( lst.count() != 3 && lst.count() != 4 )
2301 tablename = lst.last();
2302 if ( lst.count() == 3 )
2307 else if ( lst.count() == 4 && lst[1].count() == 1 && ( lst[2][0] ==
'/' || lst[2][0] ==
'\\' ) )
2310 filename = lst[1] +
":" + lst[2];
2320 bool handled =
false;
2325 if ( src.startsWith( QLatin1String(
"NETCDF:" ) ) )
2329 const QRegularExpression netcdfEncodedRegExp( QRegularExpression::anchoredPattern(
"NETCDF:(.+):([^:]+)" ) );
2330 const QRegularExpressionMatch match = netcdfEncodedRegExp.match( src );
2331 if ( match.hasMatch() )
2333 QString filename = match.captured( 1 );
2334 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2335 filename = filename.mid( 1, filename.length() - 2 );
2340 else if ( src.startsWith( QLatin1String(
"GPKG:" ) ) )
2343 QString filename, tablename;
2344 if ( _parseGpkgColons( src, filename, tablename ) )
2347 src = QStringLiteral(
"GPKG:%1:%2" ).arg( filename, tablename );
2351 else if ( src.startsWith( QLatin1String(
"HDF4_SDS:" ) ) )
2355 const QRegularExpression hdf4EncodedRegExp( QRegularExpression::anchoredPattern(
"HDF4_SDS:([^:]+):(.+):([^:]+)" ) );
2356 const QRegularExpressionMatch match = hdf4EncodedRegExp.match( src );
2357 if ( match.hasMatch() )
2359 QString filename = match.captured( 2 );
2360 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2361 filename = filename.mid( 1, filename.length() - 2 );
2362 src =
"HDF4_SDS:" + match.captured( 1 ) +
":\"" + context.
pathResolver().
writePath( filename ) +
"\":" + match.captured( 3 );
2366 else if ( src.startsWith( QLatin1String(
"HDF5:" ) ) )
2370 const QRegularExpression hdf5EncodedRegExp( QRegularExpression::anchoredPattern(
"HDF5:(.+):([^:]+)" ) );
2371 const QRegularExpressionMatch match = hdf5EncodedRegExp.match( src );
2372 if ( match.hasMatch() )
2374 QString filename = match.captured( 1 );
2375 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2376 filename = filename.mid( 1, filename.length() - 2 );
2381 else if ( src.contains( QRegularExpression(
"^(NITF_IM|RADARSAT_2_CALIB):" ) ) )
2385 const QRegularExpression nitfRadarsatEncodedRegExp( QRegularExpression::anchoredPattern(
"([^:]+):([^:]+):(.+)" ) );
2386 const QRegularExpressionMatch match = nitfRadarsatEncodedRegExp.match( src );
2387 if ( match.hasMatch() )
2389 src = match.captured( 1 ) +
':' + match.captured( 2 ) +
':' + context.
pathResolver().
writePath( match.captured( 3 ) );
2399 const QUrl srcUrl( uri.
param( QStringLiteral(
"url" ) ) );
2400 if ( srcUrl.isLocalFile() )
2405 uri.
setParam( QStringLiteral(
"url" ), QUrl::fromLocalFile( relSrcUrl ).toString() );
2432 if ( provider == QLatin1String(
"wms" ) )
2446 if ( !src.contains( QLatin1String(
"type=" ) ) &&
2447 !src.contains( QLatin1String(
"crs=" ) ) && !src.contains( QLatin1String(
"format=" ) ) )
2449 QgsDebugMsgLevel( QStringLiteral(
"Old WMS URI format detected -> converting to new format" ), 2 );
2451 if ( !src.startsWith( QLatin1String(
"http:" ) ) )
2453 const QStringList parts = src.split(
',' );
2454 QStringListIterator iter( parts );
2455 while ( iter.hasNext() )
2457 const QString item = iter.next();
2458 if ( item.startsWith( QLatin1String(
"username=" ) ) )
2462 else if ( item.startsWith( QLatin1String(
"password=" ) ) )
2466 else if ( item.startsWith( QLatin1String(
"tiled=" ) ) )
2472 QStringList params = item.mid( 6 ).split(
';' );
2474 if ( params.size() == 2 )
2476 uri.
setParam( QStringLiteral(
"maxWidth" ), params.takeFirst() );
2477 uri.
setParam( QStringLiteral(
"maxHeight" ), params.takeFirst() );
2479 else if ( params.size() > 2 )
2483 uri.
setParam( QStringLiteral(
"tileMatrixSet" ), QString() );
2486 else if ( item.startsWith( QLatin1String(
"featureCount=" ) ) )
2488 uri.
setParam( QStringLiteral(
"featureCount" ), item.mid( 13 ) );
2490 else if ( item.startsWith( QLatin1String(
"url=" ) ) )
2492 uri.
setParam( QStringLiteral(
"url" ), item.mid( 4 ) );
2494 else if ( item.startsWith( QLatin1String(
"ignoreUrl=" ) ) )
2496 uri.
setParam( QStringLiteral(
"ignoreUrl" ), item.mid( 10 ).split(
';' ) );
2502 uri.
setParam( QStringLiteral(
"url" ), src );
2513 const QUrl srcUrl( uri.
param( QStringLiteral(
"url" ) ) );
2514 if ( srcUrl.isLocalFile() )
2518 uri.
setParam( QStringLiteral(
"url" ), QUrl::fromLocalFile( absSrcUrl ).toString() );
2525 bool handled =
false;
2527 if ( provider == QLatin1String(
"gdal" ) )
2529 if ( src.startsWith( QLatin1String(
"NETCDF:" ) ) )
2533 const QRegularExpression netcdfDecodedRegExp( QRegularExpression::anchoredPattern(
"NETCDF:(.+):([^:]+)" ) );
2534 const QRegularExpressionMatch match = netcdfDecodedRegExp.match( src );
2535 if ( match.hasMatch() )
2537 QString filename = match.captured( 1 );
2538 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2539 filename = filename.mid( 1, filename.length() - 2 );
2544 else if ( src.startsWith( QLatin1String(
"GPKG:" ) ) )
2547 QString filename, tablename;
2548 if ( _parseGpkgColons( src, filename, tablename ) )
2551 src = QStringLiteral(
"GPKG:%1:%2" ).arg( filename, tablename );
2555 else if ( src.startsWith( QLatin1String(
"HDF4_SDS:" ) ) )
2559 const QRegularExpression hdf4DecodedRegExp( QRegularExpression::anchoredPattern(
"HDF4_SDS:([^:]+):(.+):([^:]+)" ) );
2560 const QRegularExpressionMatch match = hdf4DecodedRegExp.match( src );
2561 if ( match.hasMatch() )
2563 QString filename = match.captured( 2 );
2564 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2565 filename = filename.mid( 1, filename.length() - 2 );
2566 src =
"HDF4_SDS:" + match.captured( 1 ) +
":\"" + context.
pathResolver().
readPath( filename ) +
"\":" + match.captured( 3 );
2570 else if ( src.startsWith( QLatin1String(
"HDF5:" ) ) )
2574 const QRegularExpression hdf5DecodedRegExp( QRegularExpression::anchoredPattern(
"HDF5:(.+):([^:]+)" ) );
2575 const QRegularExpressionMatch match = hdf5DecodedRegExp.match( src );
2576 if ( match.hasMatch() )
2578 QString filename = match.captured( 1 );
2579 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2580 filename = filename.mid( 1, filename.length() - 2 );
2585 else if ( src.contains( QRegularExpression(
"^(NITF_IM|RADARSAT_2_CALIB):" ) ) )
2589 const QRegularExpression niftRadarsatDecodedRegExp( QRegularExpression::anchoredPattern(
"([^:]+):([^:]+):(.+)" ) );
2590 const QRegularExpressionMatch match = niftRadarsatDecodedRegExp.match( src );
2591 if ( match.hasMatch() )
2593 src = match.captured( 1 ) +
':' + match.captured( 2 ) +
':' + context.
pathResolver().
readPath( match.captured( 3 ) );
2599 if ( provider == QLatin1String(
"virtualraster" ) )
2620 if ( !mDataProvider )
return 0;
2621 return mDataProvider->
xSize();
2626 if ( !mDataProvider )
return 0;
2627 return mDataProvider->
ySize();
2632 mPipe->setResamplingStage( stage );
2637 return mPipe->resamplingStage();
2645 bool QgsRasterLayer::update()
2652 closeDataProvider();
2655 QgsDataProvider::ReadFlags
flags = QgsDataProvider::ReadFlags();
void setContrastEnhancement(QgsContrastEnhancement *ce)
Takes ownership.
void setError(const QgsError &error)
Sets error message.
void willBeDeleted()
Emitted in the destructor when the layer is about to be deleted, but it is still in a perfectly valid...
static QgsRasterRendererRegistry * rasterRendererRegistry()
Returns the application's raster renderer registry, used for managing raster layer renderers.
QString crsHtmlMetadata() const
Returns a HTML fragment containing the layer's CRS metadata, for use in the htmlMetadata() method.
QgsPointXY mBottomRightPoint
Coordinate (in output device coordinate system) of bottom right corner of the part of the raster that...
virtual bool hasStatistics(int bandNo, int stats=QgsRasterBandStats::All, const QgsRectangle &extent=QgsRectangle(), int sampleSize=0)
Returns true if histogram is available (cached, already calculated).
void setGreenContrastEnhancement(QgsContrastEnhancement *ce)
Sets the contrast enhancement to use for the green channel.
virtual void setUserNoDataValue(int bandNo, const QgsRasterRangeList &noData)
QgsCoordinateReferenceSystem crs
void emitStyleChanged()
Triggers an emission of the styleChanged() signal.
void readCommonStyle(const QDomElement &layerElement, const QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories)
Read style data common to all layer types.
static QString printValue(double value)
Print double value with all necessary significant digits.
virtual QList< QPair< QString, QColor > > legendSymbologyItems() const
Returns symbology items if provided by renderer.
double height() const SIP_HOLDGIL
Returns the height of the rectangle.
QPixmap paletteAsPixmap(int bandNumber=1)
Returns a 100x100 pixmap of the color palette.
int bandCount() const
Returns the number of bands in this layer.
bool writeSymbology(QDomNode &, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories) const override
Class for storing the component parts of a RDBMS data source URI (e.g. a Postgres data source).
void readXml(const QDomElement &filterElem) override
Sets base class members from xml. Usually called from create() methods of subclasses.
static QString version()
Version string.
Contains information about the context in which a coordinate transform is executed.
@ FlagTrustLayerMetadata
Trust layer metadata. Improves layer load time by skipping expensive checks like primary key unicity,...
void configChanged()
Emitted whenever the configuration is changed.
@ FlagReadExtentFromXml
Read extent from xml and skip get extent from provider.
virtual bool supportsSubsetString() const
Returns true if the provider supports setting of subset strings.
Qgis::DataType dataType(int bandNo) const override=0
Returns data type for the band specified by number.
virtual Qgis::DataProviderFlags flags() const
Returns the generic data provider flags.
Setting options for creating vector data providers.
BlendMode
Blending modes enum defining the available composition modes that can be used when rendering a layer.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
bool ignoreExtents() const
If the ignoreExtent flag is set, the layer will also render outside the bounding box reported by the ...
virtual QgsRasterBandStats bandStatistics(int bandNo, int stats=QgsRasterBandStats::All, const QgsRectangle &extent=QgsRectangle(), int sampleSize=0, QgsRasterBlockFeedback *feedback=nullptr)
Returns the band statistics.
QgsAbstractProfileGenerator * createProfileGenerator(const QgsProfileRequest &request) override
Given a profile request, returns a new profile generator ready for generating elevation profiles.
The class is used as a container of context for various read/write operations on other objects.
void setLayerOrder(const QStringList &layers) override
Reorders the previously selected sublayers of this layer from bottom to top.
Abstract base class for spatial data provider implementations.
@ SingleBandColorDataStyle
@ UInt32
Thirty two bit unsigned integer (quint32)
const QgsRasterMinMaxOrigin & minMaxOrigin() const
Returns const reference to origin of min/max values.
@ Size
Original data source size (and thus resolution) is known, it is not always available,...
QStringList subLayers() const override
Returns the sublayers of this layer - useful for providers that manage their own layers,...
#define QgsDebugMsgLevel(str, level)
bool readSymbology(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories) override
virtual bool useSourceNoDataValue(int bandNo) const
Returns the source nodata value usage.
@ AlphaBand
Alpha (0=transparent, 255=opaque)
bool defaultContrastEnhancementSettings(QgsContrastEnhancement::ContrastEnhancementAlgorithm &myAlgorithm, QgsRasterMinMaxOrigin::Limits &myLimits) const
Returns default contrast enhancement settings for that type of raster.
const QgsContrastEnhancement * redContrastEnhancement() const
Returns the contrast enhancement to use for the red channel.
Base class for storage of map layer elevation properties.
virtual void setSubLayerVisibility(const QString &name, bool vis)
Set the visibility of the given sublayer name.
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
QPainter::CompositionMode blendMode() const
Returns the current blending mode for a layer.
void setDefaultContrastEnhancement()
Sets the default contrast enhancement.
Limits
This enumerator describes the limits used to compute min/max values.
Q_INVOKABLE void setCustomProperty(const QString &key, const QVariant &value)
Set a custom property for layer.
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
@ WKT_PREFERRED
Preferred format, matching the most recent WKT ISO standard. Currently an alias to WKT2_2019,...
virtual void cumulativeCut(int bandNo, double lowerCount, double upperCount, double &lowerValue, double &upperValue, const QgsRectangle &extent=QgsRectangle(), int sampleSize=0)
Find values for cumulative pixel count cut.
The RasterBandStats struct is a container for statistics about a single raster band.
QgsMapLayer::ReadFlags mReadFlags
Read flags. It's up to the subclass to respect these when restoring state from XML.
@ Cubic
Cubic Convolution Approximation (4x4 kernel) resampling.
void setShader(QgsRasterShader *shader)
Takes ownership of the shader.
virtual bool setSubsetString(const QString &subset, bool updateFeatureCount=true)
Set the subset string used to create a subset of features in the layer.
bool skipCrsValidation
Controls whether the layer is allowed to have an invalid/unknown CRS.
void setOpacity(double opacity) FINAL
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
bool set(QgsRasterInterface *interface)
Inserts a new known interface in default place or replace interface of the same role if it already ex...
@ FlagTrustDataSource
Trust datasource config (primary key unicity, geometry type and srid, etc). Improves provider load ti...
QgsRasterShaderFunction * rasterShaderFunction()
QgsCoordinateReferenceSystem mSrcCRS
Source coordinate system.
@ ProviderHintCanPerformProviderResampling
Provider can perform resampling (to be opposed to post rendering resampling) (since QGIS 3....
QgsMapLayerType
Types of layers that can be added to a map.
QDateTime dataTimestamp() const override
Current time stamp of data source.
Registry for raster renderer entries.
static const double SAMPLE_SIZE
Default sample size (number of pixels) for estimated statistics/histogram calculation.
virtual QgsError error() const
Gets current status error.
DataType
Raster data types.
double mean
The mean cell value for the band. NO_DATA values are excluded.
QgsRectangle extent() const override=0
Returns the extent of the layer.
DrawingStyle
This enumerator describes the different kinds of drawing we can do.
void classifyColorRamp(int classes=0, int band=-1, const QgsRectangle &extent=QgsRectangle(), QgsRasterInterface *input=nullptr)
Classify color ramp shader.
static void mergeScaleDependencies(double mScaleMinDenom, double mScaleMaxDenom, QVariantMap &props)
Merges the local scale limits, if any, with the ones already in the map, if any.
void statusChanged(const QString &status)
Emit a signal with status (e.g. to be caught by QgisApp and display a msg on status bar)
Contains a pipeline of raster interfaces for sequential raster processing.
@ Byte
Eight bit unsigned integer (quint8)
QString decodedSource(const QString &source, const QString &provider, const QgsReadWriteContext &context) const override
Called by readLayerXML(), used by derived classes to decode provider's specific data source from proj...
Abstract base class for objects which generate elevation profiles.
RasterResamplingStage
Stage at which raster resampling occurs.
const QgsContrastEnhancement * greenContrastEnhancement() const
Returns the contrast enhancement to use for the green channel.
Raster renderer pipe for single band gray.
Contains information about the context of a rendering operation.
Struct that stores the information about the parameters that should be given to the QgsVirtualRasterP...
An interface for classes which can visit style entity (e.g. symbol) nodes (using the visitor pattern)...
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the pipe's property collection, used for data defined overrides.
This class is a composition of two QSettings instances:
void subsetStringChanged()
Emitted when the layer's subset string has changed.
virtual QString htmlMetadata()=0
Returns metadata in a format suitable for feeding directly into a subset of the GUI raster properties...
void setBlendMode(QPainter::CompositionMode blendMode)
Set the blending mode used for rendering a layer.
@ Int32
Thirty two bit signed integer (qint32)
@ IdentifyFeature
WMS GML -> feature.
virtual void setTransformContext(const QgsCoordinateTransformContext &transformContext) override
Sets the coordinate transform context to transformContext.
double stdDevFactor() const
Returns the factor f so that the min/max range is [ mean - f * stddev , mean + f * stddev ].
void readCustomProperties(const QDomNode &layerNode, const QString &keyStartsWith=QString())
Read custom properties from project file.
void writeXml(QDomNode &layer_node, QDomDocument &document) const
Saves server properties to xml under the layer node.
virtual QString type() const
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_SINGLE_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type Byte.
QString htmlMetadata() const override
Obtain a formatted HTML string containing assorted metadata for this layer.
QgsPointXY mTopLeftPoint
Coordinate (in output device coordinate system) of top left corner of the part of the raster that is ...
static int typeSize(Qgis::DataType dataType) SIP_HOLDGIL
Returns the size in bytes for the specified dataType.
int band() const
Returns the band used by the renderer.
virtual bool setSubsetString(const QString &subset)
Sets the string (typically sql) used to define a subset of the layer.
QgsRasterRendererCreateFunc rendererCreateFunction
QgsCoordinateTransformContext transformContext() const
Returns data provider coordinate transform context.
virtual QString dataSourceUri(bool expandAuthConfig=false) const
Gets the data source specification.
double min() const
Returns the minimum value for the range.
void setRedContrastEnhancement(QgsContrastEnhancement *ce)
Sets the contrast enhancement to use for the red channel.
QImage previewAsImage(QSize size, const QColor &bgColor=Qt::white, QImage::Format format=QImage::Format_ARGB32_Premultiplied)
Draws a preview of the rasterlayer into a QImage.
void refreshContrastEnhancement(const QgsRectangle &extent)
Refresh contrast enhancement with new extent.
virtual void setMetadata(const QgsLayerMetadata &metadata)
Sets the layer's metadata store.
A ramp shader will color a raster pixel based on a list of values ranges in a ramp.
void setCrs(const QgsCoordinateReferenceSystem &srs, bool emitSignal=true)
Sets layer's spatial reference system.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm SINGLE_BAND_ENHANCEMENT_ALGORITHM
Default enhancement algorithm 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.
A rectangle specified with double values.
Q_DECL_DEPRECATED QgsLegendColorList legendSymbologyItems() const
Returns a list with classification items (Text and color).
void setRenderer(QgsRasterRenderer *renderer)
Sets the raster's renderer.
@ WholeRaster
Whole raster is used to compute statistics.
QString bandName(int bandNoInt) const
Returns the name of a band given its number.
bool mShouldValidateCrs
true if the layer's CRS should be validated and invalid CRSes are not permitted.
Implementation of map layer temporal properties for raster layers.
QString mProviderKey
Data provider key (name of the data provider)
@ Bilinear
Bilinear (2x2 kernel) resampling.
Bilinear Raster Resampler.
QgsCoordinateTransformContext transformContext() const
Returns data provider coordinate transform context.
Base class for utility classes that encapsulate information necessary for rendering of map layers.
virtual bool setZoomedInResamplingMethod(ResamplingMethod method)
Set resampling method to apply for zoomed-in operations.
const QgsContrastEnhancement * contrastEnhancement() const
This class describes the origin of min/max values. It does not store by itself the min/max values.
static QgsPainting::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a BlendMode corresponding to a QPainter::CompositionMode.
QString mLayerName
Name of the layer - used for display.
static bool isValidRasterFileName(const QString &fileNameQString, QString &retError)
This helper checks to see whether the file name appears to be a valid raster file name.
QgsRasterProjector implements approximate projection support for it calculates grid of points in sour...
QgsRasterRenderer * renderer() const
Returns the raster's renderer.
void setClassificationMax(double max)
double maximumValue
The maximum cell value in the raster band.
QString param(const QString &key) const
Returns a generic parameter value corresponding to the specified key.
void readXml(const QDomElement &filterElem) override
Sets base class members from xml. Usually called from create() methods of subclasses.
QgsBrightnessContrastFilter * brightnessFilter() const
Returns the raster's brightness/contrast filter.
@ Discrete
Assigns the color of the higher class for every pixel between two class breaks.
void setUsername(const QString &username)
Sets the username for the URI.
static QString contrastEnhancementAlgorithmString(ContrastEnhancementAlgorithm algorithm)
Returns a string to serialize ContrastEnhancementAlgorithm.
void setBlueContrastEnhancement(QgsContrastEnhancement *ce)
Sets the contrast enhancement to use for the blue channel.
@ FlagDontResolveLayers
Don't resolve layer paths or create data providers for layers.
Implementation of QgsAbstractProfileGenerator for raster layers.
~QgsRasterLayer() override
QgsMapLayer::LayerFlags flags() const
Returns the flags for this layer.
QString writePath(const QString &filename) const
Prepare a filename to save it to the project file.
QStringList subLayers() const override
Returns the sublayers of this layer.
static QString typeToString(QgsMapLayerType type)
Converts a map layer type to a string value.
QgsLayerMetadata metadata
void setColorRampType(QgsColorRampShader::Type colorRampType)
Sets the color ramp type.
int width() const
Returns the width of the (unclipped) raster.
virtual void reloadData()
Reloads the data from the source for providers with data caches to synchronize, changes in the data s...
static QDateTime lastModified(const QString &name)
Returns time stamp for given file name.
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified symbology visitor, causing it to visit all symbols associated with the layer.
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used.
QgsHueSaturationFilter * hueSaturationFilter() const
Returns the raster's hue/saturation filter.
virtual void setExtent(const QgsRectangle &rect)
Sets the extent.
@ CumulativeCut
Range is [ min + cumulativeCutLower() * (max - min), min + cumulativeCutUpper() * (max - min) ].
@ IdentifyValue
Numerical values.
Qgis::RasterResamplingStage resamplingStage() const
Returns which stage of the pipe should apply resampling.
void draw(QPainter *p, QgsRasterViewPort *viewPort, const QgsMapToPixel *qgsMapToPixel, QgsRasterBlockFeedback *feedback=nullptr)
Draws raster data.
@ MinMax
Real min-max values.
QString encodedSource(const QString &source, const QgsReadWriteContext &context) const override
Called by writeLayerXML(), used by derived classes to encode provider's specific data source to proje...
void draw(QPainter *theQPainter, QgsRasterViewPort *myRasterViewPort, const QgsMapToPixel *qgsMapToPixel=nullptr)
This is an overloaded version of the draw() function that is called by both draw() and thumbnailAsPix...
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
@ FlagLoadDefaultStyle
Reset the layer's style to the default for the datasource.
virtual int xSize() const
Gets raster size.
Raster renderer pipe that applies colors to a raster.
void readXml(const QDomElement &filterElem) override
Sets base class members from xml. Usually called from create() methods of subclasses.
Raster layer specific subclass of QgsMapLayerElevationProperties.
int brightness() const
Returns current brightness level.
@ StretchToMinimumMaximum
Linear histogram.
virtual QgsRasterDataProvider::ProviderCapabilities providerCapabilities() const
Returns flags containing the supported capabilities of the data provider.
virtual QString generateBandName(int bandNumber) const
helper function to create zero padded band names
QgsCoordinateTransformContext mTransformContext
Coordinate transform context.
void readStyleManager(const QDomNode &layerNode)
Read style manager's configuration (if any). To be called by subclasses.
void writeCommonStyle(QDomElement &layerElement, QDomDocument &document, const QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories) const
Write style data common to all layer types.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
void repaintRequested(bool deferredUpdate=false)
By emitting this signal the layer tells that either appearance or content have been changed and any v...
int height() const
Returns the height of the (unclipped) raster.
double cumulativeCutLower() const
Returns the lower bound of cumulative cut method (between 0 and 1).
virtual QgsRectangle extent() const
Returns the extent of the layer.
QgsMapLayerTemporalProperties * temporalProperties() override
Returns the layer's temporal properties.
@ NoEnhancement
Default color scaling algorithm, no scaling is applied.
QString generalHtmlMetadata() const
Returns an HTML fragment containing general metadata information, for use in the htmlMetadata() metho...
@ RasterLayer
Raster layer.
static QPainter::CompositionMode getCompositionMode(QgsPainting::BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a BlendMode.
@ ProviderHintBenefitsFromResampling
Provider benefits from resampling and should apply user default resampling settings (since QGIS 3....
const QgsContrastEnhancement * blueContrastEnhancement() const
Returns the contrast enhancement to use for the blue channel.
@ UnknownDataType
Unknown or unspecified type.
void setParam(const QString &key, const QString &value)
Sets a generic parameter value on the URI.
QDateTime timestamp() const override
Time stamp of data source in the moment when data/metadata were loaded by provider.
static Limits limitsFromString(const QString &limits)
Deserialize Limits.
bool invertColors() const
Returns true if the filter inverts colors.
@ IsBasemapLayer
Layer is considered a 'basemap' layer, and certain properties of the layer should be ignored when cal...
static QString limitsString(Limits limits)
Returns a string to serialize Limits.
The drawing pipe for raster layers.
@ Float64
Sixty four bit floating point (double)
virtual QString loadDefaultStyle(bool &resultFlag)
Retrieve the default style for this layer if one exists (either as a .qml file on disk or as a record...
@ Int16
Sixteen bit signed integer (qint16)
@ ReadLayerMetadata
Provider can read layer metadata from data store. Since QGIS 3.0. See QgsDataProvider::layerMetadata(...
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true)
Adds a message to the log instance (and creates it if necessary).
Q_DECL_DEPRECATED void setCrs(const QgsCoordinateReferenceSystem &srcCRS, const QgsCoordinateReferenceSystem &destCRS, int srcDatumTransform=-1, int destDatumTransform=-1)
Sets the source and destination CRS.
static QgsRuntimeProfiler * profiler()
Returns the application runtime profiler.
Encapsulates properties and constraints relating to fetching elevation profiles from different source...
bool readXml(const QDomNode &layer_node, QgsReadWriteContext &context) override
Called by readLayerXML(), used by children to read state specific to them from project files.
void setClassificationMin(double min)
QgsRasterResampleFilter * resampleFilter() const
Returns the raster's resample filter.
QgsCoordinateTransformContext transformContext
Coordinate transform context.
QList< QgsRasterRange > QgsRasterRangeList
QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
Base class for storage of map layer temporal properties.
void setZoomedInResampler(QgsRasterResampler *r)
Sets resampler for zoomed in scales. Takes ownership of the object.
@ SkipGetExtent
Skip the extent from provider.
virtual QString subsetString() const
Returns the string (typically sql) used to define a subset of the layer.
QString mDataSource
Data source description string, varies by layer type.
Color and saturation filter pipe for rasters.
void setColorRampItemList(const QList< QgsColorRampShader::ColorRampItem > &list)
Sets a custom colormap.
ContrastEnhancementAlgorithm contrastEnhancementAlgorithm() const
@ IsBasemapSource
Associated source should be considered a 'basemap' layer. See Qgis::MapLayerProperty::IsBasemapLayer.
double opacity() const FINAL
Returns the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
@ ARGB32_Premultiplied
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32_Premultiplied.
virtual QList< QgsColorRampShader::ColorRampItem > colorTable(int bandNo) const
Renderer for multiband images with the color components.
bool hasScaleBasedVisibility() const
Returns whether scale based visibility is enabled for the layer.
QgsRasterLayerElevationProperties * clone() const override
Creates a clone of the properties.
int removeParam(const QString &key)
Removes a generic parameter by key.
Represents a raster layer.
void setContrastEnhancement(QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm, QgsRasterMinMaxOrigin::Limits limits=QgsRasterMinMaxOrigin::MinMax, const QgsRectangle &extent=QgsRectangle(), int sampleSize=QgsRasterLayer::SAMPLE_SIZE, bool generateLookupTableFlag=true)
Set contrast enhancement algorithm.
Iterator for sequentially processing raster cells.
void opacityChanged(double opacity)
Emitted when the layer's opacity is changed, where opacity is a value between 0 (transparent) and 1 (...
int contrast() const
Returns current contrast level.
@ UInt16
Sixteen bit unsigned integer (quint16)
double minimumScale() const
Returns the minimum map scale (i.e.
void rendererChanged()
Signal emitted when renderer is changed.
static QgsPropertiesDefinition propertyDefinitions()
Returns the definitions for data defined properties available for use in raster pipes.
double maximumScale() const
Returns the maximum map scale (i.e.
This class represents a coordinate reference system (CRS).
virtual bool ignoreExtents() const
Returns true if the extents reported by the data provider are not reliable and it's possible that the...
Manipulates raster or point cloud pixel values so that they enhanceContrast or clip into a specified ...
@ ARGB32
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32.
virtual int ySize() const
bool readStyle(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories) override
@ UpdatedCanvas
Constantly updated extent of the canvas is used to compute statistics.
QString toString(int precision=16) const
Returns a string representation of form xmin,ymin : xmax,ymax Coordinates will be truncated to the sp...
void setDefaultsFromDataProviderTemporalCapabilities(const QgsDataProviderTemporalCapabilities *capabilities) override
Sets the layers temporal settings to appropriate defaults based on a provider's temporal capabilities...
A class to represent a 2D point.
virtual bool setMaxOversampling(double factor)
Sets maximum oversampling factor for zoomed-out operations.
double minimumValue
The minimum cell value in the raster band.
static QgsMapLayerLegend * defaultRasterLegend(QgsRasterLayer *rl)
Create new legend implementation for raster layer.
double rasterUnitsPerPixelY() const
Returns the number of raster units per each raster pixel in Y axis.
QgsMapLayerElevationProperties * elevationProperties() override
Returns the layer's elevation properties.
QDateTime timestamp() const override
Time stamp of data source in the moment when data/metadata were loaded by provider.
void dataChanged()
Data of layer changed.
void appendError(const QgsErrorMessage &error)
Add error message.
void reload() override
Synchronises with changes in the datasource.
virtual void setTransformContext(const QgsCoordinateTransformContext &transformContext)
Sets data coordinate transform context to transformContext.
QString readPath(const QString &filename) const
Turn filename read from the project file to an absolute path.
Qgis::DataType sourceDataType(int bandNo) const override=0
Returns source data type for the band specified by number, source data type may be shorter than dataT...
void setResamplingStage(Qgis::RasterResamplingStage stage)
Select which stage of the pipe should apply resampling.
QString source() const
Returns the source for the layer.
void setMinMaxOrigin(const QgsRasterMinMaxOrigin &origin)
Sets origin of min/max values.
Setting options for loading raster layers.
void setDataSource(const QString &dataSource, const QString &baseName, const QString &provider, bool loadDefaultStyleFlag=false)
Updates the data source of the layer.
bool loadDefaultStyle
Sets to true if the default layer style should be loaded.
void writeStyleManager(QDomNode &layerNode, QDomDocument &doc) const
Write style manager's configuration (if exists). To be called by subclasses.
Base class for processing filters like renderers, reprojector, resampler etc.
qgssize mHeight
Height, number of rows to be rendered.
virtual QgsRasterRangeList userNoDataValues(int bandNo) const
Returns a list of user no data value ranges.
QgsRasterLayer * clone() const override
Returns a new instance equivalent to this one.
QByteArray encodedUri() const
Returns the complete encoded URI as a byte array.
Q_INVOKABLE QVariant customProperty(const QString &value, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer.
QgsCoordinateTransformContext transformContext() const
Returns the layer data provider coordinate transform context or a default transform context if the la...
@ Float32
Thirty two bit floating point (float)
virtual void setDataSourceUri(const QString &uri)
Set the data source specification.
Implementation of threaded rendering for raster layers.
QString providerType() const
[ data provider interface ] Which provider is being used for this Raster Layer?
void setEncodedUri(const QByteArray &uri)
Sets the complete encoded uri.
@ StdDev
Range is [ mean - stdDevFactor() * stddev, mean + stdDevFactor() * stddev ].
bool writeXml(QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context) const override
Called by writeLayerXML(), used by children to write state specific to them to project files.
qgssize mWidth
Width, number of columns to be rendered.
Brightness/contrast and gamma correction filter pipe for rasters.
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 c
Perform transforms between map coordinates and device coordinates.
void setName(const QString &name)
Set the display name of the layer.
bool shade(double value, int *returnRedValue, int *returnGreenValue, int *returnBlueValue, int *returnAlphaValue) const override
Generates and new RGB value based on one input value.
QgsRasterPipe * pipe()
Returns the raster pipe.
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_MULTI_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type different from Byte.
static ContrastEnhancementAlgorithm contrastEnhancementAlgorithmFromString(const QString &contrastEnhancementString)
Deserialize ContrastEnhancementAlgorithm.
Base class for all map layer types. This is the base class for all map layer types (vector,...
Resample filter pipe for rasters.
virtual QgsRasterInterface * input() const
Current input.
void invalidateWgs84Extent()
Invalidates the WGS84 extent.
virtual void setUseSourceNoDataValue(int bandNo, bool use)
Sets the source nodata value usage.
void setLimits(QgsRasterMinMaxOrigin::Limits limits)
Sets the limits.
static QString encodeVirtualRasterProviderUri(const VirtualRasterParameters &parts)
Encodes the URI starting from the struct .
static const QgsRasterMinMaxOrigin::Limits SINGLE_BAND_MIN_MAX_LIMITS
Default enhancement limits for single band raster.
void statusChanged(const QString &) const
Emit a message to be displayed on status bar, usually used by network providers (WMS,...
void refreshRendererIfNeeded(QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent)
Refresh renderer with new extent, if needed.
QList< QPair< QString, QColor > > QgsLegendColorList
static QgsRasterDataProvider::VirtualRasterParameters decodeVirtualRasterProviderUri(const QString &uri, bool *ok=nullptr)
Decodes the URI returning a struct with all the parameters for QgsVirtualRasterProvider class.
Qgis::MapLayerProperties properties() const override
Returns the map layer properties of this layer.
Raster values range container. Represents range of values between min and max including min and max v...
@ CFloat64
Complex Float64.
QgsDataProvider * classFactoryFunction_t(const QString *, const QgsDataProvider::ProviderOptions &options)
Q_DECL_DEPRECATED void setDataProvider(const QString &provider)
Set the data provider.
double stdDev
The standard deviation of the cell values.
bool isEnabled() const
Returns true if the elevation properties are enabled, i.e.
static const QgsRasterMinMaxOrigin::Limits MULTIPLE_BAND_SINGLE_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type Byte.
@ Provider
Resampling occurs in Provider.
QgsMapLayerServerProperties * serverProperties()
Returns QGIS Server Properties for the map layer.
void setExtent(QgsRasterMinMaxOrigin::Extent extent)
Sets the extent.
QList< QgsRasterDataProvider::VirtualRasterInputLayers > rInputLayers
virtual QString subsetString() const
Returns the subset definition string (typically sql) currently in use by the layer and used by the pr...
virtual bool setZoomedOutResamplingMethod(ResamplingMethod method)
Set resampling method to apply for zoomed-out operations.
Raster renderer pipe for single band pseudocolor.
virtual QgsLayerMetadata layerMetadata() const
Returns layer metadata collected from the provider's source.
void setSubLayerVisibility(const QString &name, bool vis) override
Set the visibility of the given sublayer name.
bool isSpatial() const override
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
virtual int bandCount() const =0
Gets number of bands.
void setRasterShaderFunction(QgsRasterShaderFunction *function)
A public method that allows the user to set their own shader function.
static QString identifyFormatName(QgsRaster::IdentifyFormat format)
void setValid(bool valid)
Sets whether layer is valid or not.
virtual int colorInterpretation(int bandNo) const
Returns data type for the band specified by number.
@ CurrentCanvas
Current extent of the canvas (at the time of computation) is used to compute statistics.
Interface for all raster shaders.
QgsRasterMinMaxOrigin::Extent extent() const
Returns the raster extent.
QgsCoordinateReferenceSystem mDestCRS
Target coordinate system.
bool writeStyle(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories) const override
QgsRasterShader * shader()
Returns the raster shader.
@ CFloat32
Complex Float32.
@ Interpolated
Interpolates the color between two class breaks linearly.
@ PaletteIndex
Paletted (see associated color table)
@ ResampleFilter
Resampling occurs in ResamplingFilter.
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
bool isEmpty() const
Returns true if the rectangle is empty.
void setProviderType(const QString &providerType)
Sets the providerType (provider key)
virtual int capabilities() const
Returns a bitmask containing the supported capabilities.
QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext) override
Returns new instance of QgsMapLayerRenderer that will be used for rendering of given context.
void showStatusMessage(const QString &message)
QgsRasterDataProviderTemporalCapabilities * temporalCapabilities() override
Returns the provider's temporal capabilities.
void setMaxOversampling(double os)
void setPassword(const QString &password)
Sets the password for the URI.
QgsRectangle mDrawnExtent
Intersection of current map extent and layer extent.
int statsGathered
Collected statistics.
Base class for raster data providers.
virtual void setLayerOrder(const QStringList &layers)
Reorder the list of layer names to be rendered by this provider (in order from bottom to top)
QgsRasterMinMaxOrigin::Limits limits() const
Returns the raster limits.
void setZoomedOutResampler(QgsRasterResampler *r)
Sets resampler for zoomed out scales. Takes ownership of the object.
QgsRasterDataProvider * dataProvider() override
Returns the source data provider.
QgsRasterLayer()
Constructor. Provider is not set.
virtual bool isValid() const =0
Returns true if this is a valid layer.
bool writeSld(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QVariantMap &props=QVariantMap()) const
Writes the symbology of the layer into the document provided in SLD 1.0.0 format.
double cumulativeCutUpper() const
Returns the upper bound of cumulative cut method (between 0 and 1).
@ ContinuousPalette
Continuous palette, QGIS addition, GRASS.
double rasterUnitsPerPixelX() const
Returns the number of raster units per each raster pixel in X axis.
const QgsPathResolver & pathResolver() const
Returns path resolver for conversion between relative and absolute paths.
virtual QgsCoordinateReferenceSystem crs() const =0
Returns the coordinate system for the data source.
virtual QgsError error() const
Gets current status error.
static QgsRectangle readRectangle(const QDomElement &element)
@ IdentifyFormatUndefined
void readXml(const QDomElement &filterElem) override
Sets base class members from xml. Usually called from create() methods of subclasses.