49 #include <QApplication>
51 #include <QDomElement>
56 #include <QFontMetrics>
63 #include <QMessageBox>
74 #define ERR(message) QGS_ERROR_MESSAGE(message,"Raster layer")
82 , QSTRING_NOT_SET(
"Not Set" )
83 , TRSTRING_NOT_SET(
tr(
"Not Set" ) )
92 QString
const & baseName,
93 bool loadDefaultStyleFlag )
95 , QSTRING_NOT_SET(
"Not Set" )
96 , TRSTRING_NOT_SET(
tr(
"Not Set" ) )
106 bool defaultLoadedFlag =
false;
107 if (
mValid && loadDefaultStyleFlag )
111 if ( !defaultLoadedFlag )
123 const QString & baseName,
124 const QString & providerKey,
125 bool loadDefaultStyleFlag )
128 , QSTRING_NOT_SET(
"Not Set" )
129 , TRSTRING_NOT_SET(
tr(
"Not Set" ) )
131 , mProviderKey( providerKey )
139 bool defaultLoadedFlag =
false;
140 if (
mValid && loadDefaultStyleFlag )
144 if ( !defaultLoadedFlag )
174 QgsDebugMsg(
"Could not resolve isValidRasterFileName in gdal provider library" );
178 bool myIsValid = pValid( theFileNameQString, retErrMsg );
193 QFileInfo fi( name );
199 t = fi.lastModified();
302 drawer.draw( theQPainter, theRasterViewPort, theQgsMapToPixel );
304 QgsDebugMsg( QString(
"total raster draw time (ms): %1" ).arg( time.elapsed(), 5 ) );
309 QList< QPair< QString, QColor > > symbolList;
321 myMetadata +=
"<p class=\"glossy\">" +
tr(
"Driver" ) +
"</p>\n";
324 myMetadata +=
"</p>\n";
330 myMetadata +=
"<p class=\"glossy\">";
331 myMetadata +=
tr(
"No Data Value" );
332 myMetadata +=
"</p>\n";
341 myMetadata +=
"*" +
tr(
"NoDataValue not set" ) +
"*";
343 myMetadata +=
"</p>\n";
345 myMetadata +=
"</p>\n";
346 myMetadata +=
"<p class=\"glossy\">";
347 myMetadata +=
tr(
"Data Type" );
348 myMetadata +=
"</p>\n";
354 myMetadata +=
tr(
"Byte - Eight bit unsigned integer" );
357 myMetadata +=
tr(
"UInt16 - Sixteen bit unsigned integer " );
360 myMetadata +=
tr(
"Int16 - Sixteen bit signed integer " );
363 myMetadata +=
tr(
"UInt32 - Thirty two bit unsigned integer " );
366 myMetadata +=
tr(
"Int32 - Thirty two bit signed integer " );
369 myMetadata +=
tr(
"Float32 - Thirty two bit floating point " );
372 myMetadata +=
tr(
"Float64 - Sixty four bit floating point " );
375 myMetadata +=
tr(
"CInt16 - Complex Int16 " );
378 myMetadata +=
tr(
"CInt32 - Complex Int32 " );
381 myMetadata +=
tr(
"CFloat32 - Complex Float32 " );
384 myMetadata +=
tr(
"CFloat64 - Complex Float64 " );
387 myMetadata +=
tr(
"Could not determine raster data type." );
389 myMetadata +=
"</p>\n";
391 myMetadata +=
"<p class=\"glossy\">";
392 myMetadata +=
tr(
"Pyramid overviews" );
393 myMetadata +=
"</p>\n";
396 myMetadata +=
"<p class=\"glossy\">";
397 myMetadata +=
tr(
"Layer Spatial Reference System" );
398 myMetadata +=
"</p>\n";
401 myMetadata +=
"</p>\n";
403 myMetadata +=
"<p class=\"glossy\">";
404 myMetadata +=
tr(
"Layer Extent (layer original source projection)" );
405 myMetadata +=
"</p>\n";
408 myMetadata +=
"</p>\n";
413 myMetadata +=
"<tr><td class=\"glossy\">";
414 myMetadata +=
tr(
"Project Spatial Reference System" );
415 myMetadata +=
"</p>\n";
417 myMetadata += mCoordinateTransform->destCRS().toProj4();
418 myMetadata +=
"</p>\n";
425 for (
int myIteratorInt = 1; myIteratorInt <= myBandCountInt; ++myIteratorInt )
427 QgsDebugMsg(
"Raster properties : checking if band " + QString::number( myIteratorInt ) +
" has stats? " );
429 myMetadata +=
"<p class=\"glossy\">\n";
430 myMetadata +=
tr(
"Band" );
431 myMetadata +=
"</p>\n";
433 myMetadata +=
bandName( myIteratorInt );
434 myMetadata +=
"</p>\n";
437 myMetadata +=
tr(
"Band No" );
438 myMetadata +=
"</p>\n";
439 myMetadata +=
"<p>\n";
440 myMetadata += QString::number( myIteratorInt );
441 myMetadata +=
"</p>\n";
449 myMetadata +=
tr(
"No Stats" );
450 myMetadata +=
"</p>\n";
451 myMetadata +=
"<p>\n";
452 myMetadata +=
tr(
"No stats collected yet" );
453 myMetadata +=
"</p>\n";
462 myMetadata +=
tr(
"Min Val" );
463 myMetadata +=
"</p>\n";
464 myMetadata +=
"<p>\n";
465 myMetadata += QString::number( myRasterBandStats.
minimumValue,
'f', 10 );
466 myMetadata +=
"</p>\n";
470 myMetadata +=
tr(
"Max Val" );
471 myMetadata +=
"</p>\n";
472 myMetadata +=
"<p>\n";
473 myMetadata += QString::number( myRasterBandStats.
maximumValue,
'f', 10 );
474 myMetadata +=
"</p>\n";
478 myMetadata +=
tr(
"Range" );
479 myMetadata +=
"</p>\n";
480 myMetadata +=
"<p>\n";
481 myMetadata += QString::number( myRasterBandStats.
range,
'f', 10 );
482 myMetadata +=
"</p>\n";
486 myMetadata +=
tr(
"Mean" );
487 myMetadata +=
"</p>\n";
488 myMetadata +=
"<p>\n";
489 myMetadata += QString::number( myRasterBandStats.
mean,
'f', 10 );
490 myMetadata +=
"</p>\n";
494 myMetadata +=
tr(
"Sum of squares" );
495 myMetadata +=
"</p>\n";
496 myMetadata +=
"<p>\n";
497 myMetadata += QString::number( myRasterBandStats.
sumOfSquares,
'f', 10 );
498 myMetadata +=
"</p>\n";
502 myMetadata +=
tr(
"Standard Deviation" );
503 myMetadata +=
"</p>\n";
504 myMetadata +=
"<p>\n";
505 myMetadata += QString::number( myRasterBandStats.
stdDev,
'f', 10 );
506 myMetadata +=
"</p>\n";
510 myMetadata +=
tr(
"Sum of all cells" );
511 myMetadata +=
"</p>\n";
512 myMetadata +=
"<p>\n";
513 myMetadata += QString::number( myRasterBandStats.
sum,
'f', 10 );
514 myMetadata +=
"</p>\n";
518 myMetadata +=
tr(
"Cell Count" );
519 myMetadata +=
"</p>\n";
520 myMetadata +=
"<p>\n";
521 myMetadata += QString::number( myRasterBandStats.
elementCount );
522 myMetadata +=
"</p>\n";
546 if ( myColorRampItemList.size() > 0 )
553 QPixmap myPalettePixmap( mySize, mySize );
554 QPainter myQPainter( &myPalettePixmap );
556 QImage myQImage = QImage( mySize, mySize, QImage::Format_RGB32 );
558 myPalettePixmap.fill();
560 double myStep = (( double )myColorRampItemList.size() - 1 ) / (
double )( mySize * mySize );
561 double myValue = 0.0;
562 for (
int myRow = 0; myRow < mySize; myRow++ )
564 QRgb* myLineBuffer = ( QRgb* )myQImage.scanLine( myRow );
565 for (
int myCol = 0; myCol < mySize; myCol++ )
567 myValue = myStep * ( double )( myCol + myRow * mySize );
569 myShader.
shade( myValue, &c1, &c2, &c3, &c4 );
570 myLineBuffer[ myCol ] = qRgba( c1, c2, c3, c4 );
574 myQPainter.drawImage( 0, 0, myQImage );
575 return myPalettePixmap;
577 QPixmap myNullPixmap;
583 QPixmap myNullPixmap;
669 if ( provider ==
"gdal" )
693 QString mySourceWkt =
crs().
toWkt();
700 QSettings myQSettings;
822 this, SLOT(
onProgress(
int,
double, QString ) )
846 QgsDebugMsg( QString(
"theAlgorithm = %1 theLimits = %2 theExtent.isEmpty() = %3" ).arg( theAlgorithm ).arg( theLimits ).arg( theExtent.
isEmpty() ) );
853 QList<QgsContrastEnhancement*> myEnhancements;
857 if ( rendererType ==
"singlebandgray" )
860 if ( !myGrayRenderer )
return;
861 myBands << myGrayRenderer->
grayBand();
863 else if ( rendererType ==
"multibandcolor" )
866 if ( !myMultiBandRenderer )
return;
870 foreach (
int myBand, myBands )
878 double myMin = std::numeric_limits<double>::quiet_NaN();
879 double myMax = std::numeric_limits<double>::quiet_NaN();
891 myMin = myRasterBandStats.
mean - ( myStdDev * myRasterBandStats.
stdDev );
892 myMax = myRasterBandStats.
mean + ( myStdDev * myRasterBandStats.
stdDev );
896 QSettings mySettings;
897 double myLower = mySettings.value(
"/Raster/cumulativeCutLower", QString::number(
CUMULATIVE_CUT_LOWER ) ).toDouble();
898 double myUpper = mySettings.value(
"/Raster/cumulativeCutUpper", QString::number(
CUMULATIVE_CUT_UPPER ) ).toDouble();
899 QgsDebugMsg( QString(
"myLower = %1 myUpper = %2" ).arg( myLower ).arg( myUpper ) );
903 QgsDebugMsg( QString(
"myBand = %1 myMin = %2 myMax = %3" ).arg( myBand ).arg( myMin ).arg( myMax ) );
906 myEnhancements.append( myEnhancement );
910 myEnhancements.append( 0 );
914 if ( rendererType ==
"singlebandgray" )
918 else if ( rendererType ==
"multibandcolor" )
932 QSettings mySettings;
938 if ( dynamic_cast<QgsSingleBandGrayRenderer*>(
renderer() ) )
940 myKey =
"singleBand";
941 myDefault =
"StretchToMinimumMaximum";
943 else if ( dynamic_cast<QgsMultiBandColorRenderer*>(
renderer() ) )
947 myKey =
"multiBandSingleByte";
948 myDefault =
"NoEnhancement";
952 myKey =
"multiBandMultiByte";
953 myDefault =
"StretchToMinimumMaximum";
957 if ( myKey.isEmpty() )
959 QgsDebugMsg(
"No default contrast enhancement for this drawing style" );
963 QString myAlgorithmString = mySettings.value(
"/Raster/defaultContrastEnhancementAlgorithm/" + myKey, myDefault ).toString();
964 QgsDebugMsg(
"myAlgorithmString = " + myAlgorithmString );
973 QString myLimitsString = mySettings.value(
"/Raster/defaultContrastEnhancementLimits",
"CumulativeCut" ).toString();
986 QgsDebugMsg(
"DrawingStyle = " + theDrawingStyleQString );
988 if ( theDrawingStyleQString ==
"SingleBandGray" )
992 else if ( theDrawingStyleQString ==
"SingleBandPseudoColor" )
996 else if ( theDrawingStyleQString ==
"PalettedColor" )
1000 else if ( theDrawingStyleQString ==
"PalettedSingleBandGray" )
1004 else if ( theDrawingStyleQString ==
"PalettedSingleBandPseudoColor" )
1008 else if ( theDrawingStyleQString ==
"PalettedMultiBandColor" )
1012 else if ( theDrawingStyleQString ==
"MultiBandSingleBandGray" )
1016 else if ( theDrawingStyleQString ==
"MultiBandSingleBandPseudoColor" )
1020 else if ( theDrawingStyleQString ==
"MultiBandColor" )
1024 else if ( theDrawingStyleQString ==
"SingleBandColorDataStyle" )
1028 QgsDebugMsg(
"Setted drawingStyle to " + QString::number( drawingStyle ) );
1043 QgsDebugMsg(
"About to mDataProvider->setLayerOrder(layers)." );
1054 QgsDebugMsg(
"About to mDataProvider->setSubLayerVisibility(name, vis)." );
1063 if ( !theRenderer ) {
return; }
1090 QPixmap myQPixmap( size );
1092 myQPixmap.fill( bgColor );
1096 double myMapUnitsPerPixel;
1100 if ( myExtent.
width() / myExtent.
height() >= myQPixmap.width() / myQPixmap.height() )
1102 myMapUnitsPerPixel = myExtent.
width() / myQPixmap.width();
1103 myY = ( myQPixmap.height() - myExtent.
height() / myMapUnitsPerPixel ) / 2;
1107 myMapUnitsPerPixel = myExtent.
height() / myQPixmap.height();
1108 myX = ( myQPixmap.width() - myExtent.
width() / myMapUnitsPerPixel ) / 2;
1111 double myPixelWidth = myExtent.
width() / myMapUnitsPerPixel;
1112 double myPixelHeight = myExtent.
height() / myMapUnitsPerPixel;
1116 myRasterViewPort->
mWidth = myQPixmap.width();
1117 myRasterViewPort->
mHeight = myQPixmap.height();
1127 QPainter * myQPainter =
new QPainter( &myQPixmap );
1128 draw( myQPainter, myRasterViewPort, myMapToPixel );
1129 delete myRasterViewPort;
1130 delete myMapToPixel;
1141 QImage myQImage( size, format );
1143 myQImage.setColor( 0, bgColor.rgba() );
1148 double myMapUnitsPerPixel;
1152 if ( myExtent.
width() / myExtent.
height() >= myQImage.width() / myQImage.height() )
1154 myMapUnitsPerPixel = myExtent.
width() / myQImage.width();
1155 myY = ( myQImage.height() - myExtent.
height() / myMapUnitsPerPixel ) / 2;
1159 myMapUnitsPerPixel = myExtent.
height() / myQImage.height();
1160 myX = ( myQImage.width() - myExtent.
width() / myMapUnitsPerPixel ) / 2;
1163 double myPixelWidth = myExtent.
width() / myMapUnitsPerPixel;
1164 double myPixelHeight = myExtent.
height() / myMapUnitsPerPixel;
1168 myRasterViewPort->
mWidth = myQImage.width();
1169 myRasterViewPort->
mHeight = myQImage.height();
1179 QPainter * myQPainter =
new QPainter( &myQImage );
1180 draw( myQPainter, myRasterViewPort, myMapToPixel );
1181 delete myRasterViewPort;
1182 delete myMapToPixel;
1196 Q_UNUSED( theProgress );
1202 Q_UNUSED( theType );
1203 Q_UNUSED( theMessage );
1204 QgsDebugMsg( QString(
"theProgress = %1" ).arg( theProgress ) );
1220 Q_UNUSED( errorMessage );
1221 QDomElement rasterRendererElem;
1227 QDomNode pipeNode = layer_node.firstChildElement(
"pipe" );
1228 if ( pipeNode.isNull() )
1230 pipeNode = layer_node;
1234 if ( !layer_node.firstChildElement(
"rasterproperties" ).isNull() )
1237 QDomNode layerNodeCopy = layer_node.cloneNode();
1238 QDomDocument doc = layerNodeCopy.ownerDocument();
1239 QDomElement rasterPropertiesElem = layerNodeCopy.firstChildElement(
"rasterproperties" );
1242 rasterRendererElem = layerNodeCopy.firstChildElement(
"rasterrenderer" );
1247 rasterRendererElem = pipeNode.firstChildElement(
"rasterrenderer" );
1250 if ( !rasterRendererElem.isNull() )
1252 QString rendererType = rasterRendererElem.attribute(
"type" );
1266 QDomElement brightnessElem = pipeNode.firstChildElement(
"brightnesscontrast" );
1267 if ( !brightnessElem.isNull() )
1269 brightnessFilter->
readXML( brightnessElem );
1277 QDomElement hueSaturationElem = pipeNode.firstChildElement(
"huesaturation" );
1278 if ( !hueSaturationElem.isNull() )
1280 hueSaturationFilter->
readXML( hueSaturationElem );
1288 QDomElement resampleElem = pipeNode.firstChildElement(
"rasterresampler" );
1289 if ( !resampleElem.isNull() )
1291 resampleFilter->
readXML( resampleElem );
1295 QDomNode blendModeNode = layer_node.namedItem(
"blendMode" );
1296 if ( !blendModeNode.isNull() )
1298 QDomElement e = blendModeNode.toElement();
1317 QDomNode pkeyNode = layer_node.namedItem(
"provider" );
1319 if ( pkeyNode.isNull() )
1325 QDomElement pkeyElt = pkeyNode.toElement();
1339 QDomNode rpNode = layer_node.namedItem(
"rasterproperties" );
1347 QgsDebugMsg(
"Old WMS URI format detected -> adding params" );
1350 QDomElement layerElement = rpNode.firstChildElement(
"wmsSublayer" );
1351 while ( !layerElement.isNull() )
1356 uri.
setParam(
"layers", layerElement.namedItem(
"name" ).toElement().text() );
1359 uri.
setParam(
"styles", layerElement.namedItem(
"style" ).toElement().text() );
1361 layerElement = layerElement.nextSiblingElement(
"wmsSublayer" );
1365 QDomNode formatNode = rpNode.namedItem(
"wmsFormat" );
1366 uri.
setParam(
"format", rpNode.namedItem(
"wmsFormat" ).toElement().text() );
1377 if ( !
mValid )
return false;
1394 QDomNode stampNode = layer_node.namedItem(
"timestamp" );
1395 if ( !stampNode.isNull() )
1397 QDateTime stamp = QDateTime::fromString( stampNode.toElement().text(), Qt::ISODate );
1399 if ( stamp < mDataProvider->dataTimestamp() )
1405 if ( !
mValid )
return false;
1411 QDomElement noDataElement = layer_node.firstChildElement(
"noData" );
1413 QDomNodeList noDataBandList = noDataElement.elementsByTagName(
"noDataList" );
1415 for (
int i = 0; i < noDataBandList.size(); ++i )
1417 QDomElement bandElement = noDataBandList.at( i ).toElement();
1419 int bandNo = bandElement.attribute(
"bandNo" ).toInt( &ok );
1420 QgsDebugMsg( QString(
"bandNo = %1" ).arg( bandNo ) );
1421 if ( ok && ( bandNo > 0 ) && ( bandNo <= mDataProvider->
bandCount() ) )
1426 QDomNodeList rangeList = bandElement.elementsByTagName(
"noDataRange" );
1428 for (
int j = 0; j < rangeList.size(); ++j )
1430 QDomElement rangeElement = rangeList.at( j ).toElement();
1431 QgsRasterRange myNoDataRange( rangeElement.attribute(
"min" ).toDouble(),
1432 rangeElement.attribute(
"max" ).toDouble() );
1433 QgsDebugMsg( QString(
"min = %1 %2" ).arg( rangeElement.attribute(
"min" ) ).arg( myNoDataRange.min() ) );
1434 myNoDataRangeList << myNoDataRange;
1451 Q_UNUSED( errorMessage );
1452 QDomElement layerElem = layer_node.toElement();
1456 QDomElement pipeElement = document.createElement(
"pipe" );
1458 for (
int i = 1; i <
mPipe.
size(); i++ )
1461 if ( !interface )
continue;
1462 interface->writeXML( document, pipeElement );
1465 layer_node.appendChild( pipeElement );
1468 QDomElement blendModeElement = document.createElement(
"blendMode" );
1470 blendModeElement.appendChild( blendModeText );
1471 layer_node.appendChild( blendModeElement );
1481 QDomDocument & document )
1485 QDomElement mapLayerNode = layer_node.toElement();
1487 if ( mapLayerNode.isNull() ||
"maplayer" != mapLayerNode.nodeName() )
1493 mapLayerNode.setAttribute(
"type",
"raster" );
1497 QDomElement provider = document.createElement(
"provider" );
1498 QDomText providerText = document.createTextNode(
mProviderKey );
1499 provider.appendChild( providerText );
1500 layer_node.appendChild( provider );
1503 QDomElement noData = document.createElement(
"noData" );
1507 QDomElement noDataRangeList = document.createElement(
"noDataList" );
1508 noDataRangeList.setAttribute(
"bandNo", bandNo );
1513 QDomElement noDataRange = document.createElement(
"noDataRange" );
1515 noDataRange.setAttribute(
"min", range.
min() );
1516 noDataRange.setAttribute(
"max", range.
max() );
1517 noDataRangeList.appendChild( noDataRange );
1520 noData.appendChild( noDataRangeList );
1523 if ( noData.hasChildNodes() )
1525 layer_node.appendChild( noData );
QgsDataProvider * classFactoryFunction_t(const QString *)
virtual int bandCount() const =0
Get number of bands.
virtual void setSubLayerVisibility(const QString &name, bool vis)
Set the visibility of the given sublayer name.
void setRenderer(QgsRasterRenderer *theRenderer)
Set raster renderer.
void setContrastEnhancementAlgorithm(ContrastEnhancementAlgorithm, bool generateTable=true)
Set the contrast enhancement algorithm.
virtual QStringList subLayers() const
Returns the sublayers of this layer - useful for providers that manage their own layers, such as WMS.
A rectangle specified with double values.
Base class for all map layer types.
Interface for all raster shaders.
bool isEmpty() const
test if rectangle is empty.
double rasterUnitsPerPixelY()
QgsMapLayer::LayerType type() const
Get the type of the layer.
double sum
The sum of all cells in the band.
void setCRS(const QgsCoordinateReferenceSystem &theSrcCRS, const QgsCoordinateReferenceSystem &theDestCRS, int srcDatumTransform=-1, int destDatumTransform=-1)
set source and destination CRS
Iterator for sequentially processing raster cells.
DrawingStyle
This enumerator describes the different kinds of drawing we can do.
A ramp shader will color a raster pixel based on a list of values ranges in a ramp.
static QgsProviderRegistry * instance(QString pluginPath=QString::null)
means of accessing canonical single instance
void setEncodedUri(const QByteArray &uri)
set complete encoded uri (generic mode)
virtual QgsCoordinateReferenceSystem crs()=0
static ContrastEnhancementLimits contrastEnhancementLimitsFromString(QString theLimits)
void setDefaultContrastEnhancement()
Set default contrast enhancement.
void triggerRepaint()
Emit a signal asking for a repaint.
virtual void setUseSrcNoDataValue(int bandNo, bool use)
Set source nodata value usage.
virtual double srcNoDataValue(int bandNo) const
Value representing no data value.
void setCustomProperty(const QString &key, const QVariant &value)
Set a custom property for layer.
virtual void setLayerOrder(const QStringList &layers)
Reorders the previously selected sublayers of this layer from bottom to top.
double maximumValue
The maximum cell value in the raster band.
int mWidth
Width, number of columns to be rendered.
QgsRasterInterface * last() const
virtual QgsRasterRangeList userNoDataValues(int bandNo) const
Get list of user no data value ranges.
static QDateTime lastModified(const QString &name)
Return time stamp for given file name.
Raster values range container.
static bool isValidRasterFileName(const QString &theFileNameQString, QString &retError)
This helper checks to see whether the file name appears to be a valid raster file name...
Resample filter pipe for rasters.
Abstract base class for spatial data provider implementations.
void setColorRampItemList(const QList< QgsColorRampShader::ColorRampItem > &theList)
Set custom colormap.
void readXML(const QDomElement &filterElem)
Sets base class members from xml.
bool draw(QgsRenderContext &rendererContext)
This is called when the view on the raster layer needs to be redrawn.
static const double SAMPLE_SIZE
Default sample size (number of pixels) for estimated statistics/histogram calculation.
Q_DECL_DEPRECATED void updateProgress(int, int)
Implementation of threaded rendering for raster layers.
void readXML(const QDomElement &filterElem)
Sets base class members from xml.
void setBlendMode(const QPainter::CompositionMode &blendMode)
Write blend mode for layer.
QString mLayerName
Name of the layer - used for display.
void setShader(QgsRasterShader *shader)
Takes ownership of the shader.
BlendMode
Blending modes enum defining the available composition modes that can be used when rendering a layer...
double rasterUnitsPerPixelX()
Returns the number of raster units per each raster pixel.
virtual int ySize() const
void setGreenContrastEnhancement(QgsContrastEnhancement *ce)
Takes ownership.
static QString identifyFormatName(QgsRaster::IdentifyFormat format)
virtual QDateTime dataTimestamp() const
Current time stamp of data source.
static void logMessage(QString message, QString tag=QString::null, MessageLevel level=WARNING)
add a message to the instance (and create it if necessary)
QgsCoordinateReferenceSystem mDestCRS
Target coordinate system.
void setDrawingStyle(const QString &theDrawingStyleQString)
Overloaded version of the above function for convenience when restoring from xml. ...
void setRendererForDrawingStyle(const QgsRaster::DrawingStyle &theDrawingStyle)
Sets corresponding renderer for style.
void init()
Initialize default values.
virtual bool useSrcNoDataValue(int bandNo) const
Get source nodata value usage.
const QString & name() const
Get the display name of the layer.
void onProgress(int, double, QString)
receive progress signal from provider
Perform transforms between map coordinates and device coordinates.
virtual QgsRasterBandStats bandStatistics(int theBandNo, int theStats=QgsRasterBandStats::All, const QgsRectangle &theExtent=QgsRectangle(), int theSampleSize=0)
Get band statistics.
The drawing pipe for raster layers.
bool readXml(const QDomNode &layer_node)
Reads layer specific state from project file Dom node.
double stdDev
The standard deviation of the cell values.
virtual QStringList subLayers() const
Returns the sublayers of this layer - Useful for providers that manage their own layers, such as WMS.
The RasterBandStats struct is a container for statistics about a single raster band.
static QgsRasterRendererRegistry * instance()
void setError(const QgsError &theError)
Set error message.
double mean
The mean cell value for the band.
int height() const
Accessor that returns the height of the (unclipped) raster.
QPainter::CompositionMode blendMode() const
Read blend mode for layer.
void readXML(const QDomElement &filterElem)
Sets base class members from xml.
void setRedContrastEnhancement(QgsContrastEnhancement *ce)
Takes ownership.
QgsRasterRenderer * renderer() const
virtual void setUserNoDataValue(int bandNo, QgsRasterRangeList noData)
int bandCount() const
Get the number of bands in this layer.
QgsDataProvider * provider(const QString &providerKey, const QString &dataSource)
Create an instance of the provider.
void setParam(const QString &key, const QString &value)
Set generic param (generic mode)
void setCrs(const QgsCoordinateReferenceSystem &srs, bool emitSignal=true)
Sets layer's spatial reference system.
QgsRasterViewPort mLastViewPort
virtual QGis::DataType srcDataType(int bandNo) const =0
Returns source data type for the band specified by number, source data type may be shorter than dataT...
virtual QgsRectangle extent()=0
Get the extent of the data source.
void statusChanged(QString theStatus)
Emit a signal with status (e.g.
virtual void setExtent(const QgsRectangle &rect)
Set the extent.
bool readSymbology(const QDomNode &node, QString &errorMessage)
Read the symbology for the current layer from the Dom node supplied.
static const double CUMULATIVE_CUT_UPPER
Default cumulative cut upper limit.
~QgsRasterLayer()
The destructor.
ContrastEnhancementLimits
Contrast enhancement limits.
qgssize elementCount
The number of not no data cells in the band.
void setMinimumValue(double, bool generateTable=true)
Return the minimum value for the contrast enhancement range.
Raster renderer pipe for single band pseudocolor.
void dataChanged()
This is emitted whenever data or metadata (e.g.
virtual QGis::DataType dataType(int bandNo) const =0
Returns data type for the band specified by number.
QImage previewAsImage(QSize size, QColor bgColor=Qt::white, QImage::Format format=QImage::Format_ARGB32_Premultiplied)
Draws a preview of the rasterlayer into a QImage.
const QString bandName(int theBandNoInt)
Get the name of a band given its number.
bool isvalidrasterfilename_t(QString const &theFileNameQString, QString &retErrMsg)
Raster renderer pipe for single band gray.
virtual QString generateBandName(int theBandNumber) const
helper function to create zero padded band names
QgsRasterResampleFilter * resampleFilter() const
Set raster resample filter.
static int typeSize(int dataType)
virtual void setLayerOrder(const QStringList &layers)
Reorder the list of layer names to be rendered by this provider (in order from bottom to top) ...
QgsRasterProjector * projector() const
void rendererChanged()
Signal emitted when renderer is changed.
void setAlphaBand(int band)
bool mValid
Indicates if the layer is valid and can be drawn.
void setContrastEnhancement(QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm, QgsRaster::ContrastEnhancementLimits theLimits=QgsRaster::ContrastEnhancementMinMax, QgsRectangle theExtent=QgsRectangle(), int theSampleSize=SAMPLE_SIZE, bool theGenerateLookupTableFlag=true)
Set contrast enhancement algorithm.
void setDataProvider(const QString &provider)
[ data provider interface ] Set the data provider
QgsRasterDataProvider * mDataProvider
Pointer to data provider.
void setRasterShaderFunction(QgsRasterShaderFunction *)
A public method that allows the user to set their own shader function.
Base class for processing filters like renderers, reprojector, resampler etc.
A class to represent a point geometry.
void setColorRampType(QgsColorRampShader::ColorRamp_TYPE theColorRampType)
Set the color ramp type.
Q_DECL_DEPRECATED QPixmap previewAsPixmap(QSize size, QColor bgColor=Qt::white)
Draws a preview of the rasterlayer into a pixmap.
Class for storing the component parts of a PostgreSQL/RDBMS datasource URI.
QPixmap paletteAsPixmap(int theBandNumber=1)
Get an 100x100 pixmap of the color palette.
bool shade(double, int *, int *, int *, int *)
Generates and new RGB value based on one input value.
static ContrastEnhancementAlgorithm contrastEnhancementAlgorithmFromString(const QString &contrastEnhancementString)
virtual int capabilities() const
Returns a bitmask containing the supported capabilities.
virtual int colorInterpretation(int theBandNo) const
Returns data type for the band specified by number.
QgsCoordinateReferenceSystem mSrcCRS
Source coordinate system.
void progressUpdate(int theValue)
Signal for notifying listeners of long running processes.
static QPainter::CompositionMode getCompositionMode(const QgsMapRenderer::BlendMode &blendMode)
Returns a QPainter::CompositionMode corresponding to a BlendMode Added in 1.9.
void showProgress(int theValue)
[ data provider interface ] A wrapper function to emit a progress update signal
Registry for raster renderer entries.
bool writeSymbology(QDomNode &, QDomDocument &doc, QString &errorMessage) const
Write the symbology for the layer into the docment provided.
QList< QPair< QString, QColor > > QgsLegendColorList
QgsPoint mBottomRightPoint
Coordinate (in output device coordinate system) of bottom right corner of the part of the raster that...
void setContrastEnhancement(QgsContrastEnhancement *ce)
Takes ownership.
QString metadata()
Obtain GDAL Metadata for this layer.
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used...
QString mProviderKey
[ data provider interface ] Data provider key
Contains information about the context of a rendering operation.
virtual void legendSymbologyItems(QList< QPair< QString, QColor > > &symbolItems) const
Get symbology items if provided by renderer.
QDateTime mLastModified
[ data provider interface ] Timestamp, the last modified time of the data source when the layer was c...
bool remove(int idx)
Remove and delete interface at given index if possible.
QList< QgsRasterRange > QgsRasterRangeList
virtual int xSize() const
Get raster size.
QString mDataSource
data source description string, varies by layer type
virtual QString loadDefaultStyle(bool &theResultFlag)
Retrieve the default style for this layer if one exists (either as a .qml file on disk or as a record...
virtual QDateTime timestamp() const
Time stamp of data source in the moment when data/metadata were loaded by provider.
virtual QString type() const
virtual QString metadata()=0
Get metadata in a format suitable for feeding directly into a subset of the GUI raster properties "Me...
virtual void reloadData()
Reloads the data from the source.
virtual bool isValid()=0
Returns true if this is a valid layer.
void repaintRequested()
By emitting this signal the layer tells that either appearance or content have been changed and any v...
int mHeight
Distance in map units from bottom edge to top edge for the part of the raster that is to be rendered...
bool update()
Update the layer if it is outdated.
Brightness/contrast filter pipe for rasters.
Class for storing a coordinate reference system (CRS)
Color and saturation filter pipe for rasters.
static const double CUMULATIVE_CUT_LOWER
Default cumulative cut lower limit.
DataType
Raster data types.
virtual QString description() const =0
return description
double range
The range is the distance between min & max.
void setBlueContrastEnhancement(QgsContrastEnhancement *ce)
Takes ownership.
void closeDataProvider()
Close data provider and clear related members.
QgsHueSaturationFilter * hueSaturationFilter() const
double minimumValue
The minimum cell value in the raster band.
Renderer for multiband images with the color components.
Base class for utility classes that encapsulate information necessary for rendering of map layers...
void setLayerName(const QString &name)
Set the display name of the layer.
const QgsCoordinateReferenceSystem & crs() const
Returns layer's spatial reference system.
void * function(const QString &providerKey, const QString &functionName)
Get pointer to provider function.
void appendError(const QgsErrorMessage &theMessage)
Add error message.
Manipulates raster pixel values so that they enhanceContrast or clip into a specified numerical range...
QByteArray encodedUri() const
return complete encoded uri (generic mode)
void(*)() cast_to_fptr(void *p)
QgsRasterDataProvider * dataProvider()
Returns the data provider.
static QgsMapRenderer::BlendMode getBlendModeEnum(const QPainter::CompositionMode &blendMode)
Returns a BlendMode corresponding to a QPainter::CompositionMode Added in 1.9.
virtual void setSubLayerVisibility(QString name, bool vis)
Set the visibility of the given sublayer name.
QString providerType() const
[ data provider interface ] Which provider is being used for this Raster Layer?
QgsPoint mTopLeftPoint
Coordinate (in output device coordinate system) of top left corner of the part of the raster that is ...
virtual bool srcHasNoDataValue(int bandNo) const
virtual bool render()
Do the rendering (based on data stored in the class)
This class provides details of the viewable area that a raster will be rendered into.
virtual QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext)
Return new instance of QgsMapLayerRenderer that will be used for rendering of given context...
double width() const
Width of the rectangle.
virtual void cumulativeCut(int theBandNo, double theLowerCount, double theUpperCount, double &theLowerValue, double &theUpperValue, const QgsRectangle &theExtent=QgsRectangle(), int theSampleSize=0)
Find values for cumulative pixel count cut.
virtual QList< QgsColorRampShader::ColorRampItem > colorTable(int bandNo) const
QgsLegendColorList legendSymbologyItems() const
Returns a list with classification items (Text and color)
QString toString(bool automaticPrecision=false) const
returns string representation of form xmin,ymin xmax,ymax
QgsRasterRenderer * renderer() const
bool set(QgsRasterInterface *theInterface)
Insert a new known interface in default place or replace interface of the same role if it already exi...
virtual QgsError error() const
Get current status error.
Raster renderer pipe that applies colors to a raster.
QgsRasterRendererCreateFunc rendererCreateFunction
virtual QString dataSourceUri() const
Get the data source specification.
void setMaximumValue(double, bool generateTable=true)
Set the maximum value for the contrast enhancement range.
void showStatusMessage(const QString &theMessage)
bool writeXml(QDomNode &layer_node, QDomDocument &doc)
Write layer specific state to project file Dom node.
double height() const
Height of the rectangle.
QgsBrightnessContrastFilter * brightnessFilter() const
QgsRectangle mDrawnExtent
Intersection of current map extent and layer extent.
QString toProj4() const
Get the Proj Proj4 string representation of this srs.
virtual void reload()
Synchronises with changes in the datasource.
Base class for raster data providers.
int width() const
Accessor that returns the width of the (unclipped) raster.
double sumOfSquares
The sum of the squares.
QgsRasterLayer()
Constructor.