13 changes: 8 additions & 5 deletions src/core/raster/qgsrasterfilewriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ class CORE_EXPORT QgsRasterFileWriter

private:
QgsRasterFileWriter(); //forbidden
//WriterError writeDataRaster( QgsRasterIterator* iter, int nCols, int nRows, const QgsRectangle& outputExtent,
WriterError writeDataRaster( const QgsRasterPipe* pipe, QgsRasterIterator* iter, int nCols, int nRows, const QgsRectangle& outputExtent,
const QgsCoordinateReferenceSystem& crs, QProgressDialog* progressDialog = 0 );

Expand All @@ -115,23 +114,27 @@ class CORE_EXPORT QgsRasterFileWriter
WriterError writeImageRaster( QgsRasterIterator* iter, int nCols, int nRows, const QgsRectangle& outputExtent,
const QgsCoordinateReferenceSystem& crs, QProgressDialog* progressDialog = 0 );

//initialize vrt member variables
/** \brief Initialize vrt member variables
* @param destHasNoDataValueList true if destination has no data value, indexed from 0
* @param destNoDataValueList no data value, indexed from 0
*/
void createVRT( int xSize, int ySize, const QgsCoordinateReferenceSystem& crs, double* geoTransform, QGis::DataType type, QList<bool> destHasNoDataValueList, QList<double> destNoDataValueList );
//write vrt document to disk
bool writeVRT( const QString& file );
//add file entry to vrt
void addToVRT( const QString& filename, int band, int xSize, int ySize, int xOffset, int yOffset );
void buildPyramids( const QString& filename );

//static int pyramidsProgress( double dfComplete, const char *pszMessage, void* pData );

/**Create provider and datasource for a part image (vrt mode)*/
QgsRasterDataProvider* createPartProvider( const QgsRectangle& extent, int nCols, int iterCols, int iterRows,
int iterLeft, int iterTop,
const QString& outputUrl, int fileIndex, int nBands, QGis::DataType type,
const QgsCoordinateReferenceSystem& crs );

/**Init VRT (for tiled mode) or create global output provider (single-file mode)*/
/** \brie Init VRT (for tiled mode) or create global output provider (single-file mode)
* @param destHasNoDataValueList true if destination has no data value, indexed from 0
* @param destNoDataValueList no data value, indexed from 0
*/
QgsRasterDataProvider* initOutput( int nCols, int nRows,
const QgsCoordinateReferenceSystem& crs, double* geoTransform, int nBands,
QGis::DataType type,
Expand Down
1 change: 0 additions & 1 deletion src/core/raster/qgsrasterinterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ void QgsRasterInterface::initStatistics( QgsRasterBandStats &theStatistics,
{
QgsDebugMsg( QString( "theBandNo = %1 theSampleSize = %2" ).arg( theBandNo ).arg( theSampleSize ) );

theStatistics.bandName = generateBandName( theBandNo );
theStatistics.bandNumber = theBandNo;
theStatistics.statsGathered = theStats;

Expand Down
21 changes: 14 additions & 7 deletions src/core/raster/qgsrasterlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,6 @@ bool QgsRasterLayer::draw( QgsRenderContext& rendererContext )
}

// clip raster extent to view extent
//QgsRectangle myRasterExtent = theViewExtent.intersect( &mLayerExtent );
QgsRectangle myRasterExtent = myProjectedViewExtent.intersect( &myProjectedLayerExtent );
if ( myRasterExtent.isEmpty() )
{
Expand Down Expand Up @@ -761,22 +760,30 @@ QString QgsRasterLayer::providerType() const
/**
* @return the horizontal units per pixel as reported in the GDAL geotramsform[1]
*/
double QgsRasterLayer::rasterUnitsPerPixel()
double QgsRasterLayer::rasterUnitsPerPixelX()
{
// We return one raster pixel per map unit pixel
// One raster pixel can have several raster units...

// We can only use one of the mGeoTransform[], so go with the
// horisontal one.

//return qAbs( mGeoTransform[1] );
if ( mDataProvider->capabilities() & QgsRasterDataProvider::Size && mDataProvider->xSize() > 0 )
{
return mDataProvider->extent().width() / mDataProvider->xSize();
}
return 1;
}

double QgsRasterLayer::rasterUnitsPerPixelY()
{
if ( mDataProvider->capabilities() & QgsRasterDataProvider::Size && mDataProvider->xSize() > 0 )
{
return mDataProvider->extent().height() / mDataProvider->ySize();
}
return 1;
}

void QgsRasterLayer::init()
{
mRasterType = QgsRasterLayer::GrayOrUndefined;
Expand Down Expand Up @@ -1001,7 +1008,7 @@ void QgsRasterLayer::closeDataProvider()
mDataProvider = 0;
}

void QgsRasterLayer::setContrastEnhancementAlgorithm( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm, QgsRaster::ContrastEnhancementLimits theLimits, QgsRectangle theExtent, int theSampleSize, bool theGenerateLookupTableFlag )
void QgsRasterLayer::setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm, QgsRaster::ContrastEnhancementLimits theLimits, QgsRectangle theExtent, int theSampleSize, bool theGenerateLookupTableFlag )
{
QgsDebugMsg( QString( "theAlgorithm = %1 theLimits = %2 theExtent.isEmpty() = %3" ).arg( theAlgorithm ).arg( theLimits ).arg( theExtent.isEmpty() ) );
if ( !mPipe.renderer() || !mDataProvider )
Expand Down Expand Up @@ -1130,7 +1137,7 @@ void QgsRasterLayer::setDefaultContrastEnhancement()
QString myLimitsString = mySettings.value( "/Raster/defaultContrastEnhancementLimits", "CumulativeCut" ).toString();
QgsRaster::ContrastEnhancementLimits myLimits = QgsRaster::contrastEnhancementLimitsFromString( myLimitsString );

setContrastEnhancementAlgorithm( myAlgorithm, myLimits );
setContrastEnhancement( myAlgorithm, myLimits );
}

/**
Expand Down Expand Up @@ -1618,13 +1625,13 @@ bool QgsRasterLayer::writeXml( QDomNode & layer_node,

for ( int bandNo = 1; bandNo <= mDataProvider->bandCount(); bandNo++ )
{
if ( mDataProvider->userNoDataValue( bandNo ).isEmpty() ) continue;
if ( mDataProvider->userNoDataValues( bandNo ).isEmpty() ) continue;

QDomElement noDataRangeList = document.createElement( "noDataList" );
noDataRangeList.setAttribute( "bandNo", bandNo );
noDataRangeList.setAttribute( "useSrcNoData", mDataProvider->useSrcNoDataValue( bandNo ) );

foreach ( QgsRasterRange range, mDataProvider->userNoDataValue( bandNo ) )
foreach ( QgsRasterRange range, mDataProvider->userNoDataValues( bandNo ) )
{
QDomElement noDataRange = document.createElement( "noDataRange" );

Expand Down
13 changes: 7 additions & 6 deletions src/core/raster/qgsrasterlayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,8 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
QString providerType() const;

/** \brief Returns the number of raster units per each raster pixel. In a world file, this is normally the first row (without the sign) */
double rasterUnitsPerPixel();
double rasterUnitsPerPixelX();
double rasterUnitsPerPixelY();

/** \brief Set contrast enhancement algorithm
* @param theAlgorithm Contrast enhancement algorithm
Expand All @@ -346,11 +347,11 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
* @param theGenerateLookupTableFlag Generate llokup table. */


void setContrastEnhancementAlgorithm( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm,
QgsRaster::ContrastEnhancementLimits theLimits = QgsRaster::ContrastEnhancementMinMax,
QgsRectangle theExtent = QgsRectangle(),
int theSampleSize = SAMPLE_SIZE,
bool theGenerateLookupTableFlag = true );
void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm,
QgsRaster::ContrastEnhancementLimits theLimits = QgsRaster::ContrastEnhancementMinMax,
QgsRectangle theExtent = QgsRectangle(),
int theSampleSize = SAMPLE_SIZE,
bool theGenerateLookupTableFlag = true );

/** \brief Set default contrast enhancement */
void setDefaultContrastEnhancement();
Expand Down
2 changes: 1 addition & 1 deletion src/plugins/georeferencer/qgsgcpcanvasitem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ double QgsGCPCanvasItem::residualToScreenFactor() const
QgsRasterLayer* rasterLayer = dynamic_cast<QgsRasterLayer*>( mapLayer );
if ( rasterLayer )
{
mapUnitsPerRasterPixel = rasterLayer->rasterUnitsPerPixel();
mapUnitsPerRasterPixel = rasterLayer->rasterUnitsPerPixelX();
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/plugins/georeferencer/qgsgeorefplugingui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,7 @@ void QgsGeorefPluginGui::showGeorefConfigDialog()
// Histogram stretch slots
void QgsGeorefPluginGui::fullHistogramStretch()
{
mLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum );
mLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum );
mLayer->setCacheImage( NULL );
mCanvas->refresh();
}
Expand All @@ -641,7 +641,7 @@ void QgsGeorefPluginGui::localHistogramStretch()
{
QgsRectangle rectangle = mIface->mapCanvas()->mapRenderer()->outputExtentToLayerExtent( mLayer, mIface->mapCanvas()->extent() );

mLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax, rectangle );
mLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax, rectangle );
mLayer->setCacheImage( NULL );
mCanvas->refresh();
}
Expand Down
19 changes: 6 additions & 13 deletions src/providers/gdal/qgsgdalprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ QgsRasterBlock* QgsGdalProvider::block( int theBandNo, const QgsRectangle &theEx
block->setIsNoDataExcept( subRect );
}
readBlock( theBandNo, theExtent, theWidth, theHeight, block->bits() );
block->applyNoDataValues( userNoDataValue( theBandNo ) );
block->applyNoDataValues( userNoDataValues( theBandNo ) );
return block;
}

Expand Down Expand Up @@ -963,7 +963,7 @@ QgsRasterIdentifyResult QgsGdalProvider::identify( const QgsPoint & thePoint, Qg

if (( srcHasNoDataValue( i ) && useSrcNoDataValue( i ) &&
( qIsNaN( value ) || qgsDoubleNear( value, srcNoDataValue( i ) ) ) ) ||
( QgsRasterRange::contains( value, userNoDataValue( i ) ) ) )
( QgsRasterRange::contains( value, userNoDataValues( i ) ) ) )
{
results.insert( i, QVariant() ); // null QVariant represents no data
}
Expand Down Expand Up @@ -1152,7 +1152,7 @@ bool QgsGdalProvider::hasHistogram( int theBandNo,
}

if (( srcHasNoDataValue( theBandNo ) && !useSrcNoDataValue( theBandNo ) ) ||
userNoDataValue( theBandNo ).size() > 0 )
userNoDataValues( theBandNo ).size() > 0 )
{
QgsDebugMsg( "Custom no data values -> GDAL histogram not sufficient." );
return false;
Expand Down Expand Up @@ -1234,7 +1234,7 @@ QgsRasterHistogram QgsGdalProvider::histogram( int theBandNo,
}

if (( srcHasNoDataValue( theBandNo ) && !useSrcNoDataValue( theBandNo ) ) ||
userNoDataValue( theBandNo ).size() > 0 )
userNoDataValues( theBandNo ).size() > 0 )
{
QgsDebugMsg( "Custom no data values, using generic histogram." );
return QgsRasterDataProvider::histogram( theBandNo, theBinCount, theMinimum, theMaximum, theExtent, theSampleSize, theIncludeOutOfRange );
Expand Down Expand Up @@ -2068,7 +2068,7 @@ bool QgsGdalProvider::hasStatistics( int theBandNo,
initStatistics( myRasterBandStats, theBandNo, theStats, theExtent, theSampleSize );

if (( srcHasNoDataValue( theBandNo ) && !useSrcNoDataValue( theBandNo ) ) ||
userNoDataValue( theBandNo ).size() > 0 )
userNoDataValues( theBandNo ).size() > 0 )
{
QgsDebugMsg( "Custom no data values -> GDAL statistics not sufficient." );
return false;
Expand Down Expand Up @@ -2162,7 +2162,7 @@ QgsRasterBandStats QgsGdalProvider::bandStatistics( int theBandNo, int theStats,
// We cannot use GDAL stats if user disabled src no data value or set
// custom no data values
if (( srcHasNoDataValue( theBandNo ) && !useSrcNoDataValue( theBandNo ) ) ||
userNoDataValue( theBandNo ).size() > 0 )
userNoDataValues( theBandNo ).size() > 0 )
{
QgsDebugMsg( "Custom no data values, using generic statistics." );
return QgsRasterDataProvider::bandStatistics( theBandNo, theStats, theExtent, theSampleSize );
Expand Down Expand Up @@ -2233,8 +2233,6 @@ QgsRasterBandStats QgsGdalProvider::bandStatistics( int theBandNo, int theStats,
// if stats are found populate the QgsRasterBandStats object
if ( CE_None == myerval )
{

myRasterBandStats.bandName = generateBandName( theBandNo );
myRasterBandStats.bandNumber = theBandNo;
myRasterBandStats.range = pdfMax - pdfMin;
myRasterBandStats.minimumValue = pdfMin;
Expand Down Expand Up @@ -2555,11 +2553,6 @@ bool QgsGdalProvider::setNoDataValue( int bandNo, double noDataValue )
return true;
}

QStringList QgsGdalProvider::createFormats() const
{
return QStringList();
}

bool QgsGdalProvider::remove()
{
if ( mGdalDataset )
Expand Down
13 changes: 0 additions & 13 deletions src/providers/gdal/qgsgdalprovider.h
Original file line number Diff line number Diff line change
Expand Up @@ -228,24 +228,11 @@ class QgsGdalProvider : public QgsRasterDataProvider, QgsGdalProviderBase

static QMap<QString, QString> supportedMimes();

/** Creates a new dataset with mDataSourceURI
@return true in case of success*/
/*
bool create( const QString& format, int nBands,
QGis::DataType type,
int width, int height, double* geoTransform,
const QgsCoordinateReferenceSystem& crs,
QStringList createOptions = QStringList() );
*/

/**Writes into the provider datasource*/
bool write( void* data, int band, int width, int height, int xOffset, int yOffset );

bool setNoDataValue( int bandNo, double noDataValue );

/**Returns the formats supported by create()*/
QStringList createFormats() const;

/**Remove dataset*/
bool remove();

Expand Down
2 changes: 1 addition & 1 deletion src/providers/grass/qgsgrassrasterprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ QgsRasterIdentifyResult QgsGrassRasterProvider::identify( const QgsPoint & thePo
}

// Apply user no data
QgsRasterRangeList myNoDataRangeList = userNoDataValue( 1 );
QgsRasterRangeList myNoDataRangeList = userNoDataValues( 1 );
if ( QgsRasterRange::contains( value, myNoDataRangeList ) )
{
return noDataResult;
Expand Down
2 changes: 1 addition & 1 deletion src/providers/wcs/qgswcsprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1701,7 +1701,7 @@ QgsRasterIdentifyResult QgsWcsProvider::identify( const QgsPoint & thePoint, Qgs
// Apply no data and user no data
if (( srcHasNoDataValue( i ) && useSrcNoDataValue( i ) &&
( qIsNaN( value ) || qgsDoubleNear( value, srcNoDataValue( i ) ) ) ) ||
( QgsRasterRange::contains( value, userNoDataValue( i ) ) ) )
( QgsRasterRange::contains( value, userNoDataValues( i ) ) ) )
{
results.insert( i, QVariant() );
}
Expand Down
8 changes: 5 additions & 3 deletions src/providers/wms/qgswmsprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4270,9 +4270,11 @@ QgsRasterIdentifyResult QgsWmsProvider::identify( const QgsPoint & thePoint, Qgs
QMap<QgsFeatureId, QgsFeature* > features = gml.featuresMap();
QgsDebugMsg( QString( "%1 features read" ).arg( features.size() ) );
QgsFeatureStore featureStore( fields, crs() );
featureStore.params().insert( "sublayer", *layers );
featureStore.params().insert( "featureType", featureTypeName );
featureStore.params().insert( "getFeatureInfoUrl", requestUrl.toString() );
QMap<QString, QVariant> params;
params.insert( "sublayer", *layers );
params.insert( "featureType", featureTypeName );
params.insert( "getFeatureInfoUrl", requestUrl.toString() );
featureStore.setParams( params );
foreach ( QgsFeatureId id, features.keys() )
{
QgsFeature * feature = features.value( id );
Expand Down
6 changes: 3 additions & 3 deletions tests/src/core/testqgsrasterlayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ void TestQgsRasterLayer::cleanupTestCase()
void TestQgsRasterLayer::isValid()
{
QVERIFY( mpRasterLayer->isValid() );
mpRasterLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax );
mpRasterLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax );
mpMapRenderer->setExtent( mpRasterLayer->extent() );
QVERIFY( render( "raster" ) );
}
Expand Down Expand Up @@ -290,7 +290,7 @@ void TestQgsRasterLayer::colorRamp4()

void TestQgsRasterLayer::landsatBasic()
{
mpLandsatRasterLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax );
mpLandsatRasterLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax );
QStringList myLayers;
myLayers << mpLandsatRasterLayer->id();
mpMapRenderer->setLayerSet( myLayers );
Expand Down Expand Up @@ -446,7 +446,7 @@ void TestQgsRasterLayer::transparency()
QVERIFY( mpFloat32RasterLayer->isValid() );
QgsSingleBandGrayRenderer* renderer = new QgsSingleBandGrayRenderer( mpRasterLayer->dataProvider(), 1 );
mpFloat32RasterLayer->setRenderer( renderer );
mpFloat32RasterLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax );
mpFloat32RasterLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax );

qDebug( "contrastEnhancement.minimumValue = %.17g", renderer->contrastEnhancement()->minimumValue() );
qDebug( "contrastEnhancement.maximumValue = %.17g", renderer->contrastEnhancement()->maximumValue() );
Expand Down
2 changes: 1 addition & 1 deletion tests/src/python/test_qgsrasterlayer.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def testTransparency(self):

renderer = QgsSingleBandGrayRenderer(myRasterLayer.dataProvider(), 1)
myRasterLayer.setRenderer(renderer)
myRasterLayer.setContrastEnhancementAlgorithm(
myRasterLayer.setContrastEnhancement(
QgsContrastEnhancement.StretchToMinimumMaximum,
QgsRaster.ContrastEnhancementMinMax)

Expand Down