diff --git a/src/core/qgscoordinatetransform.cpp b/src/core/qgscoordinatetransform.cpp index 6eabdb0ab68..42427f9394b 100644 --- a/src/core/qgscoordinatetransform.cpp +++ b/src/core/qgscoordinatetransform.cpp @@ -127,6 +127,15 @@ QgsCoordinateTransform::~QgsCoordinateTransform() } } +QgsCoordinateTransform* QgsCoordinateTransform::clone() const +{ + QgsCoordinateTransform* tr = new QgsCoordinateTransform( sourceCrs(), destCRS() ); + tr->setSourceDatumTransform( sourceDatumTransform() ); + tr->setDestinationDatumTransform( destinationDatumTransform() ); + tr->initialise(); + return tr; +} + void QgsCoordinateTransform::setSourceCrs( const QgsCoordinateReferenceSystem& theCRS ) { mSourceCRS = theCRS; diff --git a/src/core/qgscoordinatetransform.h b/src/core/qgscoordinatetransform.h index 41238947eb6..df9c3149551 100644 --- a/src/core/qgscoordinatetransform.h +++ b/src/core/qgscoordinatetransform.h @@ -88,6 +88,8 @@ class CORE_EXPORT QgsCoordinateTransform : public QObject //! destructor ~QgsCoordinateTransform(); + QgsCoordinateTransform* clone() const; + //! Enum used to indicate the direction (forward or inverse) of the transform enum TransformDirection { diff --git a/src/core/qgspallabeling.cpp b/src/core/qgspallabeling.cpp index d91c3241a69..e5e3331f64c 100644 --- a/src/core/qgspallabeling.cpp +++ b/src/core/qgspallabeling.cpp @@ -3297,10 +3297,15 @@ int QgsPalLabeling::prepareLayer( QgsVectorLayer* layer, QSet& attrIndices, lyr.fieldIndex = fldIndex; lyr.xform = mMapRenderer->coordinateTransform(); + lyr.ct = 0; if ( mMapRenderer->hasCrsTransformEnabled() ) - lyr.ct = new QgsCoordinateTransform( layer->crs(), mMapRenderer->destinationCrs() ); - else - lyr.ct = NULL; + { + const QgsCoordinateTransform* tr = mMapRenderer->transformation( layer ); + if ( tr ) + { + lyr.ct = tr->clone(); + } + } lyr.ptZero = lyr.xform->toMapCoordinates( 0, 0 ); lyr.ptOne = lyr.xform->toMapCoordinates( 1, 0 ); @@ -3318,10 +3323,15 @@ int QgsPalLabeling::addDiagramLayer( QgsVectorLayer* layer, QgsDiagramLayerSetti l->setArrangementFlags( s->placementFlags ); s->palLayer = l; + s->ct = 0; if ( mMapRenderer->hasCrsTransformEnabled() ) - s->ct = new QgsCoordinateTransform( layer->crs(), mMapRenderer->destinationCrs() ); - else - s->ct = NULL; + { + const QgsCoordinateTransform* tr = mMapRenderer->transformation( layer ); + if ( tr ) + { + s->ct = tr->clone(); + } + } s->xform = mMapRenderer->coordinateTransform(); mActiveDiagramLayers.insert( layer, *s ); return 1;