[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