Allow removing existing transforms from context

This commit is contained in:
Nyall Dawson 2017-11-05 17:02:11 +10:00
parent 8a0bd08e07
commit 2e2e1248a5
4 changed files with 69 additions and 0 deletions

View File

@ -52,6 +52,8 @@ class QgsCoordinateTransformContext
Adds a new ``transform`` to use when projecting coordinates from the specified source
``crs``.
If ``transform`` is -1, then any existing source transform for the ``crs`` will be removed.
Returns true if the new transform was added successfully.
\warning Transforms set using this method may be overridden by specific source/destination
@ -81,6 +83,8 @@ class QgsCoordinateTransformContext
Adds a new ``transform`` to use when projecting coordinates to the specified destination
``crs``.
If ``transform`` is -1, then any existing destination transform for the ``crs`` will be removed.
Returns true if the new transform was added successfully.
\warning Transforms set using this method may be overridden by specific source/destination
@ -112,6 +116,9 @@ class QgsCoordinateTransformContext
Adds a new ``sourceTransform`` and ``destinationTransform`` to use when projecting coordinates
from the the specified ``sourceCrs`` to the specified ``destinationCrs``.
If either ``sourceTransform`` or ``destinationTransform`` is -1, then any existing source to destination
transform for the crs pair will be removed.
Returns true if the new transform pair was added successfully.
.. note::

View File

@ -34,6 +34,12 @@ bool QgsCoordinateTransformContext::addSourceDatumTransform( const QgsCoordinate
if ( !crs.isValid() )
return false;
if ( transform == -1 )
{
mSourceDatumTransforms.remove( crs.authid() );
return true;
}
mSourceDatumTransforms.insert( crs.authid(), transform );
return true;
}
@ -48,6 +54,12 @@ bool QgsCoordinateTransformContext::addDestinationDatumTransform( const QgsCoord
if ( !crs.isValid() )
return false;
if ( transform == -1 )
{
mDestDatumTransforms.remove( crs.authid() );
return true;
}
mDestDatumTransforms.insert( crs.authid(), transform );
return true;
}
@ -62,6 +74,12 @@ bool QgsCoordinateTransformContext::addSourceDestinationDatumTransform( const Qg
if ( !sourceCrs.isValid() || !destinationCrs.isValid() )
return false;
if ( sourceTransform == -1 || destinationTransform == -1 )
{
mSourceDestDatumTransforms.remove( qMakePair( sourceCrs.authid(), destinationCrs.authid() ) );
return true;
}
mSourceDestDatumTransforms.insert( qMakePair( sourceCrs.authid(), destinationCrs.authid() ), qMakePair( sourceTransform, destinationTransform ) );
return true;
}

View File

@ -61,6 +61,8 @@ class CORE_EXPORT QgsCoordinateTransformContext
* Adds a new \a transform to use when projecting coordinates from the specified source
* \a crs.
*
* If \a transform is -1, then any existing source transform for the \a crs will be removed.
*
* Returns true if the new transform was added successfully.
*
* \warning Transforms set using this method may be overridden by specific source/destination
@ -88,6 +90,8 @@ class CORE_EXPORT QgsCoordinateTransformContext
* Adds a new \a transform to use when projecting coordinates to the specified destination
* \a crs.
*
* If \a transform is -1, then any existing destination transform for the \a crs will be removed.
*
* Returns true if the new transform was added successfully.
*
* \warning Transforms set using this method may be overridden by specific source/destination
@ -114,6 +118,9 @@ class CORE_EXPORT QgsCoordinateTransformContext
* Adds a new \a sourceTransform and \a destinationTransform to use when projecting coordinates
* from the the specified \a sourceCrs to the specified \a destinationCrs.
*
* If either \a sourceTransform or \a destinationTransform is -1, then any existing source to destination
* transform for the crs pair will be removed.
*
* Returns true if the new transform pair was added successfully.
*
* \note Transforms set using this method will override any specific source or destination

View File

@ -39,6 +39,14 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
self.assertFalse(context.addSourceDatumTransform(QgsCoordinateReferenceSystem(), 4))
self.assertEqual(context.sourceDatumTransforms(), {'EPSG:3111': 1, 'EPSG:28356': 3})
# removing non-existing
self.assertTrue(context.addSourceDatumTransform(QgsCoordinateReferenceSystem(28357), -1))
self.assertEqual(context.sourceDatumTransforms(), {'EPSG:3111': 1, 'EPSG:28356': 3})
# remove existing
self.assertTrue(context.addSourceDatumTransform(QgsCoordinateReferenceSystem(28356), -1))
self.assertEqual(context.sourceDatumTransforms(), {'EPSG:3111': 1})
context.clear()
self.assertEqual(context.sourceDatumTransforms(), {})
@ -58,6 +66,14 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
self.assertFalse(context.addDestinationDatumTransform(QgsCoordinateReferenceSystem(), 4))
self.assertEqual(context.destinationDatumTransforms(), {'EPSG:3111': 1, 'EPSG:28356': 3})
# removing non-existing
self.assertTrue(context.addDestinationDatumTransform(QgsCoordinateReferenceSystem(28357), -1))
self.assertEqual(context.destinationDatumTransforms(), {'EPSG:3111': 1, 'EPSG:28356': 3})
# remove existing
self.assertTrue(context.addDestinationDatumTransform(QgsCoordinateReferenceSystem(28356), -1))
self.assertEqual(context.destinationDatumTransforms(), {'EPSG:3111': 1})
context.clear()
self.assertEqual(context.destinationDatumTransforms(), {})
@ -94,6 +110,27 @@ class TestQgsCoordinateTransformContext(unittest.TestCase):
('EPSG:28356', 'EPSG:4283'): (3, 4),
('EPSG:28356', 'EPSG:28357'): (9, 11)})
# removing non-existing
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(28357),
QgsCoordinateReferenceSystem(28356), -1, -1))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): (1, 2),
('EPSG:28356', 'EPSG:4283'): (3, 4),
('EPSG:28356', 'EPSG:28357'): (9, 11)})
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3111),
QgsCoordinateReferenceSystem(28356), -1, -1))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): (1, 2),
('EPSG:28356', 'EPSG:4283'): (3, 4),
('EPSG:28356', 'EPSG:28357'): (9, 11)})
# remove existing
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(3111),
QgsCoordinateReferenceSystem(4283), -1, 3))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:28356', 'EPSG:4283'): (3, 4),
('EPSG:28356', 'EPSG:28357'): (9, 11)})
self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(28356),
QgsCoordinateReferenceSystem(28357), 1, -1))
self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:28356', 'EPSG:4283'): (3, 4)})
context.clear()
self.assertEqual(context.sourceDestinationDatumTransforms(), {})