Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
heck, fix #3620
git-svn-id: http://svn.osgeo.org/qgis/trunk@15527 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
jef committed Mar 17, 2011
1 parent 2edcfa6 commit c8153fb
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 21 deletions.
66 changes: 45 additions & 21 deletions src/providers/ogr/qgsogrprovider.cpp
Expand Up @@ -1807,6 +1807,44 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
return true;
}

bool QgsOgrProvider::crsFromWkt( QgsCoordinateReferenceSystem &srs, 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 );
srs.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
srs.createFromWkt( myWktString );
}
}

OSRRelease( hCRS );

return srs.isValid();
}


QgsCoordinateReferenceSystem QgsOgrProvider::crs()
{
QgsDebugMsg( "entering." );
Expand All @@ -1827,29 +1865,14 @@ QgsCoordinateReferenceSystem QgsOgrProvider::crs()
QString myWktString = prjStream.readLine();
prjFile.close();

// create CRS from Wkt
srs.createFromWkt( myWktString );

if ( srs.isValid() )
if ( crsFromWkt( srs, myWktString.toUtf8().constData() ) )
return srs;
}
}
}

OGRSpatialReferenceH mySpatialRefSys = OGR_L_GetSpatialRef( ogrLayer );
if ( mySpatialRefSys == NULL )
{
QgsDebugMsg( "no spatial reference found" );
}
else if ( OSRAutoIdentifyEPSG( mySpatialRefSys ) == OGRERR_NONE )
{
QString authid = QString( "%1:%2" )
.arg( OSRGetAuthorityName( mySpatialRefSys, NULL ) )
.arg( OSRGetAuthorityCode( mySpatialRefSys, NULL ) );
QgsDebugMsg( "authid recognized as " + authid );
srs.createFromOgcWmsCrs( authid );
}
else
if ( mySpatialRefSys )
{
// get the proj4 text
char *pszProj4;
Expand All @@ -1859,11 +1882,12 @@ QgsCoordinateReferenceSystem QgsOgrProvider::crs()

char *pszWkt = NULL;
OSRExportToWkt( mySpatialRefSys, &pszWkt );
QString myWktString = QString( pszWkt );
crsFromWkt( srs, pszWkt );
OGRFree( pszWkt );

// create CRS from Wkt
srs.createFromWkt( myWktString );
}
else
{
QgsDebugMsg( "no spatial reference found" );
}

return srs;
Expand Down
1 change: 1 addition & 0 deletions src/providers/ogr/qgsogrprovider.h
Expand Up @@ -255,6 +255,7 @@ class QgsOgrProvider : public QgsVectorDataProvider
void setRelevantFields( bool fetchGeometry, const QgsAttributeList& fetchAttributes );

private:
bool crsFromWkt( QgsCoordinateReferenceSystem &srs, const char *wkt );
unsigned char *getGeometryPointer( OGRFeatureH fet );
QgsFieldMap mAttributeFields;
OGRDataSourceH ogrDataSource;
Expand Down

0 comments on commit c8153fb

Please sign in to comment.