Skip to content

Commit c8153fb

Browse files
author
jef
committed
heck, fix #3620
git-svn-id: http://svn.osgeo.org/qgis/trunk@15527 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 2edcfa6 commit c8153fb

File tree

2 files changed

+46
-21
lines changed

2 files changed

+46
-21
lines changed

src/providers/ogr/qgsogrprovider.cpp

+45-21
Original file line numberDiff line numberDiff line change
@@ -1807,6 +1807,44 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
18071807
return true;
18081808
}
18091809

1810+
bool QgsOgrProvider::crsFromWkt( QgsCoordinateReferenceSystem &srs, const char *wkt )
1811+
{
1812+
void *hCRS = OSRNewSpatialReference( NULL );
1813+
1814+
if ( OSRImportFromWkt( hCRS, ( char ** ) &wkt ) == OGRERR_NONE )
1815+
{
1816+
if ( OSRAutoIdentifyEPSG( hCRS ) == OGRERR_NONE )
1817+
{
1818+
QString authid = QString( "%1:%2" )
1819+
.arg( OSRGetAuthorityName( hCRS, NULL ) )
1820+
.arg( OSRGetAuthorityCode( hCRS, NULL ) );
1821+
QgsDebugMsg( "authid recognized as " + authid );
1822+
srs.createFromOgcWmsCrs( authid );
1823+
}
1824+
else
1825+
{
1826+
// get the proj4 text
1827+
char *pszProj4;
1828+
OSRExportToProj4( hCRS, &pszProj4 );
1829+
QgsDebugMsg( pszProj4 );
1830+
OGRFree( pszProj4 );
1831+
1832+
char *pszWkt = NULL;
1833+
OSRExportToWkt( hCRS, &pszWkt );
1834+
QString myWktString = QString( pszWkt );
1835+
OGRFree( pszWkt );
1836+
1837+
// create CRS from Wkt
1838+
srs.createFromWkt( myWktString );
1839+
}
1840+
}
1841+
1842+
OSRRelease( hCRS );
1843+
1844+
return srs.isValid();
1845+
}
1846+
1847+
18101848
QgsCoordinateReferenceSystem QgsOgrProvider::crs()
18111849
{
18121850
QgsDebugMsg( "entering." );
@@ -1827,29 +1865,14 @@ QgsCoordinateReferenceSystem QgsOgrProvider::crs()
18271865
QString myWktString = prjStream.readLine();
18281866
prjFile.close();
18291867

1830-
// create CRS from Wkt
1831-
srs.createFromWkt( myWktString );
1832-
1833-
if ( srs.isValid() )
1868+
if ( crsFromWkt( srs, myWktString.toUtf8().constData() ) )
18341869
return srs;
18351870
}
18361871
}
18371872
}
18381873

18391874
OGRSpatialReferenceH mySpatialRefSys = OGR_L_GetSpatialRef( ogrLayer );
1840-
if ( mySpatialRefSys == NULL )
1841-
{
1842-
QgsDebugMsg( "no spatial reference found" );
1843-
}
1844-
else if ( OSRAutoIdentifyEPSG( mySpatialRefSys ) == OGRERR_NONE )
1845-
{
1846-
QString authid = QString( "%1:%2" )
1847-
.arg( OSRGetAuthorityName( mySpatialRefSys, NULL ) )
1848-
.arg( OSRGetAuthorityCode( mySpatialRefSys, NULL ) );
1849-
QgsDebugMsg( "authid recognized as " + authid );
1850-
srs.createFromOgcWmsCrs( authid );
1851-
}
1852-
else
1875+
if ( mySpatialRefSys )
18531876
{
18541877
// get the proj4 text
18551878
char *pszProj4;
@@ -1859,11 +1882,12 @@ QgsCoordinateReferenceSystem QgsOgrProvider::crs()
18591882

18601883
char *pszWkt = NULL;
18611884
OSRExportToWkt( mySpatialRefSys, &pszWkt );
1862-
QString myWktString = QString( pszWkt );
1885+
crsFromWkt( srs, pszWkt );
18631886
OGRFree( pszWkt );
1864-
1865-
// create CRS from Wkt
1866-
srs.createFromWkt( myWktString );
1887+
}
1888+
else
1889+
{
1890+
QgsDebugMsg( "no spatial reference found" );
18671891
}
18681892

18691893
return srs;

src/providers/ogr/qgsogrprovider.h

+1
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ class QgsOgrProvider : public QgsVectorDataProvider
255255
void setRelevantFields( bool fetchGeometry, const QgsAttributeList& fetchAttributes );
256256

257257
private:
258+
bool crsFromWkt( QgsCoordinateReferenceSystem &srs, const char *wkt );
258259
unsigned char *getGeometryPointer( OGRFeatureH fet );
259260
QgsFieldMap mAttributeFields;
260261
OGRDataSourceH ogrDataSource;

0 commit comments

Comments
 (0)