31#include "qgsgdalprovider.h"
72#include <QApplication>
80#include <QFontMetrics>
87#include <QRegularExpression>
91#include "moc_qgsrasterlayer.cpp"
96#define ERR(message) QGS_ERROR_MESSAGE(message,"Raster layer")
116 , QSTRING_NOT_SET( QStringLiteral(
"Not Set" ) )
117 , TRSTRING_NOT_SET( tr(
"Not Set" ) )
127 const QString &baseName,
128 const QString &providerKey,
132 , QSTRING_NOT_SET( QStringLiteral(
"Not Set" ) )
133 , TRSTRING_NOT_SET( tr(
"Not Set" ) )
150 setDataSource( uri, baseName, providerKey, providerOptions, providerFlags );
154 mTemporalProperties->setDefaultsFromDataProviderTemporalCapabilities( mDataProvider->temporalCapabilities() );
176 options.transformContext = mDataProvider->transformContext();
180 layer->mElevationProperties = mElevationProperties->clone();
181 layer->mElevationProperties->setParent( layer.get() );
186 for (
int i = 1; i < mPipe->size(); i++ )
188 if ( mPipe->at( i ) )
189 layer->pipe()->set( mPipe->at( i )->clone() );
191 layer->pipe()->setDataDefinedProperties( mPipe->dataDefinedProperties() );
192 layer->setResamplingStage( mPipe->resamplingStage() );
193 if ( mDataProvider && layer->dataProvider() )
195 layer->dataProvider()->setZoomedInResamplingMethod( mDataProvider->zoomedInResamplingMethod() );
196 layer->dataProvider()->setZoomedOutResamplingMethod( mDataProvider->zoomedOutResamplingMethod() );
199 layer->setLabelsEnabled( mLabelsEnabled );
201 layer->setLabeling( mLabeling->clone() );
203 return layer.release();
210 if ( !mElevationProperties->isEnabled() )
224 const bool myIsValid = QgsGdalProvider::isValidRasterFileName( fileNameQString, retErrMsg );
239 const QFileInfo fi(
name );
245 t = fi.lastModified();
272 if ( !mDataProvider )
return 0;
273 return mDataProvider->bandCount();
280 if ( !mDataProvider )
return QString();
281 return mDataProvider->generateBandName( bandNo );
288 if ( !mDataProvider )
290 return mDataProvider->attributeTable( bandNoInt );
297 if ( !mDataProvider )
301 for (
int bandNo = 1; bandNo <=
bandCount(); ++bandNo )
329 return mDataProvider;
336 return mDataProvider;
345 mDataProvider->reloadData();
374 bool restoreOldResamplingStage =
false;
382 if ( mDataProvider &&
387 restoreOldResamplingStage =
true;
396 drawer.
draw( theQPainter, rasterViewPort, qgsMapToPixel );
398 if ( restoreOldResamplingStage )
403 QgsDebugMsgLevel( QStringLiteral(
"total raster draw time (ms): %1" ).arg( time.elapsed(), 5 ), 4 );
411 return renderer ?
renderer->legendSymbologyItems() : QList< QPair< QString, QColor > >();;
418 if ( !mDataProvider )
422 QString myMetadata = QStringLiteral(
"<html><head></head>\n<body>\n" );
427 myMetadata += QStringLiteral(
"<h1>" ) + tr(
"Information from provider" ) + QStringLiteral(
"</h1>\n<hr>\n" ) + QStringLiteral(
"<table class=\"list-view\">\n" );
429 myMetadata += QStringLiteral(
"\n" ) %
431 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Extent" ) % QStringLiteral(
"</td><td>" ) %
extent().
toString() % QStringLiteral(
"</td></tr>\n" ) %
434 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Width" ) % QStringLiteral(
"</td><td>" );
436 myMetadata += QString::number(
width() );
438 myMetadata += tr(
"n/a" );
439 myMetadata += QStringLiteral(
"</td></tr>\n" ) %
442 QStringLiteral(
"<tr><td class=\"highlight\">" ) + tr(
"Height" ) + QStringLiteral(
"</td><td>" );
444 myMetadata += QString::number(
height() );
446 myMetadata += tr(
"n/a" );
447 myMetadata += QStringLiteral(
"</td></tr>\n" ) %
450 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Data type" ) % QStringLiteral(
"</td><td>" );
452 switch ( mDataProvider->sourceDataType( 1 ) )
455 myMetadata += tr(
"Byte - Eight bit unsigned integer" );
458 myMetadata += tr(
"Int8 - Eight bit signed integer" );
461 myMetadata += tr(
"UInt16 - Sixteen bit unsigned integer " );
464 myMetadata += tr(
"Int16 - Sixteen bit signed integer " );
467 myMetadata += tr(
"UInt32 - Thirty two bit unsigned integer " );
470 myMetadata += tr(
"Int32 - Thirty two bit signed integer " );
473 myMetadata += tr(
"Float32 - Thirty two bit floating point " );
476 myMetadata += tr(
"Float64 - Sixty four bit floating point " );
479 myMetadata += tr(
"CInt16 - Complex Int16 " );
482 myMetadata += tr(
"CInt32 - Complex Int32 " );
485 myMetadata += tr(
"CFloat32 - Complex Float32 " );
488 myMetadata += tr(
"CFloat64 - Complex Float64 " );
491 myMetadata += tr(
"Could not determine raster data type." );
493 myMetadata += QStringLiteral(
"</td></tr>\n" ) %
496 mDataProvider->htmlMetadata() %
499 QStringLiteral(
"</table>\n<br><br>" );
505 myMetadata += QStringLiteral(
"<h1>" ) % tr(
"Identification" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
507 QStringLiteral(
"<br><br>\n" ) %
510 QStringLiteral(
"<h1>" ) % tr(
"Extent" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
512 QStringLiteral(
"<br><br>\n" ) %
515 QStringLiteral(
"<h1>" ) % tr(
"Access" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
517 QStringLiteral(
"<br><br>\n" ) %
520 QStringLiteral(
"</table>\n<br><br><h1>" ) % tr(
"Bands" ) % QStringLiteral(
"</h1>\n<hr>\n<table class=\"list-view\">\n" ) %
523 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Band count" ) % QStringLiteral(
"</td><td>" ) % QString::number(
bandCount() ) % QStringLiteral(
"</td></tr>\n" );
526 myMetadata += QStringLiteral(
"</table>\n<br><table width=\"100%\" class=\"tabular-view\">\n" ) %
527 QStringLiteral(
"<tr><th>" ) % tr(
"Number" ) % QStringLiteral(
"</th><th>" ) % tr(
"Band" ) % QStringLiteral(
"</th><th>" ) % tr(
"NoData" ) % QStringLiteral(
"</th><th>" ) %
528 tr(
"Min" ) % QStringLiteral(
"</th><th>" ) % tr(
"Max" ) % QStringLiteral(
"</th></tr>\n" );
535 rowClass = QStringLiteral(
"class=\"odd-row\"" );
537 myMetadata += QStringLiteral(
"<tr " ) % rowClass % QStringLiteral(
"><td>" ) % QString::number( i ) % QStringLiteral(
"</td><td>" ) %
bandName( i ) % QStringLiteral(
"</td><td>" );
540 myMetadata += QString::number(
dataProvider()->sourceNoDataValue( i ) );
542 myMetadata += tr(
"n/a" );
543 myMetadata += QLatin1String(
"</td>" );
548 myMetadata += QStringLiteral(
"<td>" ) % QString::number( myRasterBandStats.
minimumValue,
'f', 10 ) % QStringLiteral(
"</td>" ) %
549 QStringLiteral(
"<td>" ) % QString::number( myRasterBandStats.
maximumValue,
'f', 10 ) % QStringLiteral(
"</td>" );
553 myMetadata += QStringLiteral(
"<td>" ) % tr(
"n/a" ) % QStringLiteral(
"</td><td>" ) % tr(
"n/a" ) % QStringLiteral(
"</td>" );
556 myMetadata += QLatin1String(
"</tr>\n" );
560 myMetadata += QStringLiteral(
"</table>\n<br><br>" ) %
563 QStringLiteral(
"<h1>" ) % tr(
"Contacts" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
565 QStringLiteral(
"<br><br>\n" ) %
568 QStringLiteral(
"<h1>" ) % tr(
"References" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
570 QStringLiteral(
"<br><br>\n" ) %
573 QStringLiteral(
"<h1>" ) % tr(
"History" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
575 QStringLiteral(
"<br><br>\n" ) %
577 QStringLiteral(
"\n</body>\n</html>\n" );
602 if ( mDataProvider &&
607 const QList<QgsColorRampShader::ColorRampItem> myColorRampItemList = mDataProvider->colorTable( bandNumber );
608 if ( !myColorRampItemList.isEmpty() )
614 const int mySize = 100;
615 QPixmap myPalettePixmap( mySize, mySize );
616 QPainter myQPainter( &myPalettePixmap );
618 QImage myQImage = QImage( mySize, mySize, QImage::Format_RGB32 );
620 myPalettePixmap.fill();
622 const double myStep = (
static_cast< double >( myColorRampItemList.size() ) - 1 ) /
static_cast< double >( mySize * mySize );
623 double myValue = 0.0;
624 for (
int myRow = 0; myRow < mySize; myRow++ )
626 QRgb *myLineBuffer =
reinterpret_cast< QRgb *
>( myQImage.scanLine( myRow ) );
627 for (
int myCol = 0; myCol < mySize; myCol++ )
629 myValue = myStep *
static_cast< double >( myCol + myRow * mySize );
631 myShader.
shade( myValue, &c1, &c2, &c3, &c4 );
632 myLineBuffer[ myCol ] = qRgba( c1, c2, c3, c4 );
636 myQPainter.drawImage( 0, 0, myQImage );
637 return myPalettePixmap;
639 const QPixmap myNullPixmap;
645 const QPixmap myNullPixmap;
660 if ( mDataProvider &&
663 return mDataProvider->extent().width() / mDataProvider->xSize();
672 if ( mDataProvider &&
675 return mDataProvider->extent().height() / mDataProvider->ySize();
684 if ( !mPipe->renderer() || mPipe->renderer()->opacity() ==
opacity )
687 mPipe->renderer()->setOpacity(
opacity );
696 return mPipe->renderer() ? mPipe->renderer()->opacity() : 1.0;
699void QgsRasterLayer::init()
722 mPipe = std::make_unique< QgsRasterPipe >();
723 mDataProvider =
nullptr;
739 mDataProvider = qobject_cast< QgsRasterDataProvider * >(
mPreloadedProvider.release() );
743 std::unique_ptr< QgsScopedRuntimeProfile > profile;
745 profile = std::make_unique< QgsScopedRuntimeProfile >( tr(
"Create %1 provider" ).arg( provider ), QStringLiteral(
"projectload" ) );
750 if ( !mDataProvider )
757 mDataProvider->setParent(
this );
760 if ( !mPipe->set( mDataProvider ) )
763 mDataProvider =
nullptr;
768 if ( !mDataProvider->isValid() )
778 QgsDebugMsgLevel( QStringLiteral(
"Set Data provider QgsLayerMetadata identifier[%1]" ).arg(
metadata().identifier() ), 4 );
781 if ( provider == QLatin1String(
"gdal" ) )
812 QgsDebugMsgLevel(
"bandCount = " + QString::number( mDataProvider->bandCount() ), 4 );
814 const int bandCount = mDataProvider->bandCount();
867 QString errorMessage;
868 bool hasRat { mDataProvider->readNativeAttributeTable( &errorMessage ) };
871 errorMessage.clear();
872 QgsDebugMsgLevel(
"Native Raster Raster Attribute Table read failed " + errorMessage, 2 );
873 if ( QFile::exists( mDataProvider->dataSourceUri( ) +
".vat.dbf" ) )
875 auto rat = std::make_unique<QgsRasterAttributeTable>();
876 hasRat = rat->readFromFile( mDataProvider->dataSourceUri( ) +
".vat.dbf", &errorMessage );
879 if ( rat->isValid( &errorMessage ) )
881 mDataProvider->setAttributeTable( 1, rat.release() );
882 QgsDebugMsgLevel(
"DBF Raster Attribute Table successfully read from " + mDataProvider->dataSourceUri( ) +
".vat.dbf", 2 );
886 QgsDebugMsgLevel(
"DBF Raster Attribute Table is not valid, skipping: " + errorMessage, 2 );
891 QgsDebugMsgLevel(
"DBF Raster Attribute Table read failed " + errorMessage, 2 );
900 switch ( mRasterType )
918 const QList<QgsColorRampShader::ColorRampItem> colorTable = mDataProvider->colorTable( 1 );
950 for (
int bandNo = 1; bandNo <= mDataProvider->bandCount(); bandNo++ )
954 if (
auto *lRenderer = mPipe->renderer() )
956 lRenderer->setAlphaBand( bandNo );
975 QString resampling = settings.
value( QStringLiteral(
"/Raster/defaultZoomedInResampling" ), QStringLiteral(
"nearest neighbour" ) ).toString();
976 if ( resampling == QLatin1String(
"bilinear" ) )
981 else if ( resampling == QLatin1String(
"cubic" ) )
986 resampling = settings.
value( QStringLiteral(
"/Raster/defaultZoomedOutResampling" ), QStringLiteral(
"nearest neighbour" ) ).toString();
987 if ( resampling == QLatin1String(
"bilinear" ) )
995 mDataProvider->setMaxOversampling( maxOversampling );
1010 mPipe->set( projector );
1038 mElevationProperties->setEnabled(
true );
1052 if ( mDataProvider->supportsSubsetString() )
1062void QgsRasterLayer::setDataSourcePrivate(
const QString &dataSource,
const QString &baseName,
const QString &provider,
1067 const bool hadRenderer(
renderer() );
1069 QDomImplementation domImplementation;
1070 QDomDocumentType documentType;
1073 bool loadDefaultStyleFlag =
false;
1076 loadDefaultStyleFlag =
true;
1080 if ( hadRenderer && ! loadDefaultStyleFlag )
1082 documentType = domImplementation.createDocumentType(
1083 QStringLiteral(
"qgis" ), QStringLiteral(
"http://mrcc.com/qgis.dtd" ), QStringLiteral(
"SYSTEM" ) );
1085 QDomDocument doc = QDomDocument( documentType );
1086 QDomElement styleElem = doc.createElement( QStringLiteral(
"qgis" ) );
1087 styleElem.setAttribute( QStringLiteral(
"version" ),
Qgis::version() );
1088 const QgsReadWriteContext writeContext;
1089 if ( !
writeSymbology( styleElem, doc, errorMsg, writeContext ) )
1091 QgsDebugError( QStringLiteral(
"Could not store symbology for layer %1: %2" )
1097 doc.appendChild( styleElem );
1099 mOriginalStyleDocument = doc;
1100 mOriginalStyleElement = styleElem;
1104 if ( mDataProvider )
1105 closeDataProvider();
1109 for (
int i = mPipe->size() - 1; i >= 0; --i )
1119 if ( mDataProvider )
1125 bool defaultLoadedFlag =
false;
1126 bool restoredStyle =
false;
1127 if ( loadDefaultStyleFlag )
1131 else if ( !mOriginalStyleElement.isNull() )
1133 QgsReadWriteContext readContext;
1134 if ( !
readSymbology( mOriginalStyleElement, errorMsg, readContext ) )
1136 QgsDebugError( QStringLiteral(
"Could not restore symbology for layer %1: %2" )
1143 restoredStyle =
true;
1150 if ( !defaultLoadedFlag && !restoredStyle )
1157void QgsRasterLayer::writeRasterAttributeTableExternalPaths( QDomNode &layerNode, QDomDocument &doc,
const QgsReadWriteContext &context )
const
1163 QDomElement elem = doc.createElement( QStringLiteral(
"FileBasedAttributeTables" ) );
1164 for (
int bandNo = 1; bandNo <=
bandCount(); bandNo++ )
1168 QDomElement ratElem = doc.createElement( QStringLiteral(
"AttributeTable" ) );
1169 ratElem.setAttribute( QStringLiteral(
"band" ), bandNo );
1170 ratElem.setAttribute( QStringLiteral(
"path" ), context.
pathResolver().
writePath( rat->filePath( ) ) );
1171 elem.appendChild( ratElem );
1174 layerNode.appendChild( elem );
1178void QgsRasterLayer::readRasterAttributeTableExternalPaths(
const QDomNode &layerNode,
QgsReadWriteContext &context )
const
1180 const QDomElement ratsElement = layerNode.firstChildElement( QStringLiteral(
"FileBasedAttributeTables" ) );
1181 if ( !ratsElement.isNull() && ratsElement.childNodes().count() > 0 )
1183 const QDomNodeList ratElements { ratsElement.childNodes() };
1184 for (
int idx = 0; idx < ratElements.count(); idx++ )
1186 const QDomNode ratElement { ratElements.at( idx ) };
1187 if ( ratElement.attributes().contains( QStringLiteral(
"band" ) )
1188 && ratElement.attributes().contains( QStringLiteral(
"path" ) ) )
1191 const int band { ratElement.attributes().namedItem( QStringLiteral(
"band" ) ).nodeValue().toInt( &ok ) };
1194 if ( ! ok || band <= 0 || band >
bandCount() )
1196 QgsMessageLog::logMessage( tr(
"Error reading raster attribute table: invalid band %1." ).arg( band ), tr(
"Raster" ) );
1200 const QString path { context.
pathResolver().
readPath( ratElement.attributes().namedItem( QStringLiteral(
"path" ) ).nodeValue() ) };
1201 if ( ! QFile::exists( path ) )
1203 QgsMessageLog::logMessage( tr(
"Error loading raster attribute table, file not found: %1." ).arg( path ), tr(
"Raster" ) );
1207 auto rat = std::make_unique<QgsRasterAttributeTable>();
1208 QString errorMessage;
1209 if ( ! rat->readFromFile( path, &errorMessage ) )
1211 QgsMessageLog::logMessage( tr(
"Error loading raster attribute table from path %1: %2" ).arg( path, errorMessage ), tr(
"Raster" ) );
1216 mDataProvider->setAttributeTable( band, rat.release() );
1222void QgsRasterLayer::closeDataProvider()
1227 mPipe->remove( mDataProvider );
1228 mDataProvider =
nullptr;
1236 double &min,
double &max )
1240 min = std::numeric_limits<double>::quiet_NaN();
1241 max = std::numeric_limits<double>::quiet_NaN();
1242 if ( !mDataProvider )
1252 switch ( mDataProvider->dataType( band ) )
1262 myRasterBandStats.
minimumValue = std::numeric_limits<int8_t>::lowest();
1263 myRasterBandStats.
maximumValue = std::numeric_limits<int8_t>::max();
1269 myRasterBandStats.
maximumValue = std::numeric_limits<uint16_t>::max();
1275 myRasterBandStats.
maximumValue = std::numeric_limits<uint32_t>::max();
1281 myRasterBandStats.
minimumValue = std::numeric_limits<int16_t>::lowest();
1282 myRasterBandStats.
maximumValue = std::numeric_limits<int16_t>::max();
1288 myRasterBandStats.
minimumValue = std::numeric_limits<int32_t>::lowest();
1289 myRasterBandStats.
maximumValue = std::numeric_limits<int32_t>::max();
1295 myRasterBandStats.
minimumValue = std::numeric_limits<float_t>::lowest();
1296 myRasterBandStats.
maximumValue = std::numeric_limits<float_t>::max();
1302 myRasterBandStats.
minimumValue = std::numeric_limits<double_t>::lowest();
1303 myRasterBandStats.
maximumValue = std::numeric_limits<double_t>::max();
1328 QgsDebugMsgLevel( QStringLiteral(
"myLower = %1 myUpper = %2" ).arg( myLower ).arg( myUpper ), 4 );
1329 mDataProvider->cumulativeCut( band, myLower, myUpper, min, max,
extent, sampleSize );
1331 QgsDebugMsgLevel( QStringLiteral(
"band = %1 min = %2 max = %3" ).arg( band ).arg( min ).arg( max ), 4 );
1339 return mDataProvider ? mDataProvider->ignoreExtents() :
false;
1346 return mTemporalProperties;
1353 return mElevationProperties;
1364 generateLookupTableFlag,
1365 mPipe->renderer() );
1372 bool generateLookupTableFlag,
1378 if ( !rasterRenderer || !mDataProvider )
1384 QList<QgsContrastEnhancement *> myEnhancements;
1385 QgsRasterMinMaxOrigin myMinMaxOrigin;
1386 QgsRasterRenderer *myRasterRenderer =
nullptr;
1387 QgsSingleBandGrayRenderer *myGrayRenderer =
nullptr;
1388 QgsSingleBandPseudoColorRenderer *myPseudoColorRenderer =
nullptr;
1389 QgsMultiBandColorRenderer *myMultiBandRenderer =
nullptr;
1390 const QString rendererType = rasterRenderer->
type();
1391 if ( rendererType == QLatin1String(
"singlebandgray" ) )
1393 myGrayRenderer =
dynamic_cast<QgsSingleBandGrayRenderer *
>( rasterRenderer );
1394 if ( !myGrayRenderer )
1399 myRasterRenderer = myGrayRenderer;
1402 else if ( rendererType == QLatin1String(
"multibandcolor" ) )
1404 myMultiBandRenderer =
dynamic_cast<QgsMultiBandColorRenderer *
>( rasterRenderer );
1405 if ( !myMultiBandRenderer )
1410 myRasterRenderer = myMultiBandRenderer;
1413 else if ( rendererType == QLatin1String(
"singlebandpseudocolor" ) )
1415 myPseudoColorRenderer =
dynamic_cast<QgsSingleBandPseudoColorRenderer *
>( rasterRenderer );
1416 if ( !myPseudoColorRenderer )
1420 myBands << myPseudoColorRenderer->
inputBand();
1421 myRasterRenderer = myPseudoColorRenderer;
1422 myMinMaxOrigin = myPseudoColorRenderer->
minMaxOrigin();
1429 for (
const int myBand : std::as_const( myBands ) )
1434 auto myEnhancement = std::make_unique<QgsContrastEnhancement>(
static_cast< Qgis::DataType >( myType ) );
1435 myEnhancement->setContrastEnhancementAlgorithm(
algorithm, generateLookupTableFlag );
1441 if ( rendererType == QLatin1String(
"singlebandpseudocolor" ) )
1444 if ( ! myPseudoColorRenderer )
1452 bool minMaxChanged {
false };
1453 if ( ! std::isnan( min ) )
1456 minMaxChanged =
true;
1459 if ( ! std::isnan( max ) )
1462 minMaxChanged =
true;
1465 if ( minMaxChanged && myPseudoColorRenderer->
shader() )
1467 QgsColorRampShader *colorRampShader =
dynamic_cast<QgsColorRampShader *
>( myPseudoColorRenderer->
shader()->rasterShaderFunction() );
1468 if ( colorRampShader )
1476 myEnhancement->setMinimumValue( min );
1477 myEnhancement->setMaximumValue( max );
1478 myEnhancements.append( myEnhancement.release() );
1483 myEnhancements.append(
nullptr );
1488 if ( rendererType == QLatin1String(
"singlebandgray" ) && myGrayRenderer )
1492 else if ( rendererType == QLatin1String(
"multibandcolor" ) && myMultiBandRenderer )
1500 qDeleteAll( myEnhancements );
1503 if (
extent != QgsRectangle() &&
1508 if ( myRasterRenderer )
1513 if ( rasterRenderer ==
renderer() )
1530 ce = singleBandRenderer->contrastEnhancement();
1568 if ( !
isValid() || !mDataProvider )
1570 QgsDebugMsgLevel( QStringLiteral(
"invoked with invalid layer or null mDataProvider" ), 3 );
1571 return customProperty( QStringLiteral(
"storedSubsetString" ) ).toString();
1573 if ( !mDataProvider->supportsSubsetString() )
1577 return mDataProvider->subsetString();
1584 if ( !
isValid() || !mDataProvider )
1586 QgsDebugMsgLevel( QStringLiteral(
"invoked with invalid layer or null mDataProvider or while editing" ), 3 );
1591 if ( !mDataProvider->supportsSubsetString() )
1596 if ( subset == mDataProvider->subsetString() )
1599 const bool res = mDataProvider->setSubsetString( subset );
1607 QList<double> minValues;
1608 QList<double> maxValues;
1610 for (
const int bandIdx :
renderer()->usesBands() )
1618 minValues.append( min );
1619 maxValues.append( max );
1638 QString defaultLimits;
1643 key = QStringLiteral(
"singleBand" );
1653 key = QStringLiteral(
"multiBandSingleByte" );
1661 key = QStringLiteral(
"multiBandMultiByte" );
1669 if ( key.isEmpty() )
1671 QgsDebugMsgLevel( QStringLiteral(
"No default contrast enhancement for this drawing style" ), 2 );
1678 const QString myAlgorithmString = mySettings.value(
"/Raster/defaultContrastEnhancementAlgorithm/" + key, defaultAlg ).toString();
1683 const QString myLimitsString = mySettings.value(
"/Raster/defaultContrastEnhancementLimits/" + key, defaultLimits ).toString();
1709 if ( mDataProvider )
1711 QgsDebugMsgLevel( QStringLiteral(
"About to mDataProvider->setLayerOrder(layers)." ), 4 );
1712 mDataProvider->setLayerOrder( layers );
1721 if ( mDataProvider )
1723 QgsDebugMsgLevel( QStringLiteral(
"About to mDataProvider->setSubLayerVisibility(name, vis)." ), 4 );
1724 mDataProvider->setSubLayerVisibility(
name, vis );
1732 if ( !mDataProvider )
1734 return mDataProvider->timestamp();
1741 if (
auto *lRenderer = mPipe->renderer() )
1743 if ( !lRenderer->accept( visitor ) )
1753 return mLabelsEnabled &&
static_cast< bool >( mLabeling );
1760 mLabelsEnabled = enabled;
1767 return mLabeling.get();
1774 return mLabeling.get();
1792 context.setExtraProperties( props );
1812 QDomElement constraintElem = doc.createElement( QStringLiteral(
"sld:LayerFeatureConstraints" ) );
1813 node.appendChild( constraintElem );
1815 const QDomElement featureTypeConstraintElem = doc.createElement( QStringLiteral(
"sld:FeatureTypeConstraint" ) );
1816 constraintElem.appendChild( featureTypeConstraintElem );
1818 QDomElement userStyleElem = doc.createElement( QStringLiteral(
"sld:UserStyle" ) );
1819 node.appendChild( userStyleElem );
1821 if ( !
name().isEmpty() )
1823 QDomElement nameElem = doc.createElement( QStringLiteral(
"sld:Name" ) );
1824 nameElem.appendChild( doc.createTextNode(
name() ) );
1825 userStyleElem.appendChild( nameElem );
1831 QDomElement abstractElem = doc.createElement( QStringLiteral(
"sld:Abstract" ) );
1832 abstractElem.appendChild( doc.createTextNode(
abstract ) );
1833 userStyleElem.appendChild( abstractElem );
1837 if ( !
title.isEmpty() )
1839 QDomElement titleElem = doc.createElement( QStringLiteral(
"sld:Title" ) );
1840 titleElem.appendChild( doc.createTextNode(
title ) );
1841 userStyleElem.appendChild( titleElem );
1844 QDomElement featureTypeStyleElem = doc.createElement( QStringLiteral(
"sld:FeatureTypeStyle" ) );
1845 userStyleElem.appendChild( featureTypeStyleElem );
1855 QDomElement typeStyleNameElem = doc.createElement( QStringLiteral(
"sld:Name" ) );
1856 featureTypeStyleElem.appendChild( typeStyleNameElem );
1859 QDomElement typeStyleRuleElem = doc.createElement( QStringLiteral(
"sld:Rule" ) );
1860 featureTypeStyleElem.appendChild( typeStyleRuleElem );
1868 QDomElement minScaleElem = doc.createElement( QStringLiteral(
"sld:MinScaleDenominator" ) );
1869 minScaleElem.appendChild( doc.createTextNode( QString::number(
maximumScale() ) ) );
1870 typeStyleRuleElem.appendChild( minScaleElem );
1873 QDomElement maxScaleElem = doc.createElement( QStringLiteral(
"sld:MaxScaleDenominator" ) );
1874 maxScaleElem.appendChild( doc.createTextNode( QString::number(
minimumScale() ) ) );
1875 typeStyleRuleElem.appendChild( maxScaleElem );
1879 mPipe->renderer()->toSld( doc, typeStyleRuleElem, context );
1884 const QDomNodeList elements = typeStyleRuleElem.elementsByTagName( QStringLiteral(
"sld:RasterSymbolizer" ) );
1885 if ( elements.size() != 0 )
1888 QDomElement rasterSymbolizerElem = elements.at( 0 ).toElement();
1891 auto vendorOptionWriter = [&]( QString
name, QString value )
1893 QDomElement vendorOptionElem = doc.createElement( QStringLiteral(
"sld:VendorOption" ) );
1894 vendorOptionElem.setAttribute( QStringLiteral(
"name" ),
name );
1895 vendorOptionElem.appendChild( doc.createTextNode( value ) );
1896 rasterSymbolizerElem.appendChild( vendorOptionElem );
1901 vendorOptionWriter( QStringLiteral(
"invertColors" ), QString::number( 1 ) );
1911 property = QStringLiteral(
"lightness" );
1914 property = QStringLiteral(
"luminosity" );
1917 property = QStringLiteral(
"average" );
1923 if ( !property.isEmpty() )
1924 vendorOptionWriter( QStringLiteral(
"grayScale" ), property );
1930 vendorOptionWriter( QStringLiteral(
"colorizeOn" ), QString::number(
hueSaturationFilter()->colorizeOn() ) );
1931 vendorOptionWriter( QStringLiteral(
"colorizeRed" ), QString::number(
hueSaturationFilter()->colorizeColor().red() ) );
1932 vendorOptionWriter( QStringLiteral(
"colorizeGreen" ), QString::number(
hueSaturationFilter()->colorizeColor().green() ) );
1933 vendorOptionWriter( QStringLiteral(
"colorizeBlue" ), QString::number(
hueSaturationFilter()->colorizeColor().blue() ) );
1935 vendorOptionWriter( QStringLiteral(
"colorizeStrength" ), QString::number(
hueSaturationFilter()->colorizeStrength() / 100.0 ) );
1936 vendorOptionWriter( QStringLiteral(
"saturation" ), QString::number(
hueSaturationFilter()->colorizeColor().saturationF() ) );
1945 const double sF = ( s - ( -100.0 ) ) / ( 100.0 - ( -100.0 ) );
1946 vendorOptionWriter( QStringLiteral(
"saturation" ), QString::number( sF ) );
1955 const double bF = ( b - ( -255.0 ) ) / ( 255.0 - ( -255.0 ) );
1956 vendorOptionWriter( QStringLiteral(
"brightness" ), QString::number( bF ) );
1964 const double cF = (
c - ( -100.0 ) ) / ( 100.0 - ( -100.0 ) );
1965 vendorOptionWriter( QStringLiteral(
"contrast" ), QString::number( cF ) );
1978 if ( newProps.contains( QStringLiteral(
"contrast" ) ) )
1981 double contrast = newProps[ QStringLiteral(
"contrast" ) ].toDouble();
1982 double percentage = ( contrast - ( -100.0 ) ) / ( 100.0 - ( -100.0 ) );
1983 if ( percentage <= 0.5 )
1986 gamma = percentage / 0.5;
1993 QDomElement globalContrastEnhancementElem = doc.createElement( QStringLiteral(
"sld:ContrastEnhancement" ) );
1994 rasterSymolizerElem.appendChild( globalContrastEnhancementElem );
1996 QDomElement gammaValueElem = doc.createElement( QStringLiteral(
"sld:GammaValue" ) );
1997 gammaValueElem.appendChild( doc.createTextNode( QString::number( gamma ) ) );
1998 globalContrastEnhancementElem.appendChild( gammaValueElem );
2025 return mPipe->renderer();
2032 return mPipe->resampleFilter();
2039 return mPipe->brightnessFilter();
2046 return mPipe->hueSaturationFilter();
2064 if ( mDataProvider )
2073 if ( ! mDataProvider )
2074 return QStringList();
2075 return mDataProvider->subLayers();
2084 QImage image( size, format );
2089 if ( image.format() == QImage::Format_Indexed8 )
2091 image.setColor( 0, bgColor.rgba() );
2096 image.fill( bgColor );
2101 double mapUnitsPerPixel;
2105 if (
extent.width() /
extent.height() >=
static_cast< double >( image.width() ) / image.height() )
2107 mapUnitsPerPixel =
extent.width() / image.width();
2108 y = ( image.height() -
extent.height() / mapUnitsPerPixel ) / 2;
2112 mapUnitsPerPixel =
extent.height() / image.height();
2113 x = ( image.width() -
extent.width() / mapUnitsPerPixel ) / 2;
2116 const double pixelWidth =
extent.width() / mapUnitsPerPixel;
2117 const double pixelHeight =
extent.height() / mapUnitsPerPixel;
2121 rasterViewPort->
mWidth = image.width();
2122 rasterViewPort->
mHeight = image.height();
2130 QPainter *painter =
new QPainter( &image );
2131 draw( painter, rasterViewPort, mapToPixel );
2132 delete rasterViewPort;
2146 Q_UNUSED( errorMessage )
2149 QDomElement rasterRendererElem;
2151 const QDomElement layerElement = layer_node.toElement();
2161 QDomNode pipeNode = layer_node.firstChildElement( QStringLiteral(
"pipe" ) );
2162 if ( pipeNode.isNull() )
2164 pipeNode = layer_node;
2168 if ( !layer_node.firstChildElement( QStringLiteral(
"rasterproperties" ) ).isNull() )
2171 QDomNode layerNodeCopy = layer_node.cloneNode();
2172 QDomDocument doc = layerNodeCopy.ownerDocument();
2173 QDomElement rasterPropertiesElem = layerNodeCopy.firstChildElement( QStringLiteral(
"rasterproperties" ) );
2176 rasterRendererElem = layerNodeCopy.firstChildElement( QStringLiteral(
"rasterrenderer" ) );
2181 rasterRendererElem = pipeNode.firstChildElement( QStringLiteral(
"rasterrenderer" ) );
2184 if ( !rasterRendererElem.isNull() )
2186 const QString rendererType = rasterRendererElem.attribute( QStringLiteral(
"type" ) );
2199 const QDomElement brightnessElem = pipeNode.firstChildElement( QStringLiteral(
"brightnesscontrast" ) );
2200 if ( !brightnessElem.isNull() )
2210 const QDomElement hueSaturationElem = pipeNode.firstChildElement( QStringLiteral(
"huesaturation" ) );
2211 if ( !hueSaturationElem.isNull() )
2221 const QDomElement resampleElem = pipeNode.firstChildElement( QStringLiteral(
"rasterresampler" ) );
2222 if ( !resampleElem.isNull() )
2229 if ( mDataProvider )
2231 const QDomElement providerElem = pipeNode.firstChildElement( QStringLiteral(
"provider" ) );
2232 if ( !providerElem.isNull() )
2234 mDataProvider->readXml( providerElem );
2239 const QDomNode resamplingStageElement = pipeNode.namedItem( QStringLiteral(
"resamplingStage" ) );
2240 if ( !resamplingStageElement.isNull() )
2242 const QDomElement e = resamplingStageElement.toElement();
2243 if ( e.text() == QLatin1String(
"provider" ) )
2245 else if ( e.text() == QLatin1String(
"resamplingFilter" ) )
2250 const QDomNode blendModeNode = layer_node.namedItem( QStringLiteral(
"blendMode" ) );
2251 if ( !blendModeNode.isNull() )
2253 const QDomElement e = blendModeNode.toElement();
2257 const QDomElement elemDataDefinedProperties = layer_node.firstChildElement( QStringLiteral(
"pipe-data-defined-properties" ) );
2258 if ( !elemDataDefinedProperties.isNull() )
2263 if ( categories.testFlag(
Labeling ) )
2267 QDomElement labelingElement = layer_node.firstChildElement( QStringLiteral(
"labeling" ) );
2268 if ( !labelingElement.isNull() )
2271 mLabelsEnabled = layer_node.toElement().attribute( QStringLiteral(
"labelsEnabled" ), QStringLiteral(
"0" ) ).toInt();
2276 if ( categories.testFlag(
MapTips ) )
2278 QDomElement mapTipElem = layer_node.namedItem( QStringLiteral(
"mapTip" ) ).toElement();
2280 setMapTipsEnabled( mapTipElem.attribute( QStringLiteral(
"enabled" ), QStringLiteral(
"1" ) ).toInt() == 1 );
2286 readRasterAttributeTableExternalPaths( layer_node, context );
2289 if ( categories.testFlag(
Legend ) )
2293 const QDomElement legendElem = layer_node.firstChildElement( QStringLiteral(
"legend" ) );
2295 if ( rasterLegend && !legendElem.isNull() )
2297 rasterLegend->
readXml( legendElem, context );
2299 else if ( rasterLegend )
2316 return readSymbology( node, errorMessage, context, categories );
2327 const QDomNode pkeyNode = layer_node.namedItem( QStringLiteral(
"provider" ) );
2329 if ( pkeyNode.isNull() )
2335 const QDomElement pkeyElt = pkeyNode.toElement();
2349 const QDomNode rpNode = layer_node.namedItem( QStringLiteral(
"rasterproperties" ) );
2355 if ( !
mDataSource.contains( QLatin1String(
"crs=" ) ) && !
mDataSource.contains( QLatin1String(
"format=" ) ) )
2357 QgsDebugMsgLevel( QStringLiteral(
"Old WMS URI format detected -> adding params" ), 4 );
2360 QDomElement layerElement = rpNode.firstChildElement( QStringLiteral(
"wmsSublayer" ) );
2361 while ( !layerElement.isNull() )
2366 uri.
setParam( QStringLiteral(
"layers" ), layerElement.namedItem( QStringLiteral(
"name" ) ).toElement().text() );
2369 uri.
setParam( QStringLiteral(
"styles" ), layerElement.namedItem( QStringLiteral(
"style" ) ).toElement().text() );
2371 layerElement = layerElement.nextSiblingElement( QStringLiteral(
"wmsSublayer" ) );
2375 uri.
setParam( QStringLiteral(
"format" ), rpNode.namedItem( QStringLiteral(
"wmsFormat" ) ).toElement().text() );
2379 uri.
setParam( QStringLiteral(
"crs" ),
crs().authid() );
2392 const QDomNode extentNode = layer_node.namedItem( QStringLiteral(
"extent" ) );
2393 if ( !extentNode.isNull() )
2405 mOriginalStyleElement = layer_node.namedItem( QStringLiteral(
"originalStyle" ) ).firstChildElement();
2406 if ( mOriginalStyleElement.isNull() )
2407 mOriginalStyleElement = layer_node.toElement();
2408 mOriginalStyleDocument = layer_node.ownerDocument();
2410 if ( ! mDataProvider )
2434 QDomNode stampNode = layer_node.namedItem(
"timestamp" );
2435 if ( !stampNode.isNull() )
2437 QDateTime stamp = QDateTime::fromString( stampNode.toElement().text(), Qt::ISODate );
2439 if ( stamp < mDataProvider->dataTimestamp() )
2442 closeDataProvider();
2445 if ( !
isValid() )
return false;
2451 const QDomElement noDataElement = layer_node.firstChildElement( QStringLiteral(
"noData" ) );
2453 const QDomNodeList noDataBandList = noDataElement.elementsByTagName( QStringLiteral(
"noDataList" ) );
2455 for (
int i = 0; mDataProvider && i < noDataBandList.size(); ++i )
2457 const QDomElement bandElement = noDataBandList.at( i ).toElement();
2459 const int bandNo = bandElement.attribute( QStringLiteral(
"bandNo" ) ).toInt( &ok );
2461 if ( ok && ( bandNo > 0 ) && ( bandNo <= mDataProvider->
bandCount() ) )
2463 mDataProvider->setUseSourceNoDataValue( bandNo, bandElement.attribute( QStringLiteral(
"useSrcNoData" ) ).toInt() );
2466 const QDomNodeList rangeList = bandElement.elementsByTagName( QStringLiteral(
"noDataRange" ) );
2468 myNoDataRangeList.reserve( rangeList.size() );
2469 for (
int j = 0; j < rangeList.size(); ++j )
2471 const QDomElement rangeElement = rangeList.at( j ).toElement();
2472 const QgsRasterRange myNoDataRange( rangeElement.attribute( QStringLiteral(
"min" ) ).toDouble(),
2473 rangeElement.attribute( QStringLiteral(
"max" ) ).toDouble() );
2474 QgsDebugMsgLevel( QStringLiteral(
"min = %1 %2" ).arg( rangeElement.attribute(
"min" ) ).arg( myNoDataRange.
min() ), 4 );
2475 myNoDataRangeList << myNoDataRange;
2477 mDataProvider->setUserNoDataValue( bandNo, myNoDataRangeList );
2481 readRasterAttributeTableExternalPaths( layer_node, context );
2493 Q_UNUSED( errorMessage )
2496 QDomElement layerElement = layer_node.toElement();
2500 if ( categories.testFlag(
Labeling ) )
2504 QDomElement labelingElement = mLabeling->save( document, context );
2505 layerElement.appendChild( labelingElement );
2507 if ( mLabelsEnabled )
2508 layerElement.setAttribute( QStringLiteral(
"labelsEnabled" ), QStringLiteral(
"1" ) );
2512 if ( categories.testFlag(
MapTips ) )
2514 QDomElement mapTipElem = document.createElement( QStringLiteral(
"mapTip" ) );
2515 mapTipElem.setAttribute( QStringLiteral(
"enabled" ),
mapTipsEnabled() );
2516 QDomText mapTipText = document.createTextNode(
mapTipTemplate() );
2517 mapTipElem.appendChild( mapTipText );
2518 layer_node.toElement().appendChild( mapTipElem );
2524 writeRasterAttributeTableExternalPaths( layer_node, document, context );
2532 QDomElement pipeElement = document.createElement( QStringLiteral(
"pipe" ) );
2534 for (
int i = 0; i < mPipe->size(); i++ )
2537 if ( !interface )
continue;
2538 interface->
writeXml( document, pipeElement );
2541 QDomElement elemDataDefinedProperties = document.createElement( QStringLiteral(
"pipe-data-defined-properties" ) );
2543 layer_node.appendChild( elemDataDefinedProperties );
2545 QDomElement resamplingStageElement = document.createElement( QStringLiteral(
"resamplingStage" ) );
2547 resamplingStageElement.appendChild( resamplingStageText );
2548 pipeElement.appendChild( resamplingStageElement );
2550 layer_node.appendChild( pipeElement );
2552 if ( !
isValid() && !mOriginalStyleElement.isNull() )
2554 QDomElement originalStyleElement = document.createElement( QStringLiteral(
"originalStyle" ) );
2555 originalStyleElement.appendChild( mOriginalStyleElement );
2556 layer_node.appendChild( originalStyleElement );
2560 QDomElement blendModeElement = document.createElement( QStringLiteral(
"blendMode" ) );
2562 blendModeElement.appendChild( blendModeText );
2563 layer_node.appendChild( blendModeElement );
2568 QDomElement legendElement =
legend()->
writeXml( document, context );
2569 if ( !legendElement.isNull() )
2570 layer_node.appendChild( legendElement );
2581 return writeSymbology( node, doc, errorMessage, context, categories );
2585 QDomDocument &document,
2590 if ( !mDataProvider )
2595 QDomElement mapLayerNode = layer_node.toElement();
2597 if ( mapLayerNode.isNull() ||
"maplayer" != mapLayerNode.nodeName() )
2607 QDomElement provider = document.createElement( QStringLiteral(
"provider" ) );
2608 const QDomText providerText = document.createTextNode(
mProviderKey );
2609 provider.appendChild( providerText );
2610 layer_node.appendChild( provider );
2613 QDomElement noData = document.createElement( QStringLiteral(
"noData" ) );
2615 for (
int bandNo = 1; bandNo <= mDataProvider->bandCount(); bandNo++ )
2617 QDomElement noDataRangeList = document.createElement( QStringLiteral(
"noDataList" ) );
2618 noDataRangeList.setAttribute( QStringLiteral(
"bandNo" ), bandNo );
2619 noDataRangeList.setAttribute( QStringLiteral(
"useSrcNoData" ), mDataProvider->useSourceNoDataValue( bandNo ) );
2621 const auto constUserNoDataValues = mDataProvider->userNoDataValues( bandNo );
2624 QDomElement noDataRange = document.createElement( QStringLiteral(
"noDataRange" ) );
2628 noDataRangeList.appendChild( noDataRange );
2631 noData.appendChild( noDataRangeList );
2634 if ( noData.hasChildNodes() )
2636 layer_node.appendChild( noData );
2640 writeRasterAttributeTableExternalPaths( layer_node, document, context );
2646 return writeSymbology( layer_node, document, errorMsg, context );
2668 if ( !mDataProvider )
return 0;
2669 return mDataProvider->xSize();
2676 if ( !mDataProvider )
return 0;
2677 return mDataProvider->ySize();
2684 mPipe->setResamplingStage( stage );
2691 return mPipe->resamplingStage();
2694bool QgsRasterLayer::update()
2703 closeDataProvider();
Provides global constants and enumerations for use throughout the application.
static QString version()
Version string.
@ IsBasemapLayer
Layer is considered a 'basemap' layer, and certain properties of the layer should be ignored when cal...
RasterResamplingStage
Stage at which raster resampling occurs.
@ Provider
Resampling occurs in Provider.
@ ResampleFilter
Resampling occurs in ResamplingFilter.
@ ProviderHintBenefitsFromResampling
Provider benefits from resampling and should apply user default resampling settings.
@ ProviderHintCanPerformProviderResampling
Provider can perform resampling (to be opposed to post rendering resampling).
@ ReadLayerMetadata
Provider can read layer metadata from data store. Since QGIS 3.0. See QgsDataProvider::layerMetadata(...
@ SingleBandColorData
Single band containing color data.
@ GrayOrUndefined
Gray or undefined.
RasterRangeLimit
Describes the limits used to compute raster ranges (min/max values).
@ CumulativeCut
Range is [ min + cumulativeCutLower() * (max - min), min + cumulativeCutUpper() * (max - min) ].
@ StdDev
Range is [ mean - stdDevFactor() * stddev, mean + stdDevFactor() * stddev ].
@ MinimumMaximum
Real min-max values.
@ Linear
Interpolates the color between two class breaks linearly.
@ Discrete
Assigns the color of the higher class for every pixel between two class breaks.
@ IsBasemapSource
Associated source should be considered a 'basemap' layer. See Qgis::MapLayerProperty::IsBasemapLayer.
@ Bilinear
Bilinear (2x2 kernel) resampling.
@ Cubic
Cubic Convolution Approximation (4x4 kernel) resampling.
RasterDrawingStyle
Raster drawing styles.
@ SingleBandGray
A single band image drawn as a range of gray colors.
@ SingleBandColorData
ARGB values rendered directly.
@ MultiBandColor
A layer containing 2 or more bands, mapped to RGB color space. In the case of a multiband with only t...
@ PalettedColor
A "Palette" image drawn using color table.
@ SingleBandPseudoColor
A single band image drawn using a pseudocolor algorithm.
QFlags< RasterInterfaceCapability > RasterInterfaceCapabilities
Raster interface capabilities.
BlendMode
Blending modes defining the available composition modes that can be used when painting.
@ Size
Original data source size (and thus resolution) is known, it is not always available,...
@ IdentifyValue
Numerical values.
@ IdentifyFeature
WMS GML -> feature.
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
@ ExcludeByDefault
If set, the layer should not be included in legends by default, and must be manually added by a user.
@ StdDev
Standard deviation.
@ NoStatistic
No statistic.
DataType
Raster data types.
@ Float32
Thirty two bit floating point (float).
@ CFloat64
Complex Float64.
@ Int16
Sixteen bit signed integer (qint16).
@ ARGB32_Premultiplied
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32_Premultiplied.
@ Int8
Eight bit signed integer (qint8) (added in QGIS 3.30).
@ UInt16
Sixteen bit unsigned integer (quint16).
@ Byte
Eight bit unsigned integer (quint8).
@ UnknownDataType
Unknown or unspecified type.
@ ARGB32
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32.
@ Int32
Thirty two bit signed integer (qint32).
@ Float64
Sixty four bit floating point (double).
@ CFloat32
Complex Float32.
@ UInt32
Thirty two bit unsigned integer (quint32).
@ WholeRaster
Whole raster is used to compute statistics.
@ FixedCanvas
Current extent of the canvas (at the time of computation) is used to compute statistics.
QFlags< MapLayerProperty > MapLayerProperties
Map layer properties.
@ LoadDefaultStyle
Reset the layer's style to the default for the datasource.
@ SkipGetExtent
Skip the extent from provider.
@ TrustDataSource
Trust datasource config (primary key unicity, geometry type and srid, etc). Improves provider load ti...
RasterColorInterpretation
Raster color interpretation.
@ AlphaBand
Alpha (0=transparent, 255=opaque).
@ PaletteIndex
Paletted (see associated color table).
@ ContinuousPalette
Continuous palette, QGIS addition, GRASS.
RasterIdentifyFormat
Raster identify formats.
@ Feature
WMS GML/JSON -> feature.
@ Value
Numerical pixel value.
@ Preferred
Preferred format, matching the most recent WKT ISO standard. Currently an alias to WKT2_2019,...
Abstract base class for objects which generate elevation profiles.
Abstract base class for labeling settings for raster layers.
static QgsAbstractRasterLayerLabeling * createFromElement(const QDomElement &element, const QgsReadWriteContext &context)
Tries to create an instance of an implementation based on the XML data.
static QgsRasterRendererRegistry * rasterRendererRegistry()
Returns the application's raster renderer registry, used for managing raster layer renderers.
static QgsRuntimeProfiler * profiler()
Returns the application runtime profiler.
Bilinear raster resampler.
Brightness/contrast and gamma correction filter pipe for rasters.
int contrast() const
Returns current contrast level.
int brightness() const
Returns current brightness level.
A ramp shader will color a raster pixel based on a list of values ranges in a ramp.
bool shade(double value, int *returnRedValue, int *returnGreenValue, int *returnBlueValue, int *returnAlphaValue) const override
Generates an new RGBA value based on one input value.
void classifyColorRamp(int classes=0, int band=-1, const QgsRectangle &extent=QgsRectangle(), QgsRasterInterface *input=nullptr)
Classify color ramp shader.
void setColorRampType(Qgis::ShaderInterpolationMethod colorRampType)
Sets the color ramp interpolation method.
void setColorRampItemList(const QList< QgsColorRampShader::ColorRampItem > &list)
Sets a custom color map.
Handles contrast enhancement and clipping.
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used.
@ StretchToMinimumMaximum
Linear histogram.
@ NoEnhancement
Default color scaling algorithm, no scaling is applied.
static QString contrastEnhancementAlgorithmString(ContrastEnhancementAlgorithm algorithm)
Returns a string to serialize ContrastEnhancementAlgorithm.
static ContrastEnhancementAlgorithm contrastEnhancementAlgorithmFromString(const QString &contrastEnhancementString)
Deserialize ContrastEnhancementAlgorithm.
ContrastEnhancementAlgorithm contrastEnhancementAlgorithm() const
Represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Abstract base class for spatial data provider implementations.
Stores the component parts of a data source URI (e.g.
QByteArray encodedUri() const
Returns the complete encoded URI as a byte array.
void setEncodedUri(const QByteArray &uri)
Sets the complete encoded uri.
void setParam(const QString &key, const QString &value)
Sets a generic parameter value on the URI.
Color and saturation filter pipe for rasters.
Base class for storage of map layer elevation properties.
static QString typeToString(Qgis::LayerType type)
Converts a map layer type to a string value.
An abstract interface for implementations of legends for one map layer.
virtual void readXml(const QDomElement &elem, const QgsReadWriteContext &context)
Reads configuration from a DOM element previously written by writeXml().
virtual QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context) const
Writes configuration to a DOM element, to be used later with readXml().
static QgsMapLayerLegend * defaultRasterLegend(QgsRasterLayer *rl)
Create new legend implementation for raster layer.
void setFlag(Qgis::MapLayerLegendFlag flag, bool on=true)
Enables or disables a particular flag (other flags are not affected).
Base class for utility classes that encapsulate information necessary for rendering of map layers.
QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
QString abstract() const
Returns the abstract of the layerused by QGIS Server in GetCapabilities request.
Base class for storage of map layer temporal properties.
void readStyleManager(const QDomNode &layerNode)
Read style manager's configuration (if any). To be called by subclasses.
void setError(const QgsError &error)
Sets error message.
void writeStyleManager(QDomNode &layerNode, QDomDocument &doc) const
Write style manager's configuration (if exists). To be called by subclasses.
QgsMapLayerLegend * legend() const
Can be nullptr.
virtual QgsRectangle extent() const
Returns the extent of the layer.
QString source() const
Returns the source for the layer.
Q_INVOKABLE QVariant customProperty(const QString &value, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer.
void setBlendMode(QPainter::CompositionMode blendMode)
Set the blending mode used for rendering a layer.
void configChanged()
Emitted whenever the configuration is changed.
static Qgis::DataProviderReadFlags providerReadFlags(const QDomNode &layerNode, QgsMapLayer::ReadFlags layerReadFlags)
Returns provider read flag deduced from layer read flags layerReadFlags and a dom node layerNode that...
QgsCoordinateReferenceSystem crs
QgsMapLayerServerProperties * serverProperties()
Returns QGIS Server Properties for the map layer.
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...
void setDataSource(const QString &dataSource, const QString &baseName=QString(), const QString &provider=QString(), bool loadDefaultStyleFlag=false)
Updates the data source of the layer.
QString mLayerName
Name of the layer - used for display.
void triggerRepaint(bool deferredUpdate=false)
Will advise the map canvas (and any other interested party) that this layer requires to be repainted.
QString crsHtmlMetadata() const
Returns a HTML fragment containing the layer's CRS metadata, for use in the htmlMetadata() method.
QgsLayerMetadata metadata
Q_DECL_DEPRECATED QString abstract() const
Returns the abstract of the layer used by QGIS Server in GetCapabilities request.
QgsMapLayer(Qgis::LayerType type=Qgis::LayerType::Vector, const QString &name=QString(), const QString &source=QString())
Constructor for QgsMapLayer.
QPainter::CompositionMode blendMode() const
Returns the current blending mode for a layer.
void statusChanged(const QString &status)
Emit a signal with status (e.g. to be caught by QgisApp and display a msg on status bar).
virtual void setMetadata(const QgsLayerMetadata &metadata)
Sets the layer's metadata store.
QFlags< StyleCategory > StyleCategories
Q_INVOKABLE void setCustomProperty(const QString &key, const QVariant &value)
Set a custom property for layer.
QString mProviderKey
Data provider key (name of the data provider).
QgsCoordinateTransformContext transformContext() const
Returns the layer data provider coordinate transform context or a default transform context if the la...
std::unique_ptr< QgsDataProvider > mPreloadedProvider
Optionally used when loading a project, it is released when the layer is effectively created.
void rendererChanged()
Signal emitted when renderer is changed.
Q_DECL_DEPRECATED QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
virtual QgsError error() const
Gets current status error.
QgsMapLayer::LayerFlags flags
bool hasScaleBasedVisibility() const
Returns whether scale based visibility is enabled for the layer.
void opacityChanged(double opacity)
Emitted when the layer's opacity is changed, where opacity is a value between 0 (transparent) and 1 (...
void emitStyleChanged()
Triggers an emission of the styleChanged() signal.
void dataChanged()
Data of layer changed.
void willBeDeleted()
Emitted in the destructor when the layer is about to be deleted, but it is still in a perfectly valid...
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
void setName(const QString &name)
Set the display name of the layer.
virtual void setExtent(const QgsRectangle &rect)
Sets the extent.
void appendError(const QgsErrorMessage &error)
Add error message.
QString mDataSource
Data source description string, varies by layer type.
void setMapTipsEnabled(bool enabled)
Enable or disable map tips for this layer.
@ FlagReadExtentFromXml
Read extent from xml and skip get extent from provider.
@ FlagTrustLayerMetadata
Trust layer metadata. Improves layer load time by skipping expensive checks like primary key unicity,...
@ FlagDontResolveLayers
Don't resolve layer paths or create data providers for layers.
void setValid(bool valid)
Sets whether layer is valid or not.
void readCommonStyle(const QDomElement &layerElement, const QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories)
Read style data common to all layer types.
QgsMapLayer::ReadFlags mReadFlags
Read flags. It's up to the subclass to respect these when restoring state from XML.
double minimumScale() const
Returns the minimum map scale (i.e.
void repaintRequested(bool deferredUpdate=false)
By emitting this signal the layer tells that either appearance or content have been changed and any v...
void setMapTipTemplate(const QString &mapTipTemplate)
The mapTip is a pretty, html representation for feature information.
@ AttributeTable
Attribute table settings: choice and order of columns, conditional styling.
@ Rendering
Rendering: scale visibility, simplify method, opacity.
void setProviderType(const QString &providerType)
Sets the providerType (provider key).
QString customPropertyHtmlMetadata() const
Returns an HTML fragment containing custom property information, for use in the htmlMetadata() method...
QString generalHtmlMetadata() const
Returns an HTML fragment containing general metadata information, for use in the htmlMetadata() metho...
void writeCommonStyle(QDomElement &layerElement, QDomDocument &document, const QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories) const
Write style data common to all layer types.
double maximumScale() const
Returns the maximum map scale (i.e.
void invalidateWgs84Extent()
Invalidates the WGS84 extent.
bool mShouldValidateCrs
true if the layer's CRS should be validated and invalid CRSes are not permitted.
void setCrs(const QgsCoordinateReferenceSystem &srs, bool emitSignal=true)
Sets layer's spatial reference system.
Perform transforms between map coordinates and device coordinates.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
Renderer for multiband images with the color components.
int blueBand() const
Returns the band number for the blue channel.
void setGreenContrastEnhancement(QgsContrastEnhancement *ce)
Sets the contrast enhancement to use for the green channel.
void setBlueContrastEnhancement(QgsContrastEnhancement *ce)
Sets the contrast enhancement to use for the blue channel.
void setRedContrastEnhancement(QgsContrastEnhancement *ce)
Sets the contrast enhancement to use for the red channel.
const QgsContrastEnhancement * redContrastEnhancement() const
Returns the contrast enhancement to use for the red channel.
int redBand() const
Returns the band number for the red channel.
int greenBand() const
Returns the band number for the green channel.
static Qgis::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a Qgis::BlendMode corresponding to a QPainter::CompositionMode.
static QPainter::CompositionMode getCompositionMode(Qgis::BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a Qgis::BlendMode.
QString writePath(const QString &filename) const
Prepare a filename to save it to the project file.
QString readPath(const QString &filename) const
Turn filename read from the project file to an absolute path.
Encapsulates properties and constraints relating to fetching elevation profiles from different source...
QString absoluteToRelativeUri(const QString &providerKey, const QString &uri, const QgsReadWriteContext &context) const
Converts absolute path(s) to relative path(s) in the given provider-specific URI.
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
QString relativeToAbsoluteUri(const QString &providerKey, const QString &uri, const QgsReadWriteContext &context) const
Converts relative path(s) to absolute path(s) in the given provider-specific URI.
Represents a Raster Attribute Table (RAT).
QString filePath() const
Returns the (possibly empty) path of the file-based RAT, the path is set when a RAT is read or writte...
The RasterBandStats struct is a container for statistics about a single raster band.
double mean
The mean cell value for the band. NO_DATA values are excluded.
double stdDev
The standard deviation of the cell values.
double minimumValue
The minimum cell value in the raster band.
Qgis::RasterBandStatistics statsGathered
Collected statistics.
double maximumValue
The maximum cell value in the raster band.
static int typeSize(Qgis::DataType dataType)
Returns the size in bytes for the specified dataType.
static QString printValue(double value, bool localized=false)
Print double value with all necessary significant digits.
Handles elevation related properties for a raster data provider.
Base class for raster data providers.
QDateTime timestamp() const override
Time stamp of data source in the moment when data/metadata were loaded by provider.
QgsRectangle extent() const override=0
Returns the extent of the layer.
QDateTime dataTimestamp() const override
Current time stamp of data source.
void statusChanged(const QString &) const
Emit a message to be displayed on status bar, usually used by network providers (WMS,...
static QString identifyFormatName(Qgis::RasterIdentifyFormat format)
Converts a raster identify format to a string name.
The drawing pipe for raster layers.
void draw(QPainter *p, QgsRasterViewPort *viewPort, const QgsMapToPixel *qgsMapToPixel, QgsRasterBlockFeedback *feedback=nullptr)
Draws raster data.
Base class for processing filters like renderers, reprojector, resampler etc.
Q_DECL_DEPRECATED QgsRasterBandStats bandStatistics(int bandNo, int stats, const QgsRectangle &extent=QgsRectangle(), int sampleSize=0, QgsRasterBlockFeedback *feedback=nullptr)
Returns the band statistics.
Q_DECL_DEPRECATED bool hasStatistics(int bandNo, int stats, const QgsRectangle &extent=QgsRectangle(), int sampleSize=0)
Returns true if histogram is available (cached, already calculated).
virtual void writeXml(QDomDocument &doc, QDomElement &parentElem) const
Write base class members to xml.
virtual QgsRasterInterface * input() const
Current input.
Iterator for sequentially processing raster cells.
Raster layer specific subclass of QgsMapLayerElevationProperties.
Implementation of QgsAbstractProfileGenerator for raster layers.
Implementation of threaded rendering for raster layers.
Implementation of map layer temporal properties for raster layers.
QString htmlMetadata() const override
Obtain a formatted HTML string containing assorted metadata for this layer.
bool canCreateRasterAttributeTable()
Returns true if the raster renderer is suitable for creation of a raster attribute table.
void subsetStringChanged()
Emitted when the layer's subset string has changed.
Qgis::MapLayerProperties properties() const override
Returns the map layer properties of this layer.
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...
const QgsAbstractRasterLayerLabeling * labeling() const
Access to const labeling configuration.
Q_DECL_DEPRECATED QgsLegendColorList legendSymbologyItems() const
Returns a list with classification items (Text and color).
QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext) override
Returns new instance of QgsMapLayerRenderer that will be used for rendering of given context.
void showStatusMessage(const QString &message)
QgsRasterAttributeTable * attributeTable(int bandNumber) const
Returns the (possibly NULL) raster attribute table for the given band bandNumber.
virtual bool setSubsetString(const QString &subset)
Sets the string (typically sql) used to define a subset of the layer.
QgsRasterResampleFilter * resampleFilter() const
Returns the raster's resample filter.
bool writeSymbology(QDomNode &, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories) const override
Write the style for the layer into the document provided.
QgsRasterLayer * clone() const override
Returns a new instance equivalent to this one.
void setResamplingStage(Qgis::RasterResamplingStage stage)
Select which stage of the pipe should apply resampling.
Qgis::RasterResamplingStage resamplingStage() const
Returns which stage of the pipe should apply resampling.
static const QgsSettingsEntryBool * settingsRasterDefaultEarlyResampling
int attributeTableCount() const
Returns the number of attribute tables for the raster by counting the number of bands that have an as...
void refreshContrastEnhancement(const QgsRectangle &extent)
Refresh contrast enhancement with new extent.
int height() const
Returns the height of the (unclipped) raster.
static const Qgis::RasterRangeLimit SINGLE_BAND_MIN_MAX_LIMITS
Default enhancement limits for single band raster.
Q_DECL_DEPRECATED void setDataProvider(const QString &provider)
Set the data provider.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_SINGLE_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type Byte.
int bandCount() const
Returns the number of bands in this layer.
QgsMapLayerTemporalProperties * temporalProperties() override
Returns the layer's temporal properties.
bool ignoreExtents() const
If the ignoreExtent flag is set, the layer will also render outside the bounding box reported by the ...
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...
double opacity() const final
Returns the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
void computeMinMax(int band, const QgsRasterMinMaxOrigin &mmo, Qgis::RasterRangeLimit limits, const QgsRectangle &extent, int sampleSize, double &min, double &max)
Compute the min max values along band according to MinMaxOrigin parameters mmo and extent.
bool labelsEnabled() const
Returns whether the layer contains labels which are enabled and should be drawn.
void setSubLayerVisibility(const QString &name, bool vis) override
Set the visibility of the given sublayer name.
static const QgsSettingsEntryDouble * settingsRasterDefaultOversampling
void setLabeling(QgsAbstractRasterLayerLabeling *labeling)
Sets labeling configuration.
virtual QString subsetString() const
Returns the string (typically sql) used to define a subset of the layer.
QgsAbstractProfileGenerator * createProfileGenerator(const QgsProfileRequest &request) override
Given a profile request, returns a new profile generator ready for generating elevation profiles.
QgsBrightnessContrastFilter * brightnessFilter() const
Returns the raster's brightness/contrast filter.
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.
bool writeStyle(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories) const override
Write just the symbology information for the layer into the document.
double rasterUnitsPerPixelX() const
Returns the number of raster units per each raster pixel in X axis.
void reload() override
Synchronises with changes in the datasource.
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified symbology visitor, causing it to visit all symbols associated with the layer.
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.
QStringList subLayers() const override
Returns the sublayers of this layer.
static const Qgis::RasterRangeLimit MULTIPLE_BAND_MULTI_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type different from Byte.
void setContrastEnhancement(QgsContrastEnhancement::ContrastEnhancementAlgorithm algorithm, Qgis::RasterRangeLimit limits=Qgis::RasterRangeLimit::MinimumMaximum, const QgsRectangle &extent=QgsRectangle(), int sampleSize=QgsRasterLayer::SAMPLE_SIZE, bool generateLookupTableFlag=true)
Set contrast enhancement algorithm.
void setDefaultContrastEnhancement()
Sets the default contrast enhancement.
QgsRasterRenderer * renderer() const
Returns the raster's renderer.
static const double SAMPLE_SIZE
Default sample size (number of pixels) for estimated statistics/histogram calculation.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_MULTI_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type different from Byte.
static const Qgis::RasterRangeLimit MULTIPLE_BAND_SINGLE_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type Byte.
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 setLabelsEnabled(bool enabled)
Sets whether labels should be enabled for the layer.
QString bandName(int bandNoInt) const
Returns the name of a band given its number.
QgsRasterDataProvider * dataProvider() override
Returns the source data provider.
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.
bool isSpatial() const override
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
void setOpacity(double opacity) final
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
double rasterUnitsPerPixelY() const
Returns the number of raster units per each raster pixel in Y axis.
int width() const
Returns the width of the (unclipped) raster.
QgsMapLayerElevationProperties * elevationProperties() override
Returns the layer's elevation properties.
bool readSymbology(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories) override
Read the symbology for the current layer from the DOM node supplied.
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...
Q_DECL_DEPRECATED 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.
static QDateTime lastModified(const QString &name)
Returns time stamp for given file name.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm SINGLE_BAND_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for single band raster.
~QgsRasterLayer() override
QDateTime timestamp() const override
Time stamp of data source in the moment when data/metadata were loaded by provider.
void setTransformContext(const QgsCoordinateTransformContext &transformContext) override
Sets the coordinate transform context to transformContext.
void setRenderer(QgsRasterRenderer *renderer)
Sets the raster's renderer.
QgsRasterLayer()
Constructor. Provider is not set.
void setLayerOrder(const QStringList &layers) override
Reorders the previously selected sublayers of this layer from bottom to top.
bool defaultContrastEnhancementSettings(QgsContrastEnhancement::ContrastEnhancementAlgorithm &myAlgorithm, Qgis::RasterRangeLimit &myLimits) const
Returns default contrast enhancement settings for that type of raster.
QgsHueSaturationFilter * hueSaturationFilter() const
Returns the raster's hue/saturation filter.
bool readStyle(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories) override
Read the style for the current layer from the DOM node supplied.
QPixmap paletteAsPixmap(int bandNumber=1)
Returns a 100x100 pixmap of the color palette.
Describes the origin of minimum and maximum values in a raster.
static QString limitsString(Qgis::RasterRangeLimit limits)
Returns a string to serialize Limits.
void setLimits(Qgis::RasterRangeLimit limits)
Sets the limits.
void setExtent(Qgis::RasterRangeExtent extent)
Sets the extent.
double cumulativeCutLower() const
Returns the lower bound of cumulative cut method (between 0 and 1).
Qgis::RasterRangeExtent extent() const
Returns the raster extent.
double stdDevFactor() const
Returns the factor f so that the min/max range is [ mean - f * stddev , mean + f * stddev ].
double cumulativeCutUpper() const
Returns the upper bound of cumulative cut method (between 0 and 1).
static Qgis::RasterRangeLimit limitsFromString(const QString &limits)
Deserialize Limits.
Qgis::RasterRangeLimit limits() const
Returns the raster limits.
Contains a pipeline of raster interfaces for sequential raster processing.
static QgsPropertiesDefinition propertyDefinitions()
Returns the definitions for data defined properties available for use in raster pipes.
Implements approximate projection support for optimised raster transformation.
Q_DECL_DEPRECATED void setCrs(const QgsCoordinateReferenceSystem &srcCRS, const QgsCoordinateReferenceSystem &destCRS, int srcDatumTransform=-1, int destDatumTransform=-1)
Sets the source and destination CRS.
Represents a range of raster values between min and max, optionally including the min and max value.
double min() const
Returns the minimum value for the range.
Raster renderer pipe that applies colors to a raster.
virtual QString type() const
Returns a unique string representation of the renderer type.
virtual bool canCreateRasterAttributeTable() const
Returns true if the renderer is suitable for attribute table creation.
void setMinMaxOrigin(const QgsRasterMinMaxOrigin &origin)
Sets origin of min/max values.
const QgsRasterMinMaxOrigin & minMaxOrigin() const
Returns const reference to origin of min/max values.
virtual bool refresh(const QgsRectangle &extent, const QList< double > &min, const QList< double > &max, bool forceRefresh=false)
Refreshes the renderer according to the min and max values associated with the extent.
Resample filter pipe for rasters.
Interface for all raster shaders.
void setRasterShaderFunction(QgsRasterShaderFunction *function)
A public method that allows the user to set their own shader function.
Allows entering a context category and takes care of leaving this category on deletion of the class.
A container for the context for various read/write operations on objects.
QgsReadWriteContextCategoryPopper enterCategory(const QString &category, const QString &details=QString()) const
Push a category to the stack.
QgsCoordinateTransformContext transformContext() const
Returns data provider coordinate transform context.
const QgsPathResolver & pathResolver() const
Returns path resolver for conversion between relative and absolute paths.
A rectangle specified with double values.
Q_INVOKABLE QString toString(int precision=16) const
Returns a string representation of form xmin,ymin : xmax,ymax Coordinates will be truncated to the sp...
Contains information about the context of a rendering operation.
A boolean settings entry.
static QgsSettingsTreeNode * sTreeRaster
Stores settings for use within QGIS.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
Raster renderer pipe for single band gray.
void setContrastEnhancement(QgsContrastEnhancement *ce)
Takes ownership.
int inputBand() const override
Returns the input band for the renderer, or -1 if no input band is available.
Raster renderer pipe for single band pseudocolor.
void setClassificationMin(double min)
void setShader(QgsRasterShader *shader)
Takes ownership of the shader.
void setClassificationMax(double max)
QgsRasterShader * shader()
Returns the raster shader.
int inputBand() const override
Returns the input band for the renderer, or -1 if no input band is available.
Holds SLD export options and other information related to SLD export of a QGIS layer style.
void setExtraProperties(const QVariantMap &properties)
Sets the open ended set of properties that can drive/inform the SLD encoding.
QVariantMap extraProperties() const
Returns the open ended set of properties that can drive/inform the SLD encoding.
An interface for classes which can visit style entity (e.g.
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.
static QgsRectangle readRectangle(const QDomElement &element)
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
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
QString qgsEnumValueToKey(const T &value, bool *returnOk=nullptr)
Returns the value for the given key of an enum.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference).
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
#define QgsDebugMsgLevel(str, level)
#define QgsDebugError(str)
QgsDataProvider * classFactoryFunction_t(const QString *, const QgsDataProvider::ProviderOptions &options)
QList< QPair< QString, QColor > > QgsLegendColorList
QList< QgsRasterRange > QgsRasterRangeList
#define QGIS_PROTECT_QOBJECT_THREAD_ACCESS
Setting options for creating vector data providers.
Setting options for loading raster layers.
bool skipCrsValidation
Controls whether the layer is allowed to have an invalid/unknown CRS.
bool loadDefaultStyle
Sets to true if the default layer style should be loaded.
QgsCoordinateTransformContext transformContext
Coordinate transform context.
Registry for raster renderer entries.
QgsRasterRendererCreateFunc rendererCreateFunction
This class provides details of the viewable area that a raster will be rendered into.
qgssize mHeight
Height, number of rows to be rendered.
QgsCoordinateReferenceSystem mDestCRS
Target (map) coordinate system.
QgsPointXY mBottomRightPoint
Coordinate (in output device coordinate system) of bottom right corner of the part of the raster that...
QgsPointXY mTopLeftPoint
Coordinate (in output device coordinate system) of top left corner of the part of the raster that is ...
QgsCoordinateReferenceSystem mSrcCRS
Source (layer) coordinate system.
QgsRectangle mDrawnExtent
Intersection of current map extent and layer extent, in map (destination) CRS.
QgsCoordinateTransformContext mTransformContext
Coordinate transform context.
qgssize mWidth
Width, number of columns to be rendered.