Skip to content

Commit

Permalink
Deprecate a QgsCoordinateTransformContext members which don't
Browse files Browse the repository at this point in the history
apply in proj >= 6.0 builds
  • Loading branch information
nyalldawson committed May 31, 2019
1 parent 823d28b commit 0cf4ecf
Show file tree
Hide file tree
Showing 9 changed files with 75 additions and 27 deletions.
31 changes: 22 additions & 9 deletions python/core/auto_generated/qgscoordinatetransformcontext.sip.in
Expand Up @@ -63,7 +63,7 @@ Copy constructor
Clears all stored transform information from the context.
%End

QMap< QPair< QString, QString>, QgsDatumTransform::TransformPair > sourceDestinationDatumTransforms() const;
QMap< QPair< QString, QString>, QgsDatumTransform::TransformPair > sourceDestinationDatumTransforms() const /Deprecated/;
%Docstring
Returns the stored mapping for source to destination CRS pairs to associated datum transforms to use.
The map keys will be :py:func:`QgsCoordinateReferenceSystems.authid()`s.
Expand All @@ -78,12 +78,12 @@ required for transformations for that source or destination.
to determine this.

.. seealso:: :py:func:`addSourceDestinationDatumTransform`


.. deprecated:: Has no effect on builds based on Proj 6.0 or later
%End

bool addSourceDestinationDatumTransform( const QgsCoordinateReferenceSystem &sourceCrs,
const QgsCoordinateReferenceSystem &destinationCrs,
int sourceTransformId,
int destinationTransformId );
bool addSourceDestinationDatumTransform( const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs, int sourceTransformId, int destinationTransformId ) /Deprecated/;
%Docstring
Adds a new ``sourceTransform`` and ``destinationTransform`` to use when projecting coordinates
from the specified ``sourceCrs`` to the specified ``destinationCrs``.
Expand All @@ -101,15 +101,27 @@ Returns ``True`` if the new transform pair was added successfully.
.. seealso:: :py:func:`sourceDestinationDatumTransforms`

.. seealso:: :py:func:`removeSourceDestinationDatumTransform`


.. deprecated:: Has no effect on builds based on Proj 6.0 or later
%End

void removeSourceDestinationDatumTransform( const QgsCoordinateReferenceSystem &sourceCrs,
const QgsCoordinateReferenceSystem &destinationCrs );
void removeSourceDestinationDatumTransform( const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs ) /Deprecated/;
%Docstring
Removes the source to destination datum transform pair for the specified ``sourceCrs`` and
``destinationCrs``.

.. seealso:: :py:func:`addSourceDestinationDatumTransform`

.. deprecated:: Use removeCoordinateOperation() instead
%End

void removeCoordinateOperation( const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs );
%Docstring
Removes the source to destination datum coordinated operation for the specified ``sourceCrs`` and
``destinationCrs``.

.. versionadded:: 3.8
%End

bool hasTransform( const QgsCoordinateReferenceSystem &source,
Expand All @@ -123,8 +135,7 @@ when transforming from the specified ``source`` CRS to ``destination`` CRS.
source and destination are reversible.
%End

QgsDatumTransform::TransformPair calculateDatumTransforms( const QgsCoordinateReferenceSystem &source,
const QgsCoordinateReferenceSystem &destination ) const;
QgsDatumTransform::TransformPair calculateDatumTransforms( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination ) const /Deprecated/;
%Docstring
Returns the pair of source and destination datum transforms to use
for a transform from the specified ``source`` CRS to ``destination`` CRS.
Expand All @@ -135,6 +146,8 @@ destination.
.. note::

source and destination are reversible.

.. deprecated:: Has no effect on builds based on Proj 6.0 or later
%End

bool readXml( const QDomElement &element, const QgsReadWriteContext &context, QStringList &missingTransforms /Out/ );
Expand Down
12 changes: 11 additions & 1 deletion src/app/qgsdatumtransformtablewidget.cpp
Expand Up @@ -46,7 +46,7 @@ void QgsDatumTransformTableModel::removeTransform( const QModelIndexList &indexe
}
if ( sourceCrs.isValid() && destinationCrs.isValid() )
{
mTransformContext.removeSourceDestinationDatumTransform( sourceCrs, destinationCrs );
mTransformContext.removeCoordinateOperation( sourceCrs, destinationCrs );
reset();
break;
}
Expand All @@ -57,7 +57,9 @@ void QgsDatumTransformTableModel::removeTransform( const QModelIndexList &indexe
int QgsDatumTransformTableModel::rowCount( const QModelIndex &parent ) const
{
Q_UNUSED( parent )
Q_NOWARN_DEPRECATED_PUSH
return mTransformContext.sourceDestinationDatumTransforms().count();
Q_NOWARN_DEPRECATED_POP
}

int QgsDatumTransformTableModel::columnCount( const QModelIndex &parent ) const
Expand All @@ -73,10 +75,14 @@ QVariant QgsDatumTransformTableModel::data( const QModelIndex &index, int role )
int sourceTransform = -1;
int destinationTransform = -1;

Q_NOWARN_DEPRECATED_PUSH
QPair< QString, QString> crses = mTransformContext.sourceDestinationDatumTransforms().keys().at( index.row() );
Q_NOWARN_DEPRECATED_POP
sourceCrs = crses.first;
destinationCrs = crses.second;
Q_NOWARN_DEPRECATED_PUSH
const QgsDatumTransform::TransformPair transforms = mTransformContext.sourceDestinationDatumTransforms().value( crses );
Q_NOWARN_DEPRECATED_POP
sourceTransform = transforms.sourceTransformId;
destinationTransform = transforms.destinationTransformId;

Expand Down Expand Up @@ -194,7 +200,9 @@ void QgsDatumTransformTableWidget::addDatumTransform()
{
const QgsDatumTransformDialog::TransformInfo dt = dlg.selectedDatumTransform();
QgsCoordinateTransformContext context = mModel->transformContext();
Q_NOWARN_DEPRECATED_PUSH
context.addSourceDestinationDatumTransform( dt.sourceCrs, dt.destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
Q_NOWARN_DEPRECATED_POP
mModel->setTransformContext( context );
selectionChanged();
}
Expand Down Expand Up @@ -248,7 +256,9 @@ void QgsDatumTransformTableWidget::editDatumTransform()
const QgsDatumTransformDialog::TransformInfo dt = dlg.selectedDatumTransform();
QgsCoordinateTransformContext context = mModel->transformContext();
// QMap::insert takes care of replacing existing value
Q_NOWARN_DEPRECATED_PUSH
context.addSourceDestinationDatumTransform( sourceCrs, destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
Q_NOWARN_DEPRECATED_POP
mModel->setTransformContext( context );
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/core/qgscoordinatetransform_p.cpp
Expand Up @@ -244,7 +244,9 @@ bool QgsCoordinateTransformPrivate::initialize()
void QgsCoordinateTransformPrivate::calculateTransforms( const QgsCoordinateTransformContext &context )
{
// recalculate datum transforms from context
Q_NOWARN_DEPRECATED_PUSH
QgsDatumTransform::TransformPair transforms = context.calculateDatumTransforms( mSourceCRS, mDestCRS );
Q_NOWARN_DEPRECATED_POP
mSourceDatumTransform = transforms.sourceTransformId;
mDestinationDatumTransform = transforms.destinationTransformId;
}
Expand Down
7 changes: 7 additions & 0 deletions src/core/qgscoordinatetransformcontext.cpp
Expand Up @@ -80,13 +80,20 @@ bool QgsCoordinateTransformContext::addSourceDestinationDatumTransform( const Qg
}

void QgsCoordinateTransformContext::removeSourceDestinationDatumTransform( const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs )
{
removeCoordinateOperation( sourceCrs, destinationCrs );
}

void QgsCoordinateTransformContext::removeCoordinateOperation( const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs )
{
d->mSourceDestDatumTransforms.remove( qMakePair( sourceCrs.authid(), destinationCrs.authid() ) );
}

bool QgsCoordinateTransformContext::hasTransform( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination ) const
{
Q_NOWARN_DEPRECATED_PUSH
QgsDatumTransform::TransformPair t = calculateDatumTransforms( source, destination );
Q_NOWARN_DEPRECATED_POP
// calculateDatumTransforms already takes care of switching source and destination
return t.sourceTransformId != -1 || t.destinationTransformId != -1;
}
Expand Down
28 changes: 19 additions & 9 deletions src/core/qgscoordinatetransformcontext.h
Expand Up @@ -94,8 +94,10 @@ class CORE_EXPORT QgsCoordinateTransformContext
* to determine this.
*
* \see addSourceDestinationDatumTransform()
*
* \deprecated Has no effect on builds based on Proj 6.0 or later
*/
QMap< QPair< QString, QString>, QgsDatumTransform::TransformPair > sourceDestinationDatumTransforms() const;
Q_DECL_DEPRECATED QMap< QPair< QString, QString>, QgsDatumTransform::TransformPair > sourceDestinationDatumTransforms() const SIP_DEPRECATED;

/**
* Adds a new \a sourceTransform and \a destinationTransform to use when projecting coordinates
Expand All @@ -111,19 +113,27 @@ class CORE_EXPORT QgsCoordinateTransformContext
*
* \see sourceDestinationDatumTransforms()
* \see removeSourceDestinationDatumTransform()
*
* \deprecated Has no effect on builds based on Proj 6.0 or later
*/
bool addSourceDestinationDatumTransform( const QgsCoordinateReferenceSystem &sourceCrs,
const QgsCoordinateReferenceSystem &destinationCrs,
int sourceTransformId,
int destinationTransformId );
Q_DECL_DEPRECATED bool addSourceDestinationDatumTransform( const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs, int sourceTransformId, int destinationTransformId ) SIP_DEPRECATED;

/**
* Removes the source to destination datum transform pair for the specified \a sourceCrs and
* \a destinationCrs.
* \see addSourceDestinationDatumTransform()
*
* \deprecated Use removeCoordinateOperation() instead
*/
Q_DECL_DEPRECATED void removeSourceDestinationDatumTransform( const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs ) SIP_DEPRECATED ;

/**
* Removes the source to destination datum coordinated operation for the specified \a sourceCrs and
* \a destinationCrs.
*
* \since QGIS 3.8
*/
void removeSourceDestinationDatumTransform( const QgsCoordinateReferenceSystem &sourceCrs,
const QgsCoordinateReferenceSystem &destinationCrs );
void removeCoordinateOperation( const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs );

/**
* Returns TRUE if the context has a valid datum transform to use
Expand All @@ -141,9 +151,9 @@ class CORE_EXPORT QgsCoordinateTransformContext
* destination.
*
* \note source and destination are reversible.
* \deprecated Has no effect on builds based on Proj 6.0 or later
*/
QgsDatumTransform::TransformPair calculateDatumTransforms( const QgsCoordinateReferenceSystem &source,
const QgsCoordinateReferenceSystem &destination ) const;
Q_DECL_DEPRECATED QgsDatumTransform::TransformPair calculateDatumTransforms( const QgsCoordinateReferenceSystem &source, const QgsCoordinateReferenceSystem &destination ) const SIP_DEPRECATED;

/**
* Reads the context's state from a DOM \a element.
Expand Down
4 changes: 4 additions & 0 deletions src/gui/qgsdatumtransformdialog.cpp
Expand Up @@ -45,7 +45,9 @@ bool QgsDatumTransformDialog::run( const QgsCoordinateReferenceSystem &sourceCrs
{
const TransformInfo dt = dlg.selectedDatumTransform();
QgsCoordinateTransformContext context = QgsProject::instance()->transformContext();
Q_NOWARN_DEPRECATED_PUSH
context.addSourceDestinationDatumTransform( dt.sourceCrs, dt.destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
Q_NOWARN_DEPRECATED_POP
QgsProject::instance()->setTransformContext( context );
return true;
}
Expand Down Expand Up @@ -364,7 +366,9 @@ void QgsDatumTransformDialog::applyDefaultTransform()
{
QgsCoordinateTransformContext context = QgsProject::instance()->transformContext();
const TransformInfo dt = defaultDatumTransform();
Q_NOWARN_DEPRECATED_PUSH
context.addSourceDestinationDatumTransform( dt.sourceCrs, dt.destinationCrs, dt.sourceTransformId, dt.destinationTransformId );
Q_NOWARN_DEPRECATED_POP
QgsProject::instance()->setTransformContext( context );
}
}
Expand Down
3 changes: 3 additions & 0 deletions tests/src/core/testqgscoordinatetransform.cpp
Expand Up @@ -189,6 +189,7 @@ void TestQgsCoordinateTransform::contextShared()
{
//test implicit sharing of QgsCoordinateTransformContext
QgsCoordinateTransformContext original;
Q_NOWARN_DEPRECATED_PUSH
original.addSourceDestinationDatumTransform( QgsCoordinateReferenceSystem( 3111 ), QgsCoordinateReferenceSystem( 3113 ), 1, 2 );

QgsCoordinateTransformContext copy( original );
Expand All @@ -215,6 +216,8 @@ void TestQgsCoordinateTransform::contextShared()
QCOMPARE( original.sourceDestinationDatumTransforms(), expected );
expected.insert( qMakePair( QStringLiteral( "EPSG:3111" ), QStringLiteral( "EPSG:3113" ) ), QgsDatumTransform::TransformPair( 3, 4 ) );
QCOMPARE( copy2.sourceDestinationDatumTransforms(), expected );

Q_NOWARN_DEPRECATED_POP
}

void TestQgsCoordinateTransform::scaleFactor()
Expand Down
5 changes: 2 additions & 3 deletions tests/src/gui/testqgsdatumtransformdialog.cpp
Expand Up @@ -114,6 +114,7 @@ void TestQgsDatumTransformDialog::applyDefaultTransform()
{
QgsSettings().setValue( QStringLiteral( "/projections/promptWhenMultipleTransformsExist" ), false, QgsSettings::App );

Q_NOWARN_DEPRECATED_PUSH
QgsDatumTransformDialog dlg( QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:26742" ) ), QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:7406" ) ) );
dlg.applyDefaultTransform();
QVERIFY( QgsProject::instance()->transformContext().sourceDestinationDatumTransforms().isEmpty() );
Expand All @@ -122,7 +123,6 @@ void TestQgsDatumTransformDialog::applyDefaultTransform()
dlg2.applyDefaultTransform();

QVERIFY( !QgsProject::instance()->transformContext().sourceDestinationDatumTransforms().isEmpty() );
Q_NOWARN_DEPRECATED_PUSH
QCOMPARE( QgsDatumTransform::datumTransformToProj( QgsProject::instance()->transformContext().calculateDatumTransforms( QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:26742" ) ), QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:4326" ) ) ).sourceTransformId ), QStringLiteral( "+towgs84=-10,158,187" ) );
Q_NOWARN_DEPRECATED_POP
QgsProject::instance()->clear();
Expand All @@ -131,14 +131,13 @@ void TestQgsDatumTransformDialog::applyDefaultTransform()
void TestQgsDatumTransformDialog::runDialog()
{
QgsSettings().setValue( QStringLiteral( "/projections/promptWhenMultipleTransformsExist" ), false, QgsSettings::App );

Q_NOWARN_DEPRECATED_PUSH
QVERIFY( QgsDatumTransformDialog::run( QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:26742" ) ), QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:7406" ) ) ) );
QVERIFY( QgsProject::instance()->transformContext().sourceDestinationDatumTransforms().isEmpty() );

QVERIFY( QgsDatumTransformDialog::run( QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:26742" ) ), QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:4326" ) ) ) );

QVERIFY( !QgsProject::instance()->transformContext().sourceDestinationDatumTransforms().isEmpty() );
Q_NOWARN_DEPRECATED_PUSH
QCOMPARE( QgsDatumTransform::datumTransformToProj( QgsProject::instance()->transformContext().calculateDatumTransforms( QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:26742" ) ), QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:4326" ) ) ).sourceTransformId ), QStringLiteral( "+towgs84=-10,158,187" ) );
Q_NOWARN_DEPRECATED_POP
QgsProject::instance()->clear();
Expand Down
10 changes: 5 additions & 5 deletions tests/src/python/test_qgscoordinatetransformcontext.py
Expand Up @@ -99,7 +99,7 @@ def testSourceDestinationDatumTransforms(self):
('EPSG:3111', 'EPSG:28356'): QgsDatumTransform.TransformPair(17, -1),
('EPSG:3113', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, 18)})
# remove non-existing
context.removeSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3113), QgsCoordinateReferenceSystem(3111))
context.removeCoordinateOperation(QgsCoordinateReferenceSystem(3113), QgsCoordinateReferenceSystem(3111))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2),
('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11),
Expand All @@ -108,15 +108,15 @@ def testSourceDestinationDatumTransforms(self):
('EPSG:3113', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, 18)})

# remove existing
context.removeSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3111),
QgsCoordinateReferenceSystem(4283))
context.removeCoordinateOperation(QgsCoordinateReferenceSystem(3111),
QgsCoordinateReferenceSystem(4283))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11),
('EPSG:28357', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, -1),
('EPSG:3111', 'EPSG:28356'): QgsDatumTransform.TransformPair(17, -1),
('EPSG:3113', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, 18)})
context.removeSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3111),
QgsCoordinateReferenceSystem(28356))
context.removeCoordinateOperation(QgsCoordinateReferenceSystem(3111),
QgsCoordinateReferenceSystem(28356))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(3, 4),
('EPSG:28356', 'EPSG:28357'): QgsDatumTransform.TransformPair(9, 11),
('EPSG:28357', 'EPSG:28356'): QgsDatumTransform.TransformPair(-1, -1),
Expand Down

0 comments on commit 0cf4ecf

Please sign in to comment.