Skip to content

Commit

Permalink
raster cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
blazek committed Apr 19, 2013
1 parent 1f872ce commit 8b18577
Show file tree
Hide file tree
Showing 14 changed files with 194 additions and 1,774 deletions.
166 changes: 2 additions & 164 deletions python/core/raster/qgsrasterlayer.sip
Original file line number Diff line number Diff line change
Expand Up @@ -99,23 +99,6 @@ class QgsRasterLayer : QgsMapLayer
ContrastEnhancementCumulativeCut
};

/** \brief A list containing on ContrastEnhancement object per raster band in this raster layer */
typedef QList<QgsContrastEnhancement> ContrastEnhancementList;

/** \brief A list containing one RasterPyramid struct per raster band in this raster layer.
* POTENTIAL pyramid layer. This works by dividing the height
* and width of the raster by an incrementing number. As soon as the result
* of the division is <=256 we stop allowing RasterPyramid structs
* to be added to the list. Each time a RasterPyramid is created
* we will check to see if a pyramid matching these dimensions already exists
* in the raster layer, and if so mark the exists flag as true */
/* typedef QList<QgsRasterPyramid> RasterPyramidList; */

/** \brief A list containing one RasterBandStats struct per raster band in this raster layer.
* Note that while every RasterBandStats element will have the name and number of its associated
* band populated, any additional stats are calculated on a need to know basis.*/
/* typedef QList<QgsRasterBandStats> RasterStatsList; */

//
// Static methods:
//
Expand All @@ -128,69 +111,30 @@ class QgsRasterLayer : QgsMapLayer
*/
static bool isValidRasterFileName( const QString & theFileNameQString, QString &retError );
static bool isValidRasterFileName( const QString & theFileNameQString );
//static QStringList subLayers( GDALDatasetH dataset );

/** Return time stamp for given file name */
static QDateTime lastModified( const QString & name );

// Keep this for now, it is used by Python interface!!!
/** \brief ensures that GDAL drivers are registered, but only once */
static void registerGdalDrivers();

//
// Non Static inline methods
//

/** \brief Initialize default values */
void init();

/** [ data provider interface ] Set the data provider */
void setDataProvider( const QString & provider );

/** \brief Accessor for blue band name mapping */
QString blueBandName() const;

/** \brief Accessor for color shader algorithm */
QgsRasterLayer::ColorShadingAlgorithm colorShadingAlgorithm() const;

/** \brief Accessor for contrast enhancement algorithm */
QgsContrastEnhancement::ContrastEnhancementAlgorithm contrastEnhancementAlgorithm();

/** \brief Returns contrast enhancement algorithm as a string */
QString contrastEnhancementAlgorithmAsString() const;

/** \brief Accessor for drawing style */
DrawingStyle drawingStyle();

/** \brief Accessor for mHasPyramids (READ ONLY) */
/* bool hasPyramids(); */

/** \brief Accessor for mUserDefinedGrayMinimumMaximum */
bool hasUserDefinedGrayMinimumMaximum() const;

/** \brief Accessor for mUserDefinedRGBMinimumMaximum */
bool hasUserDefinedRGBMinimumMaximum() const;
/** \brief Accessor that returns the width of the (unclipped) raster */
int width();

/** \brief Accessor that returns the height of the (unclipped) raster */
int height();

/** \brief Accessor for raster layer type (which is a read only property) */
LayerType rasterType();


/** \brief Mutator for drawing style */
void setDrawingStyle( const DrawingStyle & theDrawingStyle );
/**Sets corresponding renderer for style*/
void setRendererForDrawingStyle( const DrawingStyle & theDrawingStyle );

/** \brief Mutator to alter the number of standard deviations that should be plotted */
void setStandardDeviations( double theStandardDeviations );

/** \brief Mutator for mUserDefinedGrayMinimumMaximum */
void setUserDefinedGrayMinimumMaximum( bool theBool );

/** \brief Mutator for mUserDefinedRGBMinimumMaximum */
void setUserDefinedRGBMinimumMaximum( bool theBool );

/**Set raster renderer. Takes ownership of the renderer object*/
void setRenderer( QgsRasterRenderer* theRenderer /Transfer/ );
Expand All @@ -203,12 +147,6 @@ class QgsRasterLayer : QgsMapLayer
/** Get raster pipe */
QgsRasterPipe * pipe();

/** \brief Accessor to find out how many standard deviations are being plotted */
double standardDeviations() const;

/** \brief Accessor that returns the width of the (unclipped) raster */
int width();

//
// Non Static methods
//
Expand All @@ -218,33 +156,6 @@ class QgsRasterLayer : QgsMapLayer
/** \brief Get the name of a band given its number */
const QString bandName( int theBandNoInt );

/** \brief Get the number of a band given its name. The name is the rewritten name set
* up in the constructor, and will not necessarily be the same as the name retrieved directly from gdal!
* If no matching band is found zero will be returned! */
int bandNumber( const QString & theBandName ) const;

/** \brief Accessor for ths raster layers pyramid list. A pyramid list defines the
* POTENTIAL pyramids that can be in a raster. To know which of the pyramid layers
* ACTUALLY exists you need to look at the existsFlag member in each struct stored in the
* list.
*/
// RasterPyramidList buildPyramidList();

/** \brief Accessor for color shader algorithm */
QString colorShadingAlgorithmAsString() const;

/** \brief Compute the actual minimum maximum pixel values based on the current (last) display extent
\note added in v1.6 */
//void computeMinimumMaximumFromLastExtent( int theBand, double& theMin /Out/, double& theMax /Out/ );

/** \brief Get a pointer to the contrast enhancement for the selected band */
QgsContrastEnhancement* contrastEnhancement( unsigned int theBand );

const QgsContrastEnhancement* constContrastEnhancement( unsigned int theBand ) const;

/** \brief Get a pointer to the color table */
QList<QgsColorRampShader::ColorRampItem> colorTable( int theBandNoInt );

/** Returns the data provider */
QgsRasterDataProvider* dataProvider();

Expand All @@ -266,33 +177,6 @@ class QgsRasterLayer : QgsMapLayer
QgsRasterViewPort * myRasterViewPort,
const QgsMapToPixel* theQgsMapToPixel = 0 );

/** \brief Returns a string representation of drawing style
*
* Implemented mainly for serialisation / deserialisation of settings to xml.
* NOTE: May be deprecated in the future!. DrawingStyle drawingStyle() instead.
* */
QString drawingStyleAsString() const;

/** \brief Identify raster value(s) found on the point position */
//bool identify( const QgsPoint & point, QMap<QString, QString>& results /Out/ );

/** \brief Identify raster value(s) found on the point position */
// bool identifyMap( const QgsPoint & point, QMap<int, QString>& results /Out/ );
//%MethodCode
// sipRes = sipCpp->identify( *a0, *a1 );
//%End

/** \brief Identify arbitrary details from the WMS server found on the point position */
//QString identifyAsText( const QgsPoint & point );

/** \brief Identify arbitrary details from the WMS server found on the point position
* @note added in 1.5
*/
//QString identifyAsHtml( const QgsPoint & point );

/** \brief Currently returns always false */
bool isEditable() const;

/** \brief [ data provider interface ] If an operation returns 0 (e.g. draw()), this function returns the text of the error associated with the failure */
QString lastError();

Expand All @@ -303,21 +187,9 @@ class QgsRasterLayer : QgsMapLayer
@note this method was added in version 1.8*/
QList< QPair< QString, QColor > > legendSymbologyItems() const;

/** \brief Accessor for maximum value user for contrast enhancement */
double maximumValue( unsigned int theBand );

/** \brief Accessor for maximum value user for contrast enhancement */
double maximumValue( QString theBand );

/** \brief Obtain GDAL Metadata for this layer */
QString metadata();

/** \brief Accessor for minimum value user for contrast enhancement */
double minimumValue( unsigned int theBand );

/** \brief Accessor for minimum value user for contrast enhancement */
double minimumValue( QString theBand );

/** \brief Get an 100x100 pixmap of the color palette. If the layer has no palette a white pixmap will be returned */
QPixmap paletteAsPixmap( int theBandNumber = 1 );

Expand All @@ -329,20 +201,9 @@ class QgsRasterLayer : QgsMapLayer
/** \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();

/** \brief Read color table from GDAL raster band */
// bool readColorTable( int theBandNumber, QList<QgsColorRampShader::ColorRampItem>* theList );

/** \brief Simple reset function that set the noDataValue back to the value stored in the first raster band */
//void resetNoDataValue();

static QString contrastEnhancementLimitsAsString( QgsRasterLayer::ContrastEnhancementLimits theLimits );
static ContrastEnhancementLimits contrastEnhancementLimitsFromString( QString theLimits );

/** \brief Mutator for contrast enhancement algorithm using min/max */
// TODO: remove in 2.0, replaced by following
// void setContrastEnhancementAlgorithm( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm,
// bool theGenerateLookupTableFlag = true );

/** \brief Mutator for contrast enhancement algorithm
* @param theAlgorithm Contrast enhancement algorithm
* @param theLimits Limits
Expand All @@ -357,30 +218,12 @@ class QgsRasterLayer : QgsMapLayer
int theSampleSize = QgsRasterLayer::SAMPLE_SIZE,
bool theGenerateLookupTableFlag = true );

/** \brief Mutator for contrast enhancement algorithm */
void setContrastEnhancementAlgorithm( QString theAlgorithm, bool theGenerateLookupTableFlag = true );

/** \brief Mutator for contrast enhancement function */
void setContrastEnhancementFunction( QgsContrastEnhancementFunction* theFunction );

/** \brief Set default contrast enhancement */
void setDefaultContrastEnhancement();

/** \brief Overloaded version of the above function for convenience when restoring from xml */
void setDrawingStyle( const QString & theDrawingStyleQString );

/** \brief Mutator for setting the maximum value for contrast enhancement */
void setMaximumValue( unsigned int theBand, double theValue, bool theGenerateLookupTableFlag = true );

/** \brief Sets the minimum and maximum values for the band(s) currently
* being displayed using the only pixel values from the last/current extent
* */
void setMinimumMaximumUsingLastExtent();

/** \brief Sets the minimum and maximum values for the band(s) currently
* being displayed using the only pixel values from the dataset min/max */
void setMinimumMaximumUsingDataset();

/** \brief [ data provider interface ] A wrapper function to emit a progress update signal */
void showProgress( int theValue );

Expand Down Expand Up @@ -413,11 +256,6 @@ class QgsRasterLayer : QgsMapLayer
virtual QDateTime timestamp() const;

public slots:
/** \brief Create GDAL pyramid overviews */
// QString buildPyramids( const RasterPyramidList &,
// const QString & theResamplingMethod = "NEAREST",
// bool theTryInternalFlag = false );

void showStatusMessage( const QString & theMessage );

/** \brief Propagate progress updates from GDAL up to the parent app */
Expand Down
18 changes: 2 additions & 16 deletions src/app/legend/qgslegend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2753,25 +2753,11 @@ void QgsLegend::legendLayerStretchUsingCurrentExtent()
QgsRasterLayer *layer = qobject_cast<QgsRasterLayer *>( currentLayer->layer() );
if ( layer )
{
// Note: Do we really want to do these next clauses? The user will get a surprise when the
// drawing style they are using suddenly changes....! TS
if ( layer->drawingStyle() == QgsRasterLayer::SingleBandPseudoColor )
{
layer->setDrawingStyle( QgsRasterLayer::SingleBandGray );
}
else if ( layer->drawingStyle() == QgsRasterLayer::MultiBandSingleBandPseudoColor )
{
layer->setDrawingStyle( QgsRasterLayer::MultiBandSingleBandGray );
}

if ( layer->contrastEnhancementAlgorithmAsString() == "NoEnhancement" )
{
layer->setContrastEnhancementAlgorithm( "StretchToMinimumMaximum" );
}
QgsContrastEnhancement::ContrastEnhancementAlgorithm contrastEnhancementAlgorithm = QgsContrastEnhancement::StretchToMinimumMaximum;

QgsRectangle myRectangle;
myRectangle = mMapCanvas->mapRenderer()->outputExtentToLayerExtent( layer, mMapCanvas->extent() );
layer->setContrastEnhancementAlgorithm( layer->contrastEnhancementAlgorithm(), QgsRasterLayer::ContrastEnhancementMinMax, myRectangle );
layer->setContrastEnhancementAlgorithm( contrastEnhancementAlgorithm, QgsRasterLayer::ContrastEnhancementMinMax, myRectangle );

layer->setCacheImage( NULL );
refreshLayerSymbology( layer->id() );
Expand Down
2 changes: 1 addition & 1 deletion src/app/qgsrastercalcdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ void QgsRasterCalcDialog::insertAvailableRasterBands()
firstLayer = false;
}
//get number of bands
for ( unsigned int i = 0; i < rlayer->bandCount(); ++i )
for ( int i = 0; i < rlayer->bandCount(); ++i )
{
QgsRasterCalculatorEntry entry;
entry.raster = rlayer;
Expand Down
9 changes: 6 additions & 3 deletions src/core/qgsprojectfiletransform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -816,10 +816,13 @@ int QgsProjectFileTransform::rasterBandNumber( const QDomElement& rasterProperti
QDomElement rasterBandElem = rasterPropertiesElem.firstChildElement( bandName );
if ( !rasterBandElem.isNull() )
{
band = rlayer->bandNumber( rasterBandElem.text() );
if ( band == 0 )
for ( int i = 1; i <= rlayer->bandCount(); i++ )
{
band = -1;
if ( rlayer->bandName( i ) == rasterBandElem.text() )
{
band = i;
break;
}
}
}
return band;
Expand Down
54 changes: 52 additions & 2 deletions src/core/raster/qgscontrastenhancement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ void QgsContrastEnhancement::writeXML( QDomDocument& doc, QDomElement& parentEle

//algorithm
QDomElement algorithmElem = doc.createElement( "algorithm" );
QDomText algorithmText = doc.createTextNode( QString::number( mContrastEnhancementAlgorithm ) );
QDomText algorithmText = doc.createTextNode( contrastEnhancementAlgorithmString( mContrastEnhancementAlgorithm ) );
algorithmElem.appendChild( algorithmText );
parentElem.appendChild( algorithmElem );
}
Expand All @@ -415,8 +415,54 @@ void QgsContrastEnhancement::readXML( const QDomElement& elem )
QDomElement algorithmElem = elem.firstChildElement( "algorithm" );
if ( !algorithmElem.isNull() )
{
setContrastEnhancementAlgorithm(( ContrastEnhancementAlgorithm )( algorithmElem.text().toInt() ) );
QString algorithmString = algorithmElem.text();
ContrastEnhancementAlgorithm algorithm = NoEnhancement;
// old version ( < 19 Apr 2013) was using enum directly -> for backward compatibility
if ( algorithmString == "0" )
{
algorithm = NoEnhancement;
}
else if ( algorithmString == "1" )
{
algorithm = StretchToMinimumMaximum;
}
else if ( algorithmString == "2" )
{
algorithm = StretchAndClipToMinimumMaximum;
}
else if ( algorithmString == "3" )
{
algorithm = ClipToMinimumMaximum;
}
else if ( algorithmString == "4" )
{
algorithm = UserDefinedEnhancement;
}
else
{
algorithm = contrastEnhancementAlgorithmFromString( algorithmString );
}

setContrastEnhancementAlgorithm( algorithm );
}
}

QString QgsContrastEnhancement::contrastEnhancementAlgorithmString( ContrastEnhancementAlgorithm algorithm )
{
switch ( algorithm )
{
case NoEnhancement:
return "NoEnhancement";
case StretchToMinimumMaximum:
return "StretchToMinimumMaximum";
case StretchAndClipToMinimumMaximum:
return "StretchAndClipToMinimumMaximum";
case ClipToMinimumMaximum:
return "ClipToMinimumMaximum";
case UserDefinedEnhancement:
return "UserDefinedEnhancement";
}
return "NoEnhancement";
}

QgsContrastEnhancement::ContrastEnhancementAlgorithm QgsContrastEnhancement::contrastEnhancementAlgorithmFromString( const QString& contrastEnhancementString )
Expand All @@ -433,6 +479,10 @@ QgsContrastEnhancement::ContrastEnhancementAlgorithm QgsContrastEnhancement::con
{
return ClipToMinimumMaximum;
}
else if ( contrastEnhancementString == "UserDefinedEnhancement" )
{
return UserDefinedEnhancement;
}
else
{
return NoEnhancement;
Expand Down
Loading

0 comments on commit 8b18577

Please sign in to comment.