QgsCoordinateTransform QgsCoordinateTransformCache::transform( const QString& srcAuthId, const QString& destAuthId, int srcDatumTransform, int destDatumTransform ) { QList< QgsCoordinateTransform > values = mTransforms.values( qMakePair( srcAuthId, destAuthId ) ); QList< QgsCoordinateTransform >::const_iterator valIt = values.constBegin(); for ( ; valIt != values.constEnd(); ++valIt ) { if (( *valIt ).isValid() && ( *valIt ).sourceDatumTransform() == srcDatumTransform && ( *valIt ).destinationDatumTransform() == destDatumTransform ) { return *valIt; } } //not found, insert new value QgsCoordinateReferenceSystem srcCrs = QgsCoordinateReferenceSystem::fromOgcWmsCrs( srcAuthId ); QgsCoordinateReferenceSystem destCrs = QgsCoordinateReferenceSystem::fromOgcWmsCrs( destAuthId ); QgsCoordinateTransform ct = QgsCoordinateTransform( srcCrs, destCrs ); ct.setSourceDatumTransform( srcDatumTransform ); ct.setDestinationDatumTransform( destDatumTransform ); ct.initialise(); mTransforms.insertMulti( qMakePair( srcAuthId, destAuthId ), ct ); return ct; }
QgsCoordinateTransform* QgsCoordinateTransform::clone() const { QgsCoordinateTransform* tr = new QgsCoordinateTransform( sourceCrs(), destCRS() ); tr->setSourceDatumTransform( sourceDatumTransform() ); tr->setDestinationDatumTransform( destinationDatumTransform() ); tr->initialise(); return tr; }