[QGIS Commit] r14898 - in branches/raster-providers/src:
core/raster providers/gdal
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Sun Dec 12 16:39:36 EST 2010
Author: rblazek
Date: 2010-12-12 13:39:35 -0800 (Sun, 12 Dec 2010)
New Revision: 14898
Modified:
branches/raster-providers/src/core/raster/qgsrasterlayer.cpp
branches/raster-providers/src/providers/gdal/qgsgdalprovider.cpp
Log:
gdal reprojection enabled but mostly not yet usable
Modified: branches/raster-providers/src/core/raster/qgsrasterlayer.cpp
===================================================================
--- branches/raster-providers/src/core/raster/qgsrasterlayer.cpp 2010-12-12 19:19:54 UTC (rev 14897)
+++ branches/raster-providers/src/core/raster/qgsrasterlayer.cpp 2010-12-12 21:39:35 UTC (rev 14898)
@@ -824,6 +824,25 @@
const QgsMapToPixel& theQgsMapToPixel = rendererContext.mapToPixel();
const QgsRectangle& theViewExtent = rendererContext.extent();
+
+ QgsRectangle myProjectedViewExtent;
+ QgsRectangle myProjectedLayerExtent;
+
+ if ( rendererContext.coordinateTransform() )
+ {
+ QgsDebugMsg( "coordinateTransform set -> project extents." );
+ myProjectedViewExtent = rendererContext.coordinateTransform()->transformBoundingBox (
+ rendererContext.extent() );
+ myProjectedLayerExtent = rendererContext.coordinateTransform()->transformBoundingBox (
+ mLayerExtent );
+ }
+ else
+ {
+ QgsDebugMsg( "coordinateTransform not set" );
+ myProjectedViewExtent = rendererContext.extent();
+ myProjectedLayerExtent = mLayerExtent;
+ }
+
QPainter* theQPainter = rendererContext.painter();
if ( !theQPainter )
@@ -832,7 +851,8 @@
}
// clip raster extent to view extent
- QgsRectangle myRasterExtent = theViewExtent.intersect( &mLayerExtent );
+ //QgsRectangle myRasterExtent = theViewExtent.intersect( &mLayerExtent );
+ QgsRectangle myRasterExtent = myProjectedViewExtent.intersect( &myProjectedLayerExtent );
if ( myRasterExtent.isEmpty() )
{
QgsDebugMsg( "draw request outside view extent." );
@@ -841,6 +861,8 @@
}
QgsDebugMsg( "theViewExtent is " + theViewExtent.toString() );
+ QgsDebugMsg( "myProjectedViewExtent is " + myProjectedViewExtent.toString() );
+ QgsDebugMsg( "myProjectedLayerExtent is " + myProjectedLayerExtent.toString() );
QgsDebugMsg( "myRasterExtent is " + myRasterExtent.toString() );
//
@@ -853,7 +875,8 @@
QgsRasterViewPort *myRasterViewPort = new QgsRasterViewPort();
myRasterViewPort->mDrawnExtent = myRasterExtent;
- if ( rendererContext.coordinateTransform() ) {
+ if ( rendererContext.coordinateTransform() )
+ {
myRasterViewPort->mDestCRS = rendererContext.coordinateTransform()->destCRS();
} else {
myRasterViewPort->mDestCRS = QgsCoordinateReferenceSystem(); // will be invalid
@@ -949,7 +972,7 @@
myRasterViewPort->topLeftPoint.setX( floor( myRasterViewPort->topLeftPoint.x() ) );
myRasterViewPort->topLeftPoint.setY( floor( myRasterViewPort->topLeftPoint.y() ) );
myRasterViewPort->bottomRightPoint.setX( ceil( myRasterViewPort->bottomRightPoint.x() ) );
- myRasterViewPort->bottomRightPoint.setY( ceil( myRasterViewPort->bottomRightPoint.y() + 10 ) );
+ myRasterViewPort->bottomRightPoint.setY( ceil( myRasterViewPort->bottomRightPoint.y() ) );
// recalc myRasterExtent to aligned values
myRasterExtent.set (
theQgsMapToPixel.toMapCoordinatesF ( myRasterViewPort->topLeftPoint.x(),
@@ -5062,9 +5085,10 @@
double yMin = yMax - ySize * mMapToPixel->mapUnitsPerPixel();
QgsDebugMsg( QString("mCurrentRow = %1 yMaximum = %2 ySize = %3 mapUnitsPerPixel = %4").arg(mCurrentRow).arg(mViewPort->mDrawnExtent.yMaximum()).arg(ySize).arg(mMapToPixel->mapUnitsPerPixel()) );
- QgsRectangle partExtent ( mViewPort->mDrawnExtent.xMinimum(), yMin,
+ QgsRectangle myPartExtent ( mViewPort->mDrawnExtent.xMinimum(), yMin,
mViewPort->mDrawnExtent.xMaximum(), yMax );
- mDataProvider->readBlock ( mBandNo, partExtent, xSize, ySize, mViewPort->mDestCRS, mCurrentGDALData );
+ QgsDebugMsg( "myPartExtent is " + myPartExtent.toString() );
+ mDataProvider->readBlock ( mBandNo, myPartExtent, xSize, ySize, mViewPort->mDestCRS, mCurrentGDALData );
// TODO - error check - throw exception
Modified: branches/raster-providers/src/providers/gdal/qgsgdalprovider.cpp
===================================================================
--- branches/raster-providers/src/providers/gdal/qgsgdalprovider.cpp 2010-12-12 19:19:54 UTC (rev 14897)
+++ branches/raster-providers/src/providers/gdal/qgsgdalprovider.cpp 2010-12-12 21:39:35 UTC (rev 14898)
@@ -469,6 +469,7 @@
QgsDebugMsg( "thePixelWidth = " + QString::number( thePixelWidth ) );
QgsDebugMsg( "thePixelHeight = " + QString::number( thePixelHeight ) );
QgsDebugMsg( "theExtent: " + theExtent.toString() );
+ QgsDebugMsg( "crs(): " + crs().toWkt() );
QgsDebugMsg( "theDestCRS: " + theDestCRS.toWkt() );
@@ -504,10 +505,14 @@
}
// TODO add CRS to method params
+ // TODO: SRC CRS can be forced from GUI - check? Also default project sould be
+ // probably used if the source has no CRS
//GDALSetProjection( myGdalMemDataset, crs().toWkt().toAscii().constData() );
- GDALSetProjection( myGdalMemDataset, GDALGetProjectionRef( mGdalDataset ) );
- //GDALSetProjection( myGdalMemDataset, theDestCRS.toWkt().toAscii().constData() );
+ //const char *mySrcCRSChar = crs().toWkt().toAscii().constData();
+ //GDALSetProjection( myGdalMemDataset, GDALGetProjectionRef( mGdalDataset ) );
+ GDALSetProjection( myGdalMemDataset, theDestCRS.toWkt().toAscii().constData() );
+
double myMemGeoTransform[6];
myMemGeoTransform[0] = theExtent.xMinimum(); /* top left x */
myMemGeoTransform[1] = theExtent.width()/thePixelWidth; /* w-e pixel resolution */
@@ -547,6 +552,7 @@
GDALCreateGenImgProjTransformer(
mGdalDataset,
GDALGetProjectionRef(mGdalDataset),
+ //mySrcCRSChar,
myGdalMemDataset,
GDALGetProjectionRef(myGdalMemDataset),
FALSE, 0.0, 1
@@ -575,8 +581,8 @@
// TODO optimize somehow to avoid no data init if not necessary
// i.e. no projection, but there is also the problem with margine
- myWarpOptions->papszWarpOptions =
- CSLSetNameValue(myWarpOptions->papszWarpOptions,"INIT_DEST", "NO_DATA" );
+ //myWarpOptions->papszWarpOptions =
+ // CSLSetNameValue(myWarpOptions->papszWarpOptions,"INIT_DEST", "NO_DATA" );
GDALWarpOperation myOperation;
More information about the QGIS-commit
mailing list