From b8a2f0c1aa9d49dadfa2e5174b00a2a55ac13cea Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Fri, 14 Jun 2013 13:33:25 +0200 Subject: [PATCH] Update also crs transform cache if a crs has been updated --- src/core/qgscrscache.cpp | 23 +++++++++++++++++++++++ src/core/qgscrscache.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/src/core/qgscrscache.cpp b/src/core/qgscrscache.cpp index 3afd88d3f5f..9b1bd2552c4 100644 --- a/src/core/qgscrscache.cpp +++ b/src/core/qgscrscache.cpp @@ -57,6 +57,28 @@ const QgsCoordinateTransform* QgsCoordinateTransformCache::transform( const QStr } } +void QgsCoordinateTransformCache::invalidateCrs( const QString& crsAuthId ) +{ + //get keys to remove first + QHash< QPair< QString, QString >, QgsCoordinateTransform* >::iterator it = mTransforms.begin(); + QList< QPair< QString, QString > > updateList; + + for ( ; it != mTransforms.end(); ++it ) + { + if ( it.key().first == crsAuthId || it.key().second == crsAuthId ) + { + updateList.append( it.key() ); + } + } + + //and remove after + QList< QPair< QString, QString > >::const_iterator updateIt = updateList.constBegin(); + for ( ; updateIt != updateList.constEnd(); ++updateIt ) + { + mTransforms.remove( *updateIt ); + } +} + QgsCRSCache* QgsCRSCache::mInstance = 0; QgsCRSCache* QgsCRSCache::instance() @@ -84,6 +106,7 @@ void QgsCRSCache::updateCRSCache( const QString& authid ) { mCRS.insert( authid, s ); } + QgsCoordinateTransformCache::instance()->invalidateCrs( authid ); } const QgsCoordinateReferenceSystem& QgsCRSCache::crsByAuthId( const QString& authid ) diff --git a/src/core/qgscrscache.h b/src/core/qgscrscache.h index 6567d5a90ed..81da0462a84 100644 --- a/src/core/qgscrscache.h +++ b/src/core/qgscrscache.h @@ -34,6 +34,8 @@ class CORE_EXPORT QgsCoordinateTransformCache @param srcAuthId auth id string of source crs @param destAuthId auth id string of dest crs*/ const QgsCoordinateTransform* transform( const QString& srcAuthId, const QString& destAuthId ); + /**Removes transformations where a changed crs is involved from the cache*/ + void invalidateCrs( const QString& crsAuthId ); private: static QgsCoordinateTransformCache* mInstance;