Skip to content

Commit

Permalink
Fix incorrect entries are added to coordinate transform cache
Browse files Browse the repository at this point in the history
if crs cannot be represented as auth/id combo
  • Loading branch information
nyalldawson committed May 21, 2019
1 parent 1f0fbd1 commit 0f1ecb6
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
18 changes: 17 additions & 1 deletion src/core/qgscoordinatetransform.cpp
Expand Up @@ -736,6 +736,14 @@ bool QgsCoordinateTransform::setFromCache( const QgsCoordinateReferenceSystem &s
if ( !src.isValid() || !dest.isValid() )
return false;

const QString sourceKey = src.authid().isEmpty() ?
src.toWkt() : src.authid();
const QString destKey = dest.authid().isEmpty() ?
dest.toWkt() : dest.authid();

if ( sourceKey.isEmpty() || destKey.isEmpty() )
return false;

sCacheLock.lockForRead();
const QList< QgsCoordinateTransform > values = sTransforms.values( qMakePair( src.authid(), dest.authid() ) );
for ( auto valIt = values.constBegin(); valIt != values.constEnd(); ++valIt )
Expand Down Expand Up @@ -768,8 +776,16 @@ void QgsCoordinateTransform::addToCache()
if ( !d->mSourceCRS.isValid() || !d->mDestCRS.isValid() )
return;

const QString sourceKey = d->mSourceCRS.authid().isEmpty() ?
d->mSourceCRS.toWkt() : d->mSourceCRS.authid();
const QString destKey = d->mDestCRS.authid().isEmpty() ?
d->mDestCRS.toWkt() : d->mDestCRS.authid();

if ( sourceKey.isEmpty() || destKey.isEmpty() )
return;

sCacheLock.lockForWrite();
sTransforms.insertMulti( qMakePair( d->mSourceCRS.authid(), d->mDestCRS.authid() ), *this );
sTransforms.insertMulti( qMakePair( sourceKey, destKey ), *this );
sCacheLock.unlock();
}

Expand Down
2 changes: 1 addition & 1 deletion tests/src/core/testqgsdistancearea.cpp
Expand Up @@ -356,7 +356,7 @@ void TestQgsDistanceArea::measureAreaAndUnits()
// test converting the resultant area
area = da.convertAreaMeasurement( area, QgsUnitTypes::AreaSquareYards );
QgsDebugMsg( QStringLiteral( "measured %1 in sq yrds" ).arg( area ) );
QGSCOMPARENEAR( area, 222237.185213, 0.3 );
QGSCOMPARENEAR( area, 222237.185213, 1.0 );
}

void TestQgsDistanceArea::emptyPolygon()
Expand Down

0 comments on commit 0f1ecb6

Please sign in to comment.