Skip to content

Commit

Permalink
HFA: do not report TOWGS84 when reading SRS with WGS84, NAD27 or NAD8…
Browse files Browse the repository at this point in the history
…3 datums (unless OSR_STRIP_TOWGS84 config option is set to NO)

Fixes qgis/QGIS#36837
  • Loading branch information
rouault committed May 31, 2020
1 parent ac34a39 commit 6ae7f60
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 7 deletions.
18 changes: 18 additions & 0 deletions autotest/gcore/hfa_srs.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,3 +105,21 @@ def test_hfa_srs_wisconsin_tmerc():
sr = osr.SpatialReference()
sr.SetFromUserInput(wkt)
assert sr.GetAuthorityCode(None) == '103300'


def test_hfa_srs_NAD83_UTM():
sr = osr.SpatialReference()
sr.ImportFromEPSG(26915)

ds = gdal.GetDriverByName('HFA').Create('/vsimem/TestHFASRS.img', 1, 1)
ds.SetProjection(sr.ExportToWkt())
ds = None

ds = gdal.Open('/vsimem/TestHFASRS.img')
wkt = ds.GetProjectionRef()
assert ds.GetSpatialRef().GetAuthorityCode(None) == '26915'
ds = None

gdal.Unlink('/vsimem/TestHFASRS.img')

assert 'TOWGS84' not in wkt
34 changes: 27 additions & 7 deletions gdal/frmts/hfa/hfadataset.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5026,31 +5026,51 @@ HFAPCSStructToWKT( const Eprj_Datum *psDatum,
// Try and set the GeogCS information.
if( !oSRS.IsLocal() )
{
bool bWellKnwonDatum = false;
if( pszDatumName == nullptr)
oSRS.SetGeogCS(pszDatumName, pszDatumName, pszEllipsoidName,
psPro->proSpheroid.a, dfInvFlattening);
else if( EQUAL(pszDatumName, "WGS 84")
|| EQUAL(pszDatumName,"WGS_1984") )
{
bWellKnwonDatum = true;
oSRS.SetWellKnownGeogCS("WGS84" );
}
else if( strstr(pszDatumName, "NAD27") != nullptr
|| EQUAL(pszDatumName,"North_American_Datum_1927") )
{
bWellKnwonDatum = true;
oSRS.SetWellKnownGeogCS("NAD27");
}
else if( strstr(pszDatumName, "NAD83") != nullptr
|| EQUAL(pszDatumName, "North_American_Datum_1983"))
{
bWellKnwonDatum = true;
oSRS.SetWellKnownGeogCS("NAD83");
}
else
oSRS.SetGeogCS(pszDatumName, pszDatumName, pszEllipsoidName,
psPro->proSpheroid.a, dfInvFlattening);

if( psDatum != nullptr && psDatum->type == EPRJ_DATUM_PARAMETRIC )
{
oSRS.SetTOWGS84(psDatum->params[0],
psDatum->params[1],
psDatum->params[2],
-psDatum->params[3] * RAD2ARCSEC,
-psDatum->params[4] * RAD2ARCSEC,
-psDatum->params[5] * RAD2ARCSEC,
psDatum->params[6] * 1e+6);
if( bWellKnwonDatum &&
CPLTestBool(CPLGetConfigOption("OSR_STRIP_TOWGS84", "YES")) )
{
CPLDebug("OSR", "TOWGS84 information has been removed. "
"It can be kept by setting the OSR_STRIP_TOWGS84 "
"configuration option to NO");
}
else
{
oSRS.SetTOWGS84(psDatum->params[0],
psDatum->params[1],
psDatum->params[2],
-psDatum->params[3] * RAD2ARCSEC,
-psDatum->params[4] * RAD2ARCSEC,
-psDatum->params[5] * RAD2ARCSEC,
psDatum->params[6] * 1e+6);
}
}
}

Expand Down

0 comments on commit 6ae7f60

Please sign in to comment.