[QGIS Commit] r15409 - trunk/qgis/src/providers/gdal

svn_qgis at osgeo.org svn_qgis at osgeo.org
Wed Mar 9 16:40:48 EST 2011


Author: rblazek
Date: 2011-03-09 13:40:48 -0800 (Wed, 09 Mar 2011)
New Revision: 15409

Modified:
   trunk/qgis/src/providers/gdal/qgsgdalprovider.cpp
Log:
temporary? ugly fix for not georeferenced images

Modified: trunk/qgis/src/providers/gdal/qgsgdalprovider.cpp
===================================================================
--- trunk/qgis/src/providers/gdal/qgsgdalprovider.cpp	2011-03-09 20:29:12 UTC (rev 15408)
+++ trunk/qgis/src/providers/gdal/qgsgdalprovider.cpp	2011-03-09 21:40:48 UTC (rev 15409)
@@ -534,8 +534,13 @@
   myMemDsn.sprintf( "DATAPOINTER = %p", theBlock );
   QgsDebugMsg( myMemDsn );
 
-  myMemDsn.sprintf( "MEM:::DATAPOINTER=%lu,PIXELS=%d,LINES=%d,BANDS=1,DATATYPE=%s,PIXELOFFSET=0,LINEOFFSET=0,BANDOFFSET=0", ( long )theBlock, thePixelWidth, thePixelHeight,  GDALGetDataTypeName(( GDALDataType )mGdalDataType[theBandNo-1] ) );
+  //myMemDsn.sprintf( "MEM:::DATAPOINTER=%lu,PIXELS=%d,LINES=%d,BANDS=1,DATATYPE=%s,PIXELOFFSET=0,LINEOFFSET=0,BANDOFFSET=0", ( long )theBlock, thePixelWidth, thePixelHeight,  GDALGetDataTypeName(( GDALDataType )mGdalDataType[theBandNo-1] ) );
+  char szPointer[64];
+  memset( szPointer, 0, sizeof(szPointer) );
+  CPLPrintPointer( szPointer, theBlock, sizeof(szPointer) );
 
+  myMemDsn.sprintf( "MEM:::DATAPOINTER=%s,PIXELS=%d,LINES=%d,BANDS=1,DATATYPE=%s,PIXELOFFSET=0,LINEOFFSET=0,BANDOFFSET=0", szPointer, thePixelWidth, thePixelHeight,  GDALGetDataTypeName(( GDALDataType )mGdalDataType[theBandNo-1] ) );
+
   QgsDebugMsg( "Open GDAL MEM : " + myMemDsn );
 
   CPLErrorReset();
@@ -560,6 +565,13 @@
 
   double myGeoTransform[6];
   GDALGetGeoTransform( mGdalDataset, myGeoTransform );
+  // TODO:
+  // Attention: GDALCreateGenImgProjTransformer failes if source data source
+  // is not georeferenced, e.g. matrix 0,1,0,0,0,1/-1
+  // as a workaround in such case we have to set some different value - really ugly
+  myGeoTransform[0] = DBL_MIN;
+  GDALSetGeoTransform( mGdalDataset, myGeoTransform );
+
   GDALSetGeoTransform( myGdalMemDataset, myMemGeoTransform );
 
   for ( int i = 0 ; i < 6; i++ )
@@ -593,8 +605,24 @@
       NULL,
       FALSE, 0.0, 1
     );
-
-  CPLAssert( myWarpOptions->pTransformerArg  != NULL );
+  /*
+  myWarpOptions->pTransformerArg =
+    GDALCreateGenImgProjTransformer2(
+      mGdalDataset,
+      myGdalMemDataset,
+      NULL
+    );
+  */
+  if ( !myWarpOptions->pTransformerArg ) 
+  {
+    QMessageBox::warning( 0, QObject::tr( "Warning" ),
+                          QObject::tr( "Cannot GDALCreateGenImgProjTransformer: " )
+                          + QString::fromUtf8( CPLGetLastErrorMsg() ) );
+    return;
+    
+  };
+  
+  //CPLAssert( myWarpOptions->pTransformerArg  != NULL );
   myWarpOptions->pfnTransformer = GDALGenImgProjTransform;
 
   myWarpOptions->padfDstNoDataReal = ( double * ) CPLMalloc( myWarpOptions->nBandCount * sizeof( double ) );
@@ -616,7 +644,14 @@
 
   GDALWarpOperation myOperation;
 
-  myOperation.Initialize( myWarpOptions );
+  if ( myOperation.Initialize( myWarpOptions ) != CE_None ) 
+  {
+    QMessageBox::warning( 0, QObject::tr( "Warning" ),
+                          QObject::tr( "Cannot inittialize GDALWarpOperation : " )
+                          + QString::fromUtf8( CPLGetLastErrorMsg() ) );
+    return;
+    
+  };
   CPLErrorReset();
   CPLErr myErr;
   myErr = myOperation.ChunkAndWarpImage( 0, 0, thePixelWidth, thePixelHeight );



More information about the QGIS-commit mailing list