[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