예제 #1
0
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;
}
예제 #2
0
QgsCoordinateTransform* QgsCoordinateTransform::clone() const
{
    QgsCoordinateTransform* tr = new QgsCoordinateTransform( sourceCrs(), destCRS() );
    tr->setSourceDatumTransform( sourceDatumTransform() );
    tr->setDestinationDatumTransform( destinationDatumTransform() );
    tr->initialise();
    return tr;
}