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

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Mar 15 19:19:12 EDT 2011


Author: jef
Date: 2011-03-15 16:19:12 -0700 (Tue, 15 Mar 2011)
New Revision: 15506

Modified:
   trunk/qgis/src/providers/gdal/qgsgdalprovider.cpp
   trunk/qgis/src/providers/gdal/qgsgdalprovider.h
Log:
gdal provider: change handling of crs

Modified: trunk/qgis/src/providers/gdal/qgsgdalprovider.cpp
===================================================================
--- trunk/qgis/src/providers/gdal/qgsgdalprovider.cpp	2011-03-15 21:08:20 UTC (rev 15505)
+++ trunk/qgis/src/providers/gdal/qgsgdalprovider.cpp	2011-03-15 23:19:12 UTC (rev 15506)
@@ -101,7 +101,8 @@
 
 
 QgsGdalProvider::QgsGdalProvider( QString const & uri )
-    : QgsRasterDataProvider( uri ), mValid( true )
+    : QgsRasterDataProvider( uri )
+    , mValid( true )
 {
   QgsDebugMsg( "QgsGdalProvider: constructing with uri '" + uri + "'." );
 
@@ -137,8 +138,8 @@
 
   // Check if we need a warped VRT for this file.
   bool hasGeoTransform = GDALGetGeoTransform( mGdalBaseDataset, mGeoTransform ) == CE_None;
-  if ( ( hasGeoTransform
-          && ( mGeoTransform[1] < 0.0
+  if (( hasGeoTransform
+        && ( mGeoTransform[1] < 0.0
              || mGeoTransform[2] != 0.0
              || mGeoTransform[4] != 0.0
              || mGeoTransform[5] > 0.0 ) )
@@ -149,7 +150,7 @@
     mGdalDataset =
       GDALAutoCreateWarpedVRT( mGdalBaseDataset, NULL, NULL,
                                GRA_NearestNeighbour, 0.2, NULL );
-    
+
     if ( mGdalDataset == NULL )
     {
       QgsLogger::warning( "Warped VRT Creation failed." );
@@ -158,7 +159,7 @@
     }
     else
     {
-      GDALGetGeoTransform(mGdalDataset, mGeoTransform);   
+      GDALGetGeoTransform( mGdalDataset, mGeoTransform );
     }
   }
   else
@@ -166,8 +167,8 @@
     mGdalDataset = mGdalBaseDataset;
     GDALReferenceDataset( mGdalDataset );
   }
-  
-  if (!hasGeoTransform)
+
+  if ( !hasGeoTransform )
   {
     // Initialise the affine transform matrix
     mGeoTransform[0] =  0;
@@ -200,22 +201,11 @@
   // QgsCoordinateTransform for this layer
   // NOTE: we must do this before metadata is called
 
-  QString myWktString;
-  myWktString = QString( GDALGetProjectionRef( mGdalDataset ) );
-  mCrs.createFromWkt( myWktString );
-  if ( !mCrs.isValid() )
+  if ( !crsFromWkt( GDALGetProjectionRef( mGdalDataset ) ) &&
+       !crsFromWkt( GDALGetGCPProjection( mGdalDataset ) ) )
   {
-    //try to get the gcp srs from the raster layer if available
-    myWktString = QString( GDALGetGCPProjection( mGdalDataset ) );
-// What is the purpose of this piece of code?
-// Sideeffects from validate()?
-//    myCRS.createFromWkt(myWktString);
-//    if (!myCRS.isValid())
-//    {
-//      // use force and make CRS valid!
-//      myCRS.validate();
-//    }
-
+    QgsDebugMsg( "No valid CRS identified" );
+    mCrs.validate();
   }
 
   //set up the coordinat transform - in the case of raster this is mainly used to convert
@@ -354,6 +344,43 @@
   QgsDebugMsg( "end" );
 }
 
+bool QgsGdalProvider::crsFromWkt( const char *wkt )
+{
+  void *hCRS = OSRNewSpatialReference( NULL );
+
+  if ( OSRImportFromWkt( hCRS, (char **) &wkt ) == OGRERR_NONE )
+  {
+    if ( OSRAutoIdentifyEPSG( hCRS ) == OGRERR_NONE )
+    {
+      QString authid = QString( "%1:%2" )
+	.arg( OSRGetAuthorityName( hCRS, NULL ) )
+	.arg( OSRGetAuthorityCode( hCRS, NULL ) );
+      QgsDebugMsg( "authid recognized as " + authid );
+      mCrs.createFromOgcWmsCrs( authid );
+    }
+    else
+    {
+      // get the proj4 text
+      char *pszProj4;
+      OSRExportToProj4( hCRS, &pszProj4 );
+      QgsDebugMsg( pszProj4 );
+      OGRFree( pszProj4 );
+
+      char *pszWkt = NULL;
+      OSRExportToWkt( hCRS, &pszWkt );
+      QString myWktString = QString( pszWkt );
+      OGRFree( pszWkt );
+
+      // create CRS from Wkt
+      mCrs.createFromWkt( myWktString );
+    }
+  }
+
+  OSRRelease( hCRS );
+
+  return mCrs.isValid();
+}
+
 QgsGdalProvider::~QgsGdalProvider()
 {
   QgsDebugMsg( "QgsGdalProvider: deconstructing." );

Modified: trunk/qgis/src/providers/gdal/qgsgdalprovider.h
===================================================================
--- trunk/qgis/src/providers/gdal/qgsgdalprovider.h	2011-03-15 21:08:20 UTC (rev 15505)
+++ trunk/qgis/src/providers/gdal/qgsgdalprovider.h	2011-03-15 23:19:12 UTC (rev 15506)
@@ -249,6 +249,8 @@
 
 
   private:
+    // initialize CRS from wkt
+    bool crsFromWkt( const char *wkt );
 
     /**
     * Flag indicating if the layer data source is a valid WMS layer



More information about the QGIS-commit mailing list