55 #include "qgsgdalprovider.h"
68 #include <QApplication>
71 #include <QDomElement>
76 #include <QFontMetrics>
83 #include <QRegularExpression>
87 #define ERR(message) QGS_ERROR_MESSAGE(message,"Raster layer")
107 , QSTRING_NOT_SET( QStringLiteral(
"Not Set" ) )
108 , TRSTRING_NOT_SET( tr(
"Not Set" ) )
118 const QString &baseName,
119 const QString &providerKey,
123 , QSTRING_NOT_SET( QStringLiteral(
"Not Set" ) )
124 , TRSTRING_NOT_SET( tr(
"Not Set" ) )
134 QgsDataProvider::ReadFlags providerFlags = QgsDataProvider::ReadFlags();
139 setDataSource( uri, baseName, providerKey, providerOptions, providerFlags );
167 for (
int i = 1; i < mPipe->size(); i++ )
169 if ( mPipe->at( i ) )
170 layer->
pipe()->
set( mPipe->at( i )->clone() );
185 const bool myIsValid = QgsGdalProvider::isValidRasterFileName( fileNameQString, retErrMsg );
200 const QFileInfo fi(
name );
206 t = fi.lastModified();
229 if ( !mDataProvider )
return 0;
235 if ( !mDataProvider )
return QString();
246 return mDataProvider;
251 return mDataProvider;
283 bool restoreOldResamplingStage =
false;
291 if ( mDataProvider !=
nullptr &&
296 restoreOldResamplingStage =
true;
305 drawer.
draw( theQPainter, rasterViewPort, qgsMapToPixel );
307 if ( restoreOldResamplingStage )
312 QgsDebugMsgLevel( QStringLiteral(
"total raster draw time (ms): %1" ).arg( time.elapsed(), 5 ), 4 );
323 if ( !mDataProvider )
327 QString myMetadata = QStringLiteral(
"<html><head></head>\n<body>\n" );
332 myMetadata += QStringLiteral(
"<h1>" ) + tr(
"Information from provider" ) + QStringLiteral(
"</h1>\n<hr>\n" ) + QStringLiteral(
"<table class=\"list-view\">\n" );
334 myMetadata += QStringLiteral(
"\n" ) %
336 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Extent" ) % QStringLiteral(
"</td><td>" ) %
extent().
toString() % QStringLiteral(
"</td></tr>\n" ) %
339 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Width" ) % QStringLiteral(
"</td><td>" );
341 myMetadata += QString::number(
width() );
343 myMetadata += tr(
"n/a" );
344 myMetadata += QStringLiteral(
"</td></tr>\n" ) %
347 QStringLiteral(
"<tr><td class=\"highlight\">" ) + tr(
"Height" ) + QStringLiteral(
"</td><td>" );
349 myMetadata += QString::number(
height() );
351 myMetadata += tr(
"n/a" );
352 myMetadata += QStringLiteral(
"</td></tr>\n" ) %
355 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Data type" ) % QStringLiteral(
"</td><td>" );
360 myMetadata += tr(
"Byte - Eight bit unsigned integer" );
363 myMetadata += tr(
"UInt16 - Sixteen bit unsigned integer " );
366 myMetadata += tr(
"Int16 - Sixteen bit signed integer " );
369 myMetadata += tr(
"UInt32 - Thirty two bit unsigned integer " );
372 myMetadata += tr(
"Int32 - Thirty two bit signed integer " );
375 myMetadata += tr(
"Float32 - Thirty two bit floating point " );
378 myMetadata += tr(
"Float64 - Sixty four bit floating point " );
381 myMetadata += tr(
"CInt16 - Complex Int16 " );
384 myMetadata += tr(
"CInt32 - Complex Int32 " );
387 myMetadata += tr(
"CFloat32 - Complex Float32 " );
390 myMetadata += tr(
"CFloat64 - Complex Float64 " );
393 myMetadata += tr(
"Could not determine raster data type." );
395 myMetadata += QStringLiteral(
"</td></tr>\n" ) %
401 QStringLiteral(
"</table>\n<br><br>" );
407 myMetadata += QStringLiteral(
"<h1>" ) % tr(
"Identification" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
409 QStringLiteral(
"<br><br>\n" ) %
412 QStringLiteral(
"<h1>" ) % tr(
"Extent" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
414 QStringLiteral(
"<br><br>\n" ) %
417 QStringLiteral(
"<h1>" ) % tr(
"Access" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
419 QStringLiteral(
"<br><br>\n" ) %
422 QStringLiteral(
"</table>\n<br><br><h1>" ) % tr(
"Bands" ) % QStringLiteral(
"</h1>\n<hr>\n<table class=\"list-view\">\n" ) %
425 QStringLiteral(
"<tr><td class=\"highlight\">" ) % tr(
"Band count" ) % QStringLiteral(
"</td><td>" ) % QString::number(
bandCount() ) % QStringLiteral(
"</td></tr>\n" );
428 myMetadata += QStringLiteral(
"</table>\n<br><table width=\"100%\" class=\"tabular-view\">\n" ) %
429 QStringLiteral(
"<tr><th>" ) % tr(
"Number" ) % QStringLiteral(
"</th><th>" ) % tr(
"Band" ) % QStringLiteral(
"</th><th>" ) % tr(
"No-Data" ) % QStringLiteral(
"</th><th>" ) %
430 tr(
"Min" ) % QStringLiteral(
"</th><th>" ) % tr(
"Max" ) % QStringLiteral(
"</th></tr>\n" );
437 rowClass = QStringLiteral(
"class=\"odd-row\"" );
439 myMetadata += QStringLiteral(
"<tr " ) % rowClass % QStringLiteral(
"><td>" ) % QString::number( i ) % QStringLiteral(
"</td><td>" ) %
bandName( i ) % QStringLiteral(
"</td><td>" );
442 myMetadata += QString::number(
dataProvider()->sourceNoDataValue( i ) );
444 myMetadata += tr(
"n/a" );
445 myMetadata += QLatin1String(
"</td>" );
450 myMetadata += QStringLiteral(
"<td>" ) % QString::number( myRasterBandStats.
minimumValue,
'f', 10 ) % QStringLiteral(
"</td>" ) %
451 QStringLiteral(
"<td>" ) % QString::number( myRasterBandStats.
maximumValue,
'f', 10 ) % QStringLiteral(
"</td>" );
455 myMetadata += QStringLiteral(
"<td>" ) % tr(
"n/a" ) % QStringLiteral(
"</td><td>" ) % tr(
"n/a" ) % QStringLiteral(
"</td>" );
458 myMetadata += QLatin1String(
"</tr>\n" );
462 myMetadata += QStringLiteral(
"</table>\n<br><br>" ) %
465 QStringLiteral(
"<h1>" ) % tr(
"Contacts" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
467 QStringLiteral(
"<br><br>\n" ) %
470 QStringLiteral(
"<h1>" ) % tr(
"References" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
472 QStringLiteral(
"<br><br>\n" ) %
475 QStringLiteral(
"<h1>" ) % tr(
"History" ) % QStringLiteral(
"</h1>\n<hr>\n" ) %
477 QStringLiteral(
"<br><br>\n" ) %
479 QStringLiteral(
"\n</body>\n</html>\n" );
490 if ( mDataProvider &&
495 const QList<QgsColorRampShader::ColorRampItem> myColorRampItemList = mDataProvider->
colorTable( bandNumber );
496 if ( !myColorRampItemList.isEmpty() )
502 const int mySize = 100;
503 QPixmap myPalettePixmap( mySize, mySize );
504 QPainter myQPainter( &myPalettePixmap );
506 QImage myQImage = QImage( mySize, mySize, QImage::Format_RGB32 );
508 myPalettePixmap.fill();
510 const double myStep = (
static_cast< double >( myColorRampItemList.size() ) - 1 ) /
static_cast< double >( mySize * mySize );
511 double myValue = 0.0;
512 for (
int myRow = 0; myRow < mySize; myRow++ )
514 QRgb *myLineBuffer =
reinterpret_cast< QRgb *
>( myQImage.scanLine( myRow ) );
515 for (
int myCol = 0; myCol < mySize; myCol++ )
517 myValue = myStep *
static_cast< double >( myCol + myRow * mySize );
519 myShader.
shade( myValue, &c1, &c2, &c3, &c4 );
520 myLineBuffer[ myCol ] = qRgba( c1, c2, c3, c4 );
524 myQPainter.drawImage( 0, 0, myQImage );
525 return myPalettePixmap;
527 const QPixmap myNullPixmap;
533 const QPixmap myNullPixmap;
551 if ( mDataProvider &&
561 if ( mDataProvider &&
571 if ( !mPipe->renderer() || mPipe->renderer()->opacity() ==
opacity )
574 mPipe->renderer()->setOpacity(
opacity );
581 return mPipe->renderer() ? mPipe->renderer()->opacity() : 1.0;
584 void QgsRasterLayer::init()
603 mPipe = std::make_unique< QgsRasterPipe >();
604 mDataProvider =
nullptr;
618 std::unique_ptr< QgsScopedRuntimeProfile > profile;
620 profile = std::make_unique< QgsScopedRuntimeProfile >( tr(
"Create %1 provider" ).arg( provider ), QStringLiteral(
"projectload" ) );
623 if ( !mDataProvider )
630 mDataProvider->setParent(
this );
633 mPipe->set( mDataProvider );
634 if ( !mDataProvider->
isValid() )
644 QgsDebugMsgLevel( QStringLiteral(
"Set Data provider QgsLayerMetadata identifier[%1]" ).arg(
metadata().identifier() ), 4 );
647 if ( provider == QLatin1String(
"gdal" ) )
680 if ( ( mDataProvider->
bandCount() > 1 ) )
728 const QList<QgsColorRampShader::ColorRampItem> colorTable = mDataProvider->
colorTable( 1 );
751 for (
int bandNo = 1; bandNo <= mDataProvider->
bandCount(); bandNo++ )
755 if (
auto *lRenderer = mPipe->renderer() )
757 lRenderer->setAlphaBand( bandNo );
778 QString resampling = settings.
value( QStringLiteral(
"/Raster/defaultZoomedInResampling" ), QStringLiteral(
"nearest neighbour" ) ).toString();
779 if ( resampling == QLatin1String(
"bilinear" ) )
784 else if ( resampling == QLatin1String(
"cubic" ) )
789 resampling = settings.
value( QStringLiteral(
"/Raster/defaultZoomedOutResampling" ), QStringLiteral(
"nearest neighbour" ) ).toString();
790 if ( resampling == QLatin1String(
"bilinear" ) )
796 const double maxOversampling = settings.
value( QStringLiteral(
"/Raster/defaultOversampling" ), 2.0 ).toDouble();
801 settings.
value( QStringLiteral(
"/Raster/defaultEarlyResampling" ),
false ).toBool() )
813 mPipe->set( projector );
857 void QgsRasterLayer::setDataSourcePrivate(
const QString &dataSource,
const QString &baseName,
const QString &provider,
860 const bool hadRenderer(
renderer() );
862 QDomImplementation domImplementation;
863 QDomDocumentType documentType;
866 bool loadDefaultStyleFlag =
false;
869 loadDefaultStyleFlag =
true;
873 if ( hadRenderer && ! loadDefaultStyleFlag )
875 documentType = domImplementation.createDocumentType(
876 QStringLiteral(
"qgis" ), QStringLiteral(
"http://mrcc.com/qgis.dtd" ), QStringLiteral(
"SYSTEM" ) );
878 QDomDocument doc = QDomDocument( documentType );
879 QDomElement styleElem = doc.createElement( QStringLiteral(
"qgis" ) );
880 styleElem.setAttribute( QStringLiteral(
"version" ),
Qgis::version() );
884 QgsDebugMsg( QStringLiteral(
"Could not store symbology for layer %1: %2" )
890 doc.appendChild( styleElem );
892 mOriginalStyleDocument = doc;
893 mOriginalStyleElement = styleElem;
902 for (
int i = mPipe->size() - 1; i >= 0; --i )
918 bool defaultLoadedFlag =
false;
919 bool restoredStyle =
false;
920 if ( loadDefaultStyleFlag )
924 else if ( !mOriginalStyleElement.isNull() )
927 if ( !
readSymbology( mOriginalStyleElement, errorMsg, readContext ) )
929 QgsDebugMsg( QStringLiteral(
"Could not restore symbology for layer %1: %2" )
936 restoredStyle =
true;
943 if ( !defaultLoadedFlag && !restoredStyle )
950 void QgsRasterLayer::closeDataProvider()
953 mPipe->remove( mDataProvider );
954 mDataProvider =
nullptr;
957 void QgsRasterLayer::computeMinMax(
int band,
962 double &min,
double &max )
965 min = std::numeric_limits<double>::quiet_NaN();
966 max = std::numeric_limits<double>::quiet_NaN();
967 if ( !mDataProvider )
974 if ( myRasterBandStats.
statsGathered == QgsRasterBandStats::Stats::None )
977 switch ( mDataProvider->
dataType( band ) )
988 myRasterBandStats.
maximumValue = std::numeric_limits<uint16_t>::max();
994 myRasterBandStats.
maximumValue = std::numeric_limits<uint32_t>::max();
1000 myRasterBandStats.
minimumValue = std::numeric_limits<int16_t>::lowest();
1001 myRasterBandStats.
maximumValue = std::numeric_limits<int16_t>::max();
1007 myRasterBandStats.
minimumValue = std::numeric_limits<int32_t>::lowest();
1008 myRasterBandStats.
maximumValue = std::numeric_limits<int32_t>::max();
1014 myRasterBandStats.
minimumValue = std::numeric_limits<float_t>::lowest();
1015 myRasterBandStats.
maximumValue = std::numeric_limits<float_t>::max();
1021 myRasterBandStats.
minimumValue = std::numeric_limits<double_t>::lowest();
1022 myRasterBandStats.
maximumValue = std::numeric_limits<double_t>::max();
1047 QgsDebugMsgLevel( QStringLiteral(
"myLower = %1 myUpper = %2" ).arg( myLower ).arg( myUpper ), 4 );
1050 QgsDebugMsgLevel( QStringLiteral(
"band = %1 min = %2 max = %3" ).arg( band ).arg( min ).arg( max ), 4 );
1056 return mDataProvider ? mDataProvider->
ignoreExtents() :
false;
1061 return mTemporalProperties;
1070 generateLookupTableFlag,
1071 mPipe->renderer() );
1078 bool generateLookupTableFlag,
1082 if ( !rasterRenderer || !mDataProvider )
1088 QList<QgsContrastEnhancement *> myEnhancements;
1094 const QString rendererType = rasterRenderer->
type();
1095 if ( rendererType == QLatin1String(
"singlebandgray" ) )
1098 if ( !myGrayRenderer )
1102 myBands << myGrayRenderer->
grayBand();
1103 myRasterRenderer = myGrayRenderer;
1106 else if ( rendererType == QLatin1String(
"multibandcolor" ) )
1109 if ( !myMultiBandRenderer )
1114 myRasterRenderer = myMultiBandRenderer;
1117 else if ( rendererType == QLatin1String(
"singlebandpseudocolor" ) )
1120 if ( !myPseudoColorRenderer )
1124 myBands << myPseudoColorRenderer->
band();
1125 myRasterRenderer = myPseudoColorRenderer;
1126 myMinMaxOrigin = myPseudoColorRenderer->
minMaxOrigin();
1133 const auto constMyBands = myBands;
1134 for (
const int myBand : constMyBands )
1140 myEnhancement->setContrastEnhancementAlgorithm(
algorithm, generateLookupTableFlag );
1144 computeMinMax( myBand, myMinMaxOrigin, limits,
extent, sampleSize, min, max );
1146 if ( rendererType == QLatin1String(
"singlebandpseudocolor" ) )
1150 if ( myPseudoColorRenderer->
shader() )
1153 if ( colorRampShader )
1161 myEnhancement->setMinimumValue( min );
1162 myEnhancement->setMaximumValue( max );
1163 myEnhancements.append( myEnhancement.release() );
1168 myEnhancements.append(
nullptr );
1172 if ( rendererType == QLatin1String(
"singlebandgray" ) )
1176 else if ( rendererType == QLatin1String(
"multibandcolor" ) )
1184 qDeleteAll( myEnhancements );
1192 if ( myRasterRenderer )
1197 if ( rasterRenderer ==
renderer() )
1249 if ( mDataProvider &&
1250 mLastRectangleUsedByRefreshContrastEnhancementIfNeeded !=
extent &&
1254 refreshRenderer( rasterRenderer,
extent );
1260 if ( mDataProvider )
1276 mLastRectangleUsedByRefreshContrastEnhancementIfNeeded =
extent;
1279 computeMinMax( sbpcr->
band(),
1289 if ( colorRampShader )
1302 if ( colorRampShader )
1317 mLastRectangleUsedByRefreshContrastEnhancementIfNeeded =
extent;
1327 if ( singleBandRenderer )
1329 else if ( multiBandRenderer )
1353 if ( !
isValid() || !mDataProvider )
1355 QgsDebugMsgLevel( QStringLiteral(
"invoked with invalid layer or null mDataProvider" ), 3 );
1356 return customProperty( QStringLiteral(
"storedSubsetString" ) ).toString();
1367 if ( !
isValid() || !mDataProvider )
1369 QgsDebugMsgLevel( QStringLiteral(
"invoked with invalid layer or null mDataProvider or while editing" ), 3 );
1405 QString defaultLimits;
1410 key = QStringLiteral(
"singleBand" );
1420 key = QStringLiteral(
"multiBandSingleByte" );
1428 key = QStringLiteral(
"multiBandMultiByte" );
1436 if ( key.isEmpty() )
1438 QgsDebugMsgLevel( QStringLiteral(
"No default contrast enhancement for this drawing style" ), 2 );
1445 const QString myAlgorithmString = mySettings.
value(
"/Raster/defaultContrastEnhancementAlgorithm/" + key, defaultAlg ).toString();
1450 const QString myLimitsString = mySettings.
value(
"/Raster/defaultContrastEnhancementLimits/" + key, defaultLimits ).toString();
1472 if ( mDataProvider )
1474 QgsDebugMsgLevel( QStringLiteral(
"About to mDataProvider->setLayerOrder(layers)." ), 4 );
1483 if ( mDataProvider )
1485 QgsDebugMsgLevel( QStringLiteral(
"About to mDataProvider->setSubLayerVisibility(name, vis)." ), 4 );
1493 if ( !mDataProvider )
1500 if (
auto *lRenderer = mPipe->renderer() )
1502 if ( !lRenderer->accept( visitor ) )
1511 Q_UNUSED( errorMessage )
1513 QVariantMap localProps = QVariantMap( props );
1523 QDomElement constraintElem = doc.createElement( QStringLiteral(
"sld:LayerFeatureConstraints" ) );
1524 node.appendChild( constraintElem );
1526 const QDomElement featureTypeConstraintElem = doc.createElement( QStringLiteral(
"sld:FeatureTypeConstraint" ) );
1527 constraintElem.appendChild( featureTypeConstraintElem );
1529 QDomElement userStyleElem = doc.createElement( QStringLiteral(
"sld:UserStyle" ) );
1530 node.appendChild( userStyleElem );
1532 if ( !
name().isEmpty() )
1534 QDomElement nameElem = doc.createElement( QStringLiteral(
"sld:Name" ) );
1535 nameElem.appendChild( doc.createTextNode(
name() ) );
1536 userStyleElem.appendChild( nameElem );
1539 if ( !
abstract().isEmpty() )
1541 QDomElement abstractElem = doc.createElement( QStringLiteral(
"sld:Abstract" ) );
1542 abstractElem.appendChild( doc.createTextNode(
abstract() ) );
1543 userStyleElem.appendChild( abstractElem );
1546 if ( !
title().isEmpty() )
1548 QDomElement titleElem = doc.createElement( QStringLiteral(
"sld:Title" ) );
1549 titleElem.appendChild( doc.createTextNode(
title() ) );
1550 userStyleElem.appendChild( titleElem );
1553 QDomElement featureTypeStyleElem = doc.createElement( QStringLiteral(
"sld:FeatureTypeStyle" ) );
1554 userStyleElem.appendChild( featureTypeStyleElem );
1564 QDomElement typeStyleNameElem = doc.createElement( QStringLiteral(
"sld:Name" ) );
1565 featureTypeStyleElem.appendChild( typeStyleNameElem );
1568 QDomElement typeStyleRuleElem = doc.createElement( QStringLiteral(
"sld:Rule" ) );
1569 featureTypeStyleElem.appendChild( typeStyleRuleElem );
1577 QDomElement minScaleElem = doc.createElement( QStringLiteral(
"sld:MinScaleDenominator" ) );
1578 minScaleElem.appendChild( doc.createTextNode( QString::number(
maximumScale() ) ) );
1579 typeStyleRuleElem.appendChild( minScaleElem );
1582 QDomElement maxScaleElem = doc.createElement( QStringLiteral(
"sld:MaxScaleDenominator" ) );
1583 maxScaleElem.appendChild( doc.createTextNode( QString::number(
minimumScale() ) ) );
1584 typeStyleRuleElem.appendChild( maxScaleElem );
1588 mPipe->renderer()->toSld( doc, typeStyleRuleElem, localProps );
1593 const QDomNodeList elements = typeStyleRuleElem.elementsByTagName( QStringLiteral(
"sld:RasterSymbolizer" ) );
1594 if ( elements.size() != 0 )
1597 QDomElement rasterSymbolizerElem = elements.at( 0 ).toElement();
1600 auto vendorOptionWriter = [&]( QString
name, QString value )
1602 QDomElement vendorOptionElem = doc.createElement( QStringLiteral(
"sld:VendorOption" ) );
1603 vendorOptionElem.setAttribute( QStringLiteral(
"name" ),
name );
1604 vendorOptionElem.appendChild( doc.createTextNode( value ) );
1605 rasterSymbolizerElem.appendChild( vendorOptionElem );
1610 vendorOptionWriter( QStringLiteral(
"invertColors" ), QString::number( 1 ) );
1620 property = QStringLiteral(
"lightness" );
1623 property = QStringLiteral(
"luminosity" );
1626 property = QStringLiteral(
"average" );
1632 if ( !property.isEmpty() )
1633 vendorOptionWriter( QStringLiteral(
"grayScale" ), property );
1639 vendorOptionWriter( QStringLiteral(
"colorizeOn" ), QString::number(
hueSaturationFilter()->colorizeOn() ) );
1640 vendorOptionWriter( QStringLiteral(
"colorizeRed" ), QString::number(
hueSaturationFilter()->colorizeColor().red() ) );
1641 vendorOptionWriter( QStringLiteral(
"colorizeGreen" ), QString::number(
hueSaturationFilter()->colorizeColor().green() ) );
1642 vendorOptionWriter( QStringLiteral(
"colorizeBlue" ), QString::number(
hueSaturationFilter()->colorizeColor().blue() ) );
1644 vendorOptionWriter( QStringLiteral(
"colorizeStrength" ), QString::number(
hueSaturationFilter()->colorizeStrength() / 100.0 ) );
1645 vendorOptionWriter( QStringLiteral(
"saturation" ), QString::number(
hueSaturationFilter()->colorizeColor().saturationF() ) );
1654 const double sF = ( s - ( -100.0 ) ) / ( 100.0 - ( -100.0 ) );
1655 vendorOptionWriter( QStringLiteral(
"saturation" ), QString::number( sF ) );
1664 const double bF = ( b - ( -255.0 ) ) / ( 255.0 - ( -255.0 ) );
1665 vendorOptionWriter( QStringLiteral(
"brightness" ), QString::number( bF ) );
1673 const double cF = (
c - ( -100.0 ) ) / ( 100.0 - ( -100.0 ) );
1674 vendorOptionWriter( QStringLiteral(
"contrast" ), QString::number( cF ) );
1688 if ( newProps.contains( QStringLiteral(
"contrast" ) ) )
1691 double contrast = newProps[ QStringLiteral(
"contrast" ) ].toDouble();
1692 double percentage = ( contrast - ( -100.0 ) ) / ( 100.0 - ( -100.0 ) );
1693 if ( percentage <= 0.5 )
1696 gamma = percentage / 0.5;
1703 QDomElement globalContrastEnhancementElem = doc.createElement( QStringLiteral(
"sld:ContrastEnhancement" ) );
1704 rasterSymolizerElem.appendChild( globalContrastEnhancementElem );
1706 QDomElement gammaValueElem = doc.createElement( QStringLiteral(
"sld:GammaValue" ) );
1707 gammaValueElem.appendChild( doc.createTextNode( QString::number( gamma ) ) );
1708 globalContrastEnhancementElem.appendChild( gammaValueElem );
1732 return mPipe->renderer();
1737 return mPipe->resampleFilter();
1742 return mPipe->brightnessFilter();
1747 return mPipe->hueSaturationFilter();
1761 if ( mDataProvider )
1768 if ( ! mDataProvider )
1769 return QStringList();
1777 QImage image( size, format );
1782 if ( image.format() == QImage::Format_Indexed8 )
1784 image.setColor( 0, bgColor.rgba() );
1789 image.fill( bgColor );
1794 double mapUnitsPerPixel;
1800 mapUnitsPerPixel =
extent.
width() / image.width();
1801 y = ( image.height() -
extent.
height() / mapUnitsPerPixel ) / 2;
1806 x = ( image.width() -
extent.
width() / mapUnitsPerPixel ) / 2;
1809 const double pixelWidth =
extent.
width() / mapUnitsPerPixel;
1810 const double pixelHeight =
extent.
height() / mapUnitsPerPixel;
1814 rasterViewPort->
mWidth = image.width();
1815 rasterViewPort->
mHeight = image.height();
1823 QPainter *painter =
new QPainter( &image );
1824 draw( painter, rasterViewPort, mapToPixel );
1825 delete rasterViewPort;
1847 Q_UNUSED( errorMessage )
1850 QDomElement rasterRendererElem;
1852 const QDomElement layerElement = layer_node.toElement();
1859 QDomNode pipeNode = layer_node.firstChildElement( QStringLiteral(
"pipe" ) );
1860 if ( pipeNode.isNull() )
1862 pipeNode = layer_node;
1866 if ( !layer_node.firstChildElement( QStringLiteral(
"rasterproperties" ) ).isNull() )
1869 QDomNode layerNodeCopy = layer_node.cloneNode();
1870 QDomDocument doc = layerNodeCopy.ownerDocument();
1871 QDomElement rasterPropertiesElem = layerNodeCopy.firstChildElement( QStringLiteral(
"rasterproperties" ) );
1874 rasterRendererElem = layerNodeCopy.firstChildElement( QStringLiteral(
"rasterrenderer" ) );
1879 rasterRendererElem = pipeNode.firstChildElement( QStringLiteral(
"rasterrenderer" ) );
1882 if ( !rasterRendererElem.isNull() )
1884 const QString rendererType = rasterRendererElem.attribute( QStringLiteral(
"type" ) );
1898 const QDomElement brightnessElem = pipeNode.firstChildElement( QStringLiteral(
"brightnesscontrast" ) );
1899 if ( !brightnessElem.isNull() )
1909 const QDomElement hueSaturationElem = pipeNode.firstChildElement( QStringLiteral(
"huesaturation" ) );
1910 if ( !hueSaturationElem.isNull() )
1920 const QDomElement resampleElem = pipeNode.firstChildElement( QStringLiteral(
"rasterresampler" ) );
1921 if ( !resampleElem.isNull() )
1927 if ( mDataProvider )
1929 const QDomElement providerElem = pipeNode.firstChildElement( QStringLiteral(
"provider" ) );
1930 if ( !providerElem.isNull() )
1932 mDataProvider->
readXml( providerElem );
1937 const QDomNode resamplingStageElement = pipeNode.namedItem( QStringLiteral(
"resamplingStage" ) );
1938 if ( !resamplingStageElement.isNull() )
1940 const QDomElement e = resamplingStageElement.toElement();
1941 if ( e.text() == QLatin1String(
"provider" ) )
1943 else if ( e.text() == QLatin1String(
"resamplingFilter" ) )
1948 const QDomNode blendModeNode = layer_node.namedItem( QStringLiteral(
"blendMode" ) );
1949 if ( !blendModeNode.isNull() )
1951 const QDomElement e = blendModeNode.toElement();
1955 const QDomElement elemDataDefinedProperties = layer_node.firstChildElement( QStringLiteral(
"pipe-data-defined-properties" ) );
1956 if ( !elemDataDefinedProperties.isNull() )
1966 return readSymbology( node, errorMessage, context, categories );
1975 const QDomNode pkeyNode = layer_node.namedItem( QStringLiteral(
"provider" ) );
1977 if ( pkeyNode.isNull() )
1983 const QDomElement pkeyElt = pkeyNode.toElement();
1997 const QDomNode rpNode = layer_node.namedItem( QStringLiteral(
"rasterproperties" ) );
2003 if ( !
mDataSource.contains( QLatin1String(
"crs=" ) ) && !
mDataSource.contains( QLatin1String(
"format=" ) ) )
2005 QgsDebugMsgLevel( QStringLiteral(
"Old WMS URI format detected -> adding params" ), 4 );
2008 QDomElement layerElement = rpNode.firstChildElement( QStringLiteral(
"wmsSublayer" ) );
2009 while ( !layerElement.isNull() )
2014 uri.
setParam( QStringLiteral(
"layers" ), layerElement.namedItem( QStringLiteral(
"name" ) ).toElement().text() );
2017 uri.
setParam( QStringLiteral(
"styles" ), layerElement.namedItem( QStringLiteral(
"style" ) ).toElement().text() );
2019 layerElement = layerElement.nextSiblingElement( QStringLiteral(
"wmsSublayer" ) );
2023 uri.
setParam( QStringLiteral(
"format" ), rpNode.namedItem( QStringLiteral(
"wmsFormat" ) ).toElement().text() );
2027 uri.
setParam( QStringLiteral(
"crs" ),
crs().authid() );
2036 QgsDataProvider::ReadFlags
flags = QgsDataProvider::ReadFlags();
2044 const QDomNode extentNode = layer_node.namedItem( QStringLiteral(
"extent" ) );
2045 if ( !extentNode.isNull() )
2060 mOriginalStyleElement = layer_node.namedItem( QStringLiteral(
"originalStyle" ) ).firstChildElement();
2061 if ( mOriginalStyleElement.isNull() )
2062 mOriginalStyleElement = layer_node.toElement();
2063 mOriginalStyleDocument = layer_node.ownerDocument();
2065 if ( ! mDataProvider )
2089 QDomNode stampNode = layer_node.namedItem(
"timestamp" );
2090 if ( !stampNode.isNull() )
2092 QDateTime stamp = QDateTime::fromString( stampNode.toElement().text(), Qt::ISODate );
2094 if ( stamp < mDataProvider->dataTimestamp() )
2097 closeDataProvider();
2100 if ( !
isValid() )
return false;
2106 const QDomElement noDataElement = layer_node.firstChildElement( QStringLiteral(
"noData" ) );
2108 const QDomNodeList noDataBandList = noDataElement.elementsByTagName( QStringLiteral(
"noDataList" ) );
2110 for (
int i = 0; i < noDataBandList.size(); ++i )
2112 const QDomElement bandElement = noDataBandList.at( i ).toElement();
2114 const int bandNo = bandElement.attribute( QStringLiteral(
"bandNo" ) ).toInt( &ok );
2116 if ( ok && ( bandNo > 0 ) && ( bandNo <= mDataProvider->
bandCount() ) )
2118 mDataProvider->
setUseSourceNoDataValue( bandNo, bandElement.attribute( QStringLiteral(
"useSrcNoData" ) ).toInt() );
2121 const QDomNodeList rangeList = bandElement.elementsByTagName( QStringLiteral(
"noDataRange" ) );
2123 myNoDataRangeList.reserve( rangeList.size() );
2124 for (
int j = 0; j < rangeList.size(); ++j )
2126 const QDomElement rangeElement = rangeList.at( j ).toElement();
2127 const QgsRasterRange myNoDataRange( rangeElement.attribute( QStringLiteral(
"min" ) ).toDouble(),
2128 rangeElement.attribute( QStringLiteral(
"max" ) ).toDouble() );
2129 QgsDebugMsgLevel( QStringLiteral(
"min = %1 %2" ).arg( rangeElement.attribute(
"min" ) ).arg( myNoDataRange.
min() ), 4 );
2130 myNoDataRangeList << myNoDataRange;
2144 Q_UNUSED( errorMessage )
2147 QDomElement layerElement = layer_node.toElement();
2152 QDomElement pipeElement = document.createElement( QStringLiteral(
"pipe" ) );
2154 for (
int i = 0; i < mPipe->size(); i++ )
2157 if ( !interface )
continue;
2158 interface->writeXml( document, pipeElement );
2161 QDomElement elemDataDefinedProperties = document.createElement( QStringLiteral(
"pipe-data-defined-properties" ) );
2163 layer_node.appendChild( elemDataDefinedProperties );
2165 QDomElement resamplingStageElement = document.createElement( QStringLiteral(
"resamplingStage" ) );
2167 resamplingStageElement.appendChild( resamplingStageText );
2168 pipeElement.appendChild( resamplingStageElement );
2170 layer_node.appendChild( pipeElement );
2172 if ( !
isValid() && !mOriginalStyleElement.isNull() )
2174 QDomElement originalStyleElement = document.createElement( QStringLiteral(
"originalStyle" ) );
2175 originalStyleElement.appendChild( mOriginalStyleElement );
2176 layer_node.appendChild( originalStyleElement );
2180 QDomElement blendModeElement = document.createElement( QStringLiteral(
"blendMode" ) );
2182 blendModeElement.appendChild( blendModeText );
2183 layer_node.appendChild( blendModeElement );
2191 return writeSymbology( node, doc, errorMessage, context, categories );
2199 QDomDocument &document,
2202 if ( !mDataProvider )
2207 QDomElement mapLayerNode = layer_node.toElement();
2209 if ( mapLayerNode.isNull() ||
"maplayer" != mapLayerNode.nodeName() )
2219 QDomElement provider = document.createElement( QStringLiteral(
"provider" ) );
2220 const QDomText providerText = document.createTextNode(
mProviderKey );
2221 provider.appendChild( providerText );
2222 layer_node.appendChild( provider );
2225 QDomElement noData = document.createElement( QStringLiteral(
"noData" ) );
2227 for (
int bandNo = 1; bandNo <= mDataProvider->
bandCount(); bandNo++ )
2229 QDomElement noDataRangeList = document.createElement( QStringLiteral(
"noDataList" ) );
2230 noDataRangeList.setAttribute( QStringLiteral(
"bandNo" ), bandNo );
2231 noDataRangeList.setAttribute( QStringLiteral(
"useSrcNoData" ), mDataProvider->
useSourceNoDataValue( bandNo ) );
2233 const auto constUserNoDataValues = mDataProvider->
userNoDataValues( bandNo );
2236 QDomElement noDataRange = document.createElement( QStringLiteral(
"noDataRange" ) );
2240 noDataRangeList.appendChild( noDataRange );
2243 noData.appendChild( noDataRangeList );
2246 if ( noData.hasChildNodes() )
2248 layer_node.appendChild( noData );
2257 return writeSymbology( layer_node, document, errorMsg, context );
2261 static bool _parseGpkgColons(
const QString &src, QString &filename, QString &tablename )
2266 QStringList lst = src.split(
':' );
2267 if ( lst.count() != 3 && lst.count() != 4 )
2270 tablename = lst.last();
2271 if ( lst.count() == 3 )
2276 else if ( lst.count() == 4 && lst[1].count() == 1 && ( lst[2][0] ==
'/' || lst[2][0] ==
'\\' ) )
2279 filename = lst[1] +
":" + lst[2];
2289 bool handled =
false;
2294 if ( src.startsWith( QLatin1String(
"NETCDF:" ) ) )
2298 const QRegularExpression netcdfEncodedRegExp( QRegularExpression::anchoredPattern(
"NETCDF:(.+):([^:]+)" ) );
2299 const QRegularExpressionMatch match = netcdfEncodedRegExp.match( src );
2300 if ( match.hasMatch() )
2302 QString filename = match.captured( 1 );
2303 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2304 filename = filename.mid( 1, filename.length() - 2 );
2309 else if ( src.startsWith( QLatin1String(
"GPKG:" ) ) )
2312 QString filename, tablename;
2313 if ( _parseGpkgColons( src, filename, tablename ) )
2316 src = QStringLiteral(
"GPKG:%1:%2" ).arg( filename, tablename );
2320 else if ( src.startsWith( QLatin1String(
"HDF4_SDS:" ) ) )
2324 const QRegularExpression hdf4EncodedRegExp( QRegularExpression::anchoredPattern(
"HDF4_SDS:([^:]+):(.+):([^:]+)" ) );
2325 const QRegularExpressionMatch match = hdf4EncodedRegExp.match( src );
2326 if ( match.hasMatch() )
2328 QString filename = match.captured( 2 );
2329 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2330 filename = filename.mid( 1, filename.length() - 2 );
2331 src =
"HDF4_SDS:" + match.captured( 1 ) +
":\"" + context.
pathResolver().
writePath( filename ) +
"\":" + match.captured( 3 );
2335 else if ( src.startsWith( QLatin1String(
"HDF5:" ) ) )
2339 const QRegularExpression hdf5EncodedRegExp( QRegularExpression::anchoredPattern(
"HDF5:(.+):([^:]+)" ) );
2340 const QRegularExpressionMatch match = hdf5EncodedRegExp.match( src );
2341 if ( match.hasMatch() )
2343 QString filename = match.captured( 1 );
2344 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2345 filename = filename.mid( 1, filename.length() - 2 );
2350 else if ( src.contains( QRegularExpression(
"^(NITF_IM|RADARSAT_2_CALIB):" ) ) )
2354 const QRegularExpression nitfRadarsatEncodedRegExp( QRegularExpression::anchoredPattern(
"([^:]+):([^:]+):(.+)" ) );
2355 const QRegularExpressionMatch match = nitfRadarsatEncodedRegExp.match( src );
2356 if ( match.hasMatch() )
2358 src = match.captured( 1 ) +
':' + match.captured( 2 ) +
':' + context.
pathResolver().
writePath( match.captured( 3 ) );
2368 const QUrl srcUrl( uri.
param( QStringLiteral(
"url" ) ) );
2369 if ( srcUrl.isLocalFile() )
2374 uri.
setParam( QStringLiteral(
"url" ), QUrl::fromLocalFile( relSrcUrl ).toString() );
2401 if ( provider == QLatin1String(
"wms" ) )
2415 if ( !src.contains( QLatin1String(
"type=" ) ) &&
2416 !src.contains( QLatin1String(
"crs=" ) ) && !src.contains( QLatin1String(
"format=" ) ) )
2418 QgsDebugMsgLevel( QStringLiteral(
"Old WMS URI format detected -> converting to new format" ), 2 );
2420 if ( !src.startsWith( QLatin1String(
"http:" ) ) )
2422 const QStringList parts = src.split(
',' );
2423 QStringListIterator iter( parts );
2424 while ( iter.hasNext() )
2426 const QString item = iter.next();
2427 if ( item.startsWith( QLatin1String(
"username=" ) ) )
2431 else if ( item.startsWith( QLatin1String(
"password=" ) ) )
2435 else if ( item.startsWith( QLatin1String(
"tiled=" ) ) )
2441 QStringList params = item.mid( 6 ).split(
';' );
2443 if ( params.size() == 2 )
2445 uri.
setParam( QStringLiteral(
"maxWidth" ), params.takeFirst() );
2446 uri.
setParam( QStringLiteral(
"maxHeight" ), params.takeFirst() );
2448 else if ( params.size() > 2 )
2452 uri.
setParam( QStringLiteral(
"tileMatrixSet" ), QString() );
2455 else if ( item.startsWith( QLatin1String(
"featureCount=" ) ) )
2457 uri.
setParam( QStringLiteral(
"featureCount" ), item.mid( 13 ) );
2459 else if ( item.startsWith( QLatin1String(
"url=" ) ) )
2461 uri.
setParam( QStringLiteral(
"url" ), item.mid( 4 ) );
2463 else if ( item.startsWith( QLatin1String(
"ignoreUrl=" ) ) )
2465 uri.
setParam( QStringLiteral(
"ignoreUrl" ), item.mid( 10 ).split(
';' ) );
2471 uri.
setParam( QStringLiteral(
"url" ), src );
2482 const QUrl srcUrl( uri.
param( QStringLiteral(
"url" ) ) );
2483 if ( srcUrl.isLocalFile() )
2487 uri.
setParam( QStringLiteral(
"url" ), QUrl::fromLocalFile( absSrcUrl ).toString() );
2494 bool handled =
false;
2496 if ( provider == QLatin1String(
"gdal" ) )
2498 if ( src.startsWith( QLatin1String(
"NETCDF:" ) ) )
2502 const QRegularExpression netcdfDecodedRegExp( QRegularExpression::anchoredPattern(
"NETCDF:(.+):([^:]+)" ) );
2503 const QRegularExpressionMatch match = netcdfDecodedRegExp.match( src );
2504 if ( match.hasMatch() )
2506 QString filename = match.captured( 1 );
2507 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2508 filename = filename.mid( 1, filename.length() - 2 );
2513 else if ( src.startsWith( QLatin1String(
"GPKG:" ) ) )
2516 QString filename, tablename;
2517 if ( _parseGpkgColons( src, filename, tablename ) )
2520 src = QStringLiteral(
"GPKG:%1:%2" ).arg( filename, tablename );
2524 else if ( src.startsWith( QLatin1String(
"HDF4_SDS:" ) ) )
2528 const QRegularExpression hdf4DecodedRegExp( QRegularExpression::anchoredPattern(
"HDF4_SDS:([^:]+):(.+):([^:]+)" ) );
2529 const QRegularExpressionMatch match = hdf4DecodedRegExp.match( src );
2530 if ( match.hasMatch() )
2532 QString filename = match.captured( 2 );
2533 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2534 filename = filename.mid( 1, filename.length() - 2 );
2535 src =
"HDF4_SDS:" + match.captured( 1 ) +
":\"" + context.
pathResolver().
readPath( filename ) +
"\":" + match.captured( 3 );
2539 else if ( src.startsWith( QLatin1String(
"HDF5:" ) ) )
2543 const QRegularExpression hdf5DecodedRegExp( QRegularExpression::anchoredPattern(
"HDF5:(.+):([^:]+)" ) );
2544 const QRegularExpressionMatch match = hdf5DecodedRegExp.match( src );
2545 if ( match.hasMatch() )
2547 QString filename = match.captured( 1 );
2548 if ( filename.startsWith(
'"' ) && filename.endsWith(
'"' ) )
2549 filename = filename.mid( 1, filename.length() - 2 );
2554 else if ( src.contains( QRegularExpression(
"^(NITF_IM|RADARSAT_2_CALIB):" ) ) )
2558 const QRegularExpression niftRadarsatDecodedRegExp( QRegularExpression::anchoredPattern(
"([^:]+):([^:]+):(.+)" ) );
2559 const QRegularExpressionMatch match = niftRadarsatDecodedRegExp.match( src );
2560 if ( match.hasMatch() )
2562 src = match.captured( 1 ) +
':' + match.captured( 2 ) +
':' + context.
pathResolver().
readPath( match.captured( 3 ) );
2568 if ( provider == QLatin1String(
"virtualraster" ) )
2589 if ( !mDataProvider )
return 0;
2590 return mDataProvider->
xSize();
2595 if ( !mDataProvider )
return 0;
2596 return mDataProvider->
ySize();
2601 mPipe->setResamplingStage( stage );
2606 return mPipe->resamplingStage();
2614 bool QgsRasterLayer::update()
2621 closeDataProvider();
2624 QgsDataProvider::ReadFlags
flags = QgsDataProvider::ReadFlags();
static QString version()
Version string.
RasterResamplingStage
Stage at which raster resampling occurs.
@ Provider
Resampling occurs in Provider.
@ ResampleFilter
Resampling occurs in ResamplingFilter.
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.
@ 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)
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.
void readXml(const QDomElement &filterElem) override
Sets base class members from xml. Usually called from create() methods of subclasses.
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 and new RGB value based on one input value.
@ Interpolated
Interpolates the color between two class breaks linearly.
@ Discrete
Assigns the color of the higher class for every pixel between two class breaks.
void classifyColorRamp(int classes=0, int band=-1, const QgsRectangle &extent=QgsRectangle(), QgsRasterInterface *input=nullptr)
Classify color ramp shader.
void setColorRampItemList(const QList< QgsColorRampShader::ColorRampItem > &list)
Sets a custom colormap.
void setColorRampType(QgsColorRampShader::Type colorRampType)
Sets the color ramp type.
Manipulates raster or point cloud pixel values so that they enhanceContrast or clip into a specified ...
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used.
@ 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
This class represents a coordinate reference system (CRS).
@ WKT_PREFERRED
Preferred format, matching the most recent WKT ISO standard. Currently an alias to WKT2_2019,...
Contains information about the context in which a coordinate transform is executed.
Abstract base class for spatial data provider implementations.
virtual void setLayerOrder(const QStringList &layers)
Reorder the list of layer names to be rendered by this provider (in order from bottom to top)
@ FlagLoadDefaultStyle
Reset the layer's style to the default for the datasource.
@ FlagTrustDataSource
Trust datasource config (primary key unicity, geometry type and srid, etc). Improves provider load ti...
@ SkipGetExtent
Skip the extent from provider.
QgsCoordinateTransformContext transformContext() const
Returns data provider coordinate transform context.
virtual QgsCoordinateReferenceSystem crs() const =0
Returns the coordinate system for the data source.
virtual QString subsetString() const
Returns the subset definition string (typically sql) currently in use by the layer and used by the pr...
virtual QgsLayerMetadata layerMetadata() const
Returns layer metadata collected from the provider's source.
virtual bool isValid() const =0
Returns true if this is a valid layer.
virtual void setDataSourceUri(const QString &uri)
Set the data source specification.
virtual QgsError error() const
Gets current status error.
virtual bool supportsSubsetString() const
Returns true if the provider supports setting of subset strings.
virtual QString dataSourceUri(bool expandAuthConfig=false) const
Gets the data source specification.
virtual bool setSubsetString(const QString &subset, bool updateFeatureCount=true)
Set the subset string used to create a subset of features in the layer.
virtual void reloadData()
Reloads the data from the source for providers with data caches to synchronize, changes in the data s...
virtual void setSubLayerVisibility(const QString &name, bool vis)
Set the visibility of the given sublayer name.
virtual void setTransformContext(const QgsCoordinateTransformContext &transformContext)
Sets data coordinate transform context to transformContext.
Class for storing the component parts of a RDBMS data source URI (e.g.
QByteArray encodedUri() const
Returns the complete encoded URI as a byte array.
int removeParam(const QString &key)
Removes a generic parameter by key.
void setEncodedUri(const QByteArray &uri)
Sets the complete encoded uri.
void setUsername(const QString &username)
Sets the username for the URI.
QString param(const QString &key) const
Returns a generic parameter value corresponding to the specified key.
void setParam(const QString &key, const QString &value)
Sets a generic parameter value on the URI.
void setPassword(const QString &password)
Sets the password for the URI.
Color and saturation filter pipe for rasters.
bool invertColors() const
Returns true if the filter inverts colors.
void readXml(const QDomElement &filterElem) override
Sets base class members from xml. Usually called from create() methods of subclasses.
static QString typeToString(QgsMapLayerType type)
Converts a map layer type to a string value.
static QgsMapLayerLegend * defaultRasterLegend(QgsRasterLayer *rl)
Create new legend implementation for raster layer.
Base class for utility classes that encapsulate information necessary for rendering of map layers.
void writeXml(QDomNode &layer_node, QDomDocument &document) const
Saves server properties to xml under the layer node.
Base class for storage of map layer temporal properties.
Base class for all map layer types.
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.
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.
QgsMapLayer::LayerFlags flags() const
Returns the flags for this layer.
QgsCoordinateReferenceSystem crs
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...
QString mLayerName
Name of the layer - used for display.
QString crsHtmlMetadata() const
Returns a HTML fragment containing the layer's CRS metadata, for use in the htmlMetadata() method.
QgsLayerMetadata metadata
QgsMapLayerServerProperties * serverProperties()
Returns QGIS Server Properties for the map layer.
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)
void readCustomProperties(const QDomNode &layerNode, const QString &keyStartsWith=QString())
Read custom properties from project file.
virtual void setMetadata(const QgsLayerMetadata &metadata)
Sets the layer's metadata store.
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...
void rendererChanged()
Signal emitted when renderer is changed.
QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
virtual QgsError error() const
Gets current status error.
bool hasScaleBasedVisibility() const
Returns whether scale based visibility is enabled for the layer.
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
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...
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.
@ 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.
void setDataSource(const QString &dataSource, const QString &baseName, const QString &provider, bool loadDefaultStyleFlag=false)
Updates the data source of the layer.
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 setProviderType(const QString &providerType)
Sets the providerType (provider key)
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)
Adds a message to the log instance (and creates it if necessary).
Renderer for multiband images with the color components.
const QgsContrastEnhancement * redContrastEnhancement() const
Returns the contrast enhancement to use for the red channel.
const QgsContrastEnhancement * blueContrastEnhancement() const
Returns the contrast enhancement to use 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 * greenContrastEnhancement() const
Returns the contrast enhancement to use for the green channel.
static QgsPainting::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a BlendMode corresponding to a QPainter::CompositionMode.
static QPainter::CompositionMode getCompositionMode(QgsPainting::BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a BlendMode.
BlendMode
Blending modes enum defining the available composition modes that can be used when rendering a layer.
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.
A class to represent a 2D point.
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
The RasterBandStats struct is a container for statistics about a single raster band.
int statsGathered
Collected statistics.
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.
double maximumValue
The maximum cell value in the raster band.
static int typeSize(Qgis::DataType dataType) SIP_HOLDGIL
Returns the size in bytes for the specified dataType.
static QString printValue(double value)
Print double value with all necessary significant digits.
Base class for raster data providers.
virtual QList< QgsColorRampShader::ColorRampItem > colorTable(int bandNo) const
static QString encodeVirtualRasterProviderUri(const VirtualRasterParameters &parts)
Encodes the URI starting from the struct .
virtual bool useSourceNoDataValue(int bandNo) const
Returns the source nodata value usage.
static QgsRasterDataProvider::VirtualRasterParameters decodeVirtualRasterProviderUri(const QString &uri, bool *ok=nullptr)
Decodes the URI returning a struct with all the parameters for QgsVirtualRasterProvider class.
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...
virtual void setUseSourceNoDataValue(int bandNo, bool use)
Sets the source nodata value usage.
void readXml(const QDomElement &filterElem) override
Sets base class members from xml. Usually called from create() methods of subclasses.
virtual QgsRasterDataProvider::ProviderCapabilities providerCapabilities() const
Returns flags containing the supported capabilities of the data provider.
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.
virtual bool ignoreExtents() const
Returns true if the extents reported by the data provider are not reliable and it's possible that the...
virtual bool setMaxOversampling(double factor)
Sets maximum oversampling factor for zoomed-out operations.
Qgis::DataType dataType(int bandNo) const override=0
Returns data type for the band specified by number.
QStringList subLayers() const override
Returns the sublayers of this layer - useful for providers that manage their own layers,...
static QString identifyFormatName(QgsRaster::IdentifyFormat format)
@ ReadLayerMetadata
Provider can read layer metadata from data store. Since QGIS 3.0. See QgsDataProvider::layerMetadata(...
@ ProviderHintBenefitsFromResampling
Provider benefits from resampling and should apply user default resampling settings (since QGIS 3....
@ ProviderHintCanPerformProviderResampling
Provider can perform resampling (to be opposed to post rendering resampling) (since QGIS 3....
QDateTime dataTimestamp() const override
Current time stamp of data source.
virtual QString htmlMetadata()=0
Returns metadata in a format suitable for feeding directly into a subset of the GUI raster properties...
virtual int colorInterpretation(int bandNo) const
Returns data type for the band specified by number.
void statusChanged(const QString &) const
Emit a message to be displayed on status bar, usually used by network providers (WMS,...
virtual QgsRasterRangeList userNoDataValues(int bandNo) const
Returns a list of user no data value ranges.
virtual bool setZoomedInResamplingMethod(ResamplingMethod method)
Set resampling method to apply for zoomed-in operations.
QgsRasterDataProviderTemporalCapabilities * temporalCapabilities() override
Returns the provider's temporal capabilities.
@ Bilinear
Bilinear (2x2 kernel) resampling.
@ Cubic
Cubic Convolution Approximation (4x4 kernel) resampling.
virtual void setUserNoDataValue(int bandNo, const QgsRasterRangeList &noData)
virtual bool setZoomedOutResamplingMethod(ResamplingMethod method)
Set resampling method to apply for zoomed-out operations.
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.
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.
@ IdentifyValue
Numerical values.
@ IdentifyFeature
WMS GML -> feature.
@ Size
Original data source size (and thus resolution) is known, it is not always available,...
virtual QgsRasterInterface * input() const
Current input.
virtual int xSize() const
Gets raster size.
virtual QString generateBandName(int bandNumber) const
helper function to create zero padded band names
virtual int bandCount() const =0
Gets number of bands.
virtual QgsRasterBandStats bandStatistics(int bandNo, int stats=QgsRasterBandStats::All, const QgsRectangle &extent=QgsRectangle(), int sampleSize=0, QgsRasterBlockFeedback *feedback=nullptr)
Returns the band statistics.
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).
virtual int capabilities() const
Returns a bitmask containing the supported capabilities.
virtual int ySize() const
Iterator for sequentially processing raster cells.
Implementation of threaded rendering for raster layers.
Implementation of map layer temporal properties for raster layers.
void setDefaultsFromDataProviderTemporalCapabilities(const QgsDataProviderTemporalCapabilities *capabilities) override
Sets the layers temporal settings to appropriate defaults based on a provider's temporal capabilities...
Represents a raster layer.
QString htmlMetadata() const override
Obtain a formatted HTML string containing assorted metadata for this layer.
bool defaultContrastEnhancementSettings(QgsContrastEnhancement::ContrastEnhancementAlgorithm &myAlgorithm, QgsRasterMinMaxOrigin::Limits &myLimits) const
Returns default contrast enhancement settings for that type of raster.
void subsetStringChanged()
Emitted when the layer's subset string has changed.
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...
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)
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
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.
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.
void refreshContrastEnhancement(const QgsRectangle &extent)
Refresh contrast enhancement with new extent.
int height() const
Returns the height of the (unclipped) raster.
void setOpacity(double opacity) FINAL
Sets the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
Q_DECL_DEPRECATED void setDataProvider(const QString &provider)
Set the data provider.
QgsRasterPipe * pipe()
Returns the raster pipe.
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.
void refreshRendererIfNeeded(QgsRasterRenderer *rasterRenderer, const QgsRectangle &extent)
Refresh renderer with new extent, if needed.
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...
void setSubLayerVisibility(const QString &name, bool vis) override
Set the visibility of the given sublayer name.
virtual QString subsetString() const
Returns the string (typically sql) used to define a subset of the layer.
static const QgsRasterMinMaxOrigin::Limits SINGLE_BAND_MIN_MAX_LIMITS
Default enhancement limits for single band raster.
QgsBrightnessContrastFilter * brightnessFilter() const
Returns the raster's brightness/contrast filter.
static const QgsRasterMinMaxOrigin::Limits MULTIPLE_BAND_MULTI_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type different from Byte.
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
double opacity() const FINAL
Returns the opacity for the layer, where opacity is a value between 0 (totally transparent) and 1....
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.
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 QgsRasterMinMaxOrigin::Limits MULTIPLE_BAND_SINGLE_BYTE_MIN_MAX_LIMITS
Default enhancement limits for multiple band raster of type Byte.
static const QgsContrastEnhancement::ContrastEnhancementAlgorithm MULTIPLE_BAND_MULTI_BYTE_ENHANCEMENT_ALGORITHM
Default enhancement algorithm for multiple band raster of type different from Byte.
bool readXml(const QDomNode &layer_node, QgsReadWriteContext &context) override
Called by readLayerXML(), used by children to read state specific to them from project files.
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...
double rasterUnitsPerPixelY() const
Returns the number of raster units per each raster pixel in Y axis.
QString providerType() const
[ data provider interface ] Which provider is being used for this Raster Layer?
int width() const
Returns the width of the (unclipped) raster.
bool readSymbology(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories) override
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...
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.
virtual 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.
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
QPixmap paletteAsPixmap(int bandNumber=1)
Returns a 100x100 pixmap of the color palette.
This class describes the origin of min/max values.
void setExtent(QgsRasterMinMaxOrigin::Extent extent)
Sets the extent.
static QString limitsString(Limits limits)
Returns a string to serialize Limits.
double cumulativeCutLower() const
Returns the lower bound of cumulative cut method (between 0 and 1).
QgsRasterMinMaxOrigin::Limits limits() const
Returns the raster limits.
double stdDevFactor() const
Returns the factor f so that the min/max range is [ mean - f * stddev , mean + f * stddev ].
void setLimits(QgsRasterMinMaxOrigin::Limits limits)
Sets the limits.
@ UpdatedCanvas
Constantly updated extent of the canvas is used to compute statistics.
@ CurrentCanvas
Current extent of the canvas (at the time of computation) is used to compute statistics.
@ WholeRaster
Whole raster is used to compute statistics.
double cumulativeCutUpper() const
Returns the upper bound of cumulative cut method (between 0 and 1).
Limits
This enumerator describes the limits used to compute min/max values.
@ StdDev
Range is [ mean - stdDevFactor() * stddev, mean + stdDevFactor() * stddev ].
@ MinMax
Real min-max values.
@ CumulativeCut
Range is [ min + cumulativeCutLower() * (max - min), min + cumulativeCutUpper() * (max - min) ].
static Limits limitsFromString(const QString &limits)
Deserialize Limits.
QgsRasterMinMaxOrigin::Extent extent() const
Returns the raster extent.
Contains a pipeline of raster interfaces for sequential raster processing.
bool set(QgsRasterInterface *interface)
Inserts a new known interface in default place or replace interface of the same role if it already ex...
static QgsPropertiesDefinition propertyDefinitions()
Returns the definitions for data defined properties available for use in raster pipes.
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the pipe's property collection, used for data defined overrides.
QgsRasterProjector implements approximate projection support for it calculates grid of points in sour...
Q_DECL_DEPRECATED void setCrs(const QgsCoordinateReferenceSystem &srcCRS, const QgsCoordinateReferenceSystem &destCRS, int srcDatumTransform=-1, int destDatumTransform=-1)
Sets the source and destination CRS.
Raster values range container.
double min() const
Returns the minimum value for the range.
Raster renderer pipe that applies colors to a raster.
virtual QString type() const
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 QList< QPair< QString, QColor > > legendSymbologyItems() const
Returns symbology items if provided by renderer.
Resample filter pipe for rasters.
void setZoomedOutResampler(QgsRasterResampler *r)
Sets resampler for zoomed out scales. Takes ownership of the object.
void setMaxOversampling(double os)
void readXml(const QDomElement &filterElem) override
Sets base class members from xml. Usually called from create() methods of subclasses.
void setZoomedInResampler(QgsRasterResampler *r)
Sets resampler for zoomed in scales. Takes ownership of the object.
Interface for all raster shaders.
QgsRasterShaderFunction * rasterShaderFunction()
void setRasterShaderFunction(QgsRasterShaderFunction *function)
A public method that allows the user to set their own shader function.
@ IdentifyFormatUndefined
@ PaletteIndex
Paletted (see associated color table)
@ AlphaBand
Alpha (0=transparent, 255=opaque)
@ ContinuousPalette
Continuous palette, QGIS addition, GRASS.
DrawingStyle
This enumerator describes the different kinds of drawing we can do.
@ SingleBandColorDataStyle
The class is used as a container of context for various read/write operations on other objects.
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.
QString toString(int precision=16) const
Returns a string representation of form xmin,ymin : xmax,ymax Coordinates will be truncated to the sp...
double height() const SIP_HOLDGIL
Returns the height of the rectangle.
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
bool isEmpty() const
Returns true if the rectangle is empty.
Contains information about the context of a rendering operation.
This class is a composition of two QSettings instances:
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.
const QgsContrastEnhancement * contrastEnhancement() const
Raster renderer pipe for single band pseudocolor.
void setClassificationMin(double min)
int band() const
Returns the band used by the renderer.
QgsRasterShader * shader()
Returns the raster shader.
void setShader(QgsRasterShader *shader)
Takes ownership of the shader.
void setClassificationMax(double max)
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)
QgsMapLayerType
Types of layers that can be added to a map.
@ RasterLayer
Raster 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
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
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)
QgsDataProvider * classFactoryFunction_t(const QString *, const QgsDataProvider::ProviderOptions &options)
QList< QPair< QString, QColor > > QgsLegendColorList
QList< QgsRasterRange > QgsRasterRangeList
Setting options for creating vector data providers.
Struct that stores the information about the parameters that should be given to the QgsVirtualRasterP...
QList< QgsRasterDataProvider::VirtualRasterInputLayers > rInputLayers
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 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 coordinate system.
QgsRectangle mDrawnExtent
Intersection of current map extent and layer extent.
QgsCoordinateTransformContext mTransformContext
Coordinate transform context.
qgssize mWidth
Width, number of columns to be rendered.