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 22, 2019
1 parent 00972e0 commit 23e3a72
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 23e3a72

Please sign in to comment.