From 2405ab02aa2f68bb058f2ea9010adf592528ecf7 Mon Sep 17 00:00:00 2001 From: timlinux Date: Wed, 11 Feb 2004 08:07:24 +0000 Subject: [PATCH] Added a new method : getMetadata() which obtains metadata from GDAL for current raster layer. git-svn-id: http://svn.osgeo.org/qgis/trunk@796 c8812cc2-4d05-0410-92ff-de0c093fc19c --- src/qgsrasterlayer.cpp | 82 +++++++++++++++++++++++++++++++++++------- src/qgsrasterlayer.h | 2 ++ 2 files changed, 72 insertions(+), 12 deletions(-) diff --git a/src/qgsrasterlayer.cpp b/src/qgsrasterlayer.cpp index 6c5d035645f..5b62e2ade0f 100644 --- a/src/qgsrasterlayer.cpp +++ b/src/qgsrasterlayer.cpp @@ -96,13 +96,8 @@ QgsRasterLayer::QgsRasterLayer(QString path, QString baseName) return; } - if( gdalDataset->GetGeoTransform( adfGeoTransform ) == CE_None ) - { -#ifdef DEBUG - printf( "Origin = (%.6f,%.6f)\n", adfGeoTransform[0], adfGeoTransform[3] ); - printf( "Pixel Size = (%.6f,%.6f)\n", adfGeoTransform[1], adfGeoTransform[5] ); -#endif - } + //just testing remove this later + getMetadata(); double myXMaxDouble = adfGeoTransform[0] + gdalDataset->GetRasterXSize() * adfGeoTransform[1] + gdalDataset->GetRasterYSize() * adfGeoTransform[2]; @@ -326,6 +321,8 @@ bool QgsRasterLayer::hasBand(QString theBandName) void QgsRasterLayer::draw(QPainter * theQPainter, QgsRect * theViewExtent, QgsCoordinateTransform * theQgsCoordinateTransform) { + //Dont waste time drawing if transparency is at 0 (completely transparent) + if (transparencyLevelInt==0) return; // // --------------------------------------------------- //These are typical assignements made in this routine: @@ -602,22 +599,25 @@ void QgsRasterLayer::drawSingleBandGray(QPainter * theQPainter, int myGrayValInt=myGdalScanData[myColumnInt*theRasterViewPort->drawableAreaXDimInt + myRowInt]; //remove these lines! //if (myColumnInt==0) - //std::cout << "Checking if " << myGrayValInt << " = " << myRasterBandStats.noDataDouble << std::endl; + //std::cout << "Checking if " << myGrayValInt << " = " << noDataValueDouble << std::endl; //dont draw this point if it is no data ! - if (myGrayValInt != noDataValueDouble) + //gdal should return -9999 when a cell is null, but it seems to return 0 rather + if (myGrayValInt != 0) //noDataValueDouble) { // We need to make sure the values are 0-255 myGrayValInt = static_cast((255/myRangeDouble) * myGrayValInt); if (invertHistogramFlag) + { myGrayValInt=255-myGrayValInt; + } myQImage.setPixel( myRowInt, myColumnInt, qRgba( myGrayValInt, myGrayValInt, myGrayValInt, transparencyLevelInt )); } else //render no data as 100% transparent { //0 alpha = completely transparent - myQImage.setPixel( myRowInt, myColumnInt, qRgba( 255, 255, 255, 0 )); + //myQImage.setPixel( myRowInt, myColumnInt, qRgba( 255, 127, 255, 127 )); } } } @@ -706,7 +706,8 @@ void QgsRasterLayer::drawSingleBandPseudoColor(QPainter * theQPainter, RasterVie myGreenInt = 255; int myInt=myGdalScanData[myColumnInt*theRasterViewPort->drawableAreaXDimInt + myRowInt]; // draw this point if it is not no_data ! - if (myInt!=noDataValueDouble) + //gdal should return -9999 when a cell is null, but it seems to return 0 rather + if (myInt != noDataValueDouble) { //double check that myInt >= min and <= max //this is relevant if we are plotting within stddevs @@ -771,7 +772,7 @@ void QgsRasterLayer::drawSingleBandPseudoColor(QPainter * theQPainter, RasterVie else //nodata so draw transparent { //0 alpha = completely transparent - myQImage.setPixel( myRowInt, myColumnInt, qRgba( 255, 255, 255, 0 )); + //myQImage.setPixel( myRowInt, myColumnInt, qRgba( 255, 255, 255, 0 )); } }//end of columnwise loop }//end of towwise loop @@ -1939,3 +1940,60 @@ void QgsRasterLayer::initContextMenu(QgisApp *theApp){ popMenu->insertSeparator(); popMenu->insertItem(tr("&Remove"), theApp, SLOT(removeLayer())); } + +QString QgsRasterLayer::getMetadata() +{ + QString myMetadataQString = ""; + myMetadataQString += ""; + myMetadataQString += ""; + myMetadataQString += ""; + + myMetadataQString += ""; + myMetadataQString += ""; + + + if( gdalDataset->GetProjectionRef() != NULL ) + { + myMetadataQString += ""; + myMetadataQString += ""; + } + if( gdalDataset->GetGeoTransform( adfGeoTransform ) == CE_None ) + { + myMetadataQString += ""; + myMetadataQString += ""; + + myMetadataQString += ""; + myMetadataQString += ""; + } + myMetadataQString += "
"; + myMetadataQString += tr("Driver:"); + myMetadataQString += "
"; + myMetadataQString += QString(gdalDataset->GetDriver()->GetDescription()); + myMetadataQString += "
"; + myMetadataQString += QString(gdalDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME )) ; + myMetadataQString += "
"; + myMetadataQString += tr("Dimensions:"); + myMetadataQString += "
"; + myMetadataQString += tr("X: ") + QString::number(gdalDataset->GetRasterXSize()) + + tr(" Y: ") + QString::number(gdalDataset->GetRasterYSize()) + + tr(" Bands: ") + QString::number(gdalDataset->GetRasterCount()); + myMetadataQString += "
"; + myMetadataQString += tr("Projection: "); + myMetadataQString += "
"; + myMetadataQString += QString(gdalDataset->GetProjectionRef() ); + myMetadataQString += "
"; + myMetadataQString += tr("Origin:"); + myMetadataQString += "
"; + myMetadataQString += QString::number(adfGeoTransform[0] ); + myMetadataQString += ","; + myMetadataQString += QString::number(adfGeoTransform[3] ); + myMetadataQString += "
"; + myMetadataQString += tr("Pixel Size:"); + myMetadataQString += "
"; + myMetadataQString += QString::number(adfGeoTransform[1] ); + myMetadataQString += ","; + myMetadataQString += QString::number(adfGeoTransform[5] ); + myMetadataQString += "
"; + myMetadataQString += ""; + return myMetadataQString; +} diff --git a/src/qgsrasterlayer.h b/src/qgsrasterlayer.h index 54347b03670..8318c490c2a 100644 --- a/src/qgsrasterlayer.h +++ b/src/qgsrasterlayer.h @@ -651,6 +651,8 @@ public: QPopupMenu *contextMenu(); /** \brief Emit a signal asking for a repaint. */ void triggerRepaint(); + /** \brief Obtain GDAL Metadata for this layer */ + QString getMetadata(); private: