def testWriteReadXml(self):
        # setup a context
        context = QgsCoordinateTransformContext()

        source_id_1 = QgsDatumTransform.datumTransformations(
            QgsCoordinateReferenceSystem(4204),
            QgsCoordinateReferenceSystem(4326))[0].sourceTransformId
        dest_id_1 = QgsDatumTransform.datumTransformations(
            QgsCoordinateReferenceSystem(4204),
            QgsCoordinateReferenceSystem(4326))[0].destinationTransformId

        source_id_2 = QgsDatumTransform.datumTransformations(
            QgsCoordinateReferenceSystem(4205),
            QgsCoordinateReferenceSystem(4326))[0].sourceTransformId
        dest_id_2 = QgsDatumTransform.datumTransformations(
            QgsCoordinateReferenceSystem(4205),
            QgsCoordinateReferenceSystem(4326))[0].destinationTransformId

        self.assertTrue(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem(4204),
                QgsCoordinateReferenceSystem(4326), source_id_1, dest_id_1))
        self.assertTrue(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem(4205),
                QgsCoordinateReferenceSystem(4326), source_id_2, dest_id_2))

        self.assertEqual(
            context.sourceDestinationDatumTransforms(), {
                ('EPSG:4204', 'EPSG:4326'):
                QgsDatumTransform.TransformPair(source_id_1, dest_id_1),
                ('EPSG:4205', 'EPSG:4326'):
                QgsDatumTransform.TransformPair(source_id_2, dest_id_2)
            })

        # save to xml
        doc = QDomDocument("testdoc")
        elem = doc.createElement("test")
        context.writeXml(elem, QgsReadWriteContext())

        # restore from xml
        context2 = QgsCoordinateTransformContext()
        context2.readXml(elem, QgsReadWriteContext())

        # check result
        self.assertEqual(
            context2.sourceDestinationDatumTransforms(), {
                ('EPSG:4204', 'EPSG:4326'):
                QgsDatumTransform.TransformPair(source_id_1, dest_id_1),
                ('EPSG:4205', 'EPSG:4326'):
                QgsDatumTransform.TransformPair(source_id_2, dest_id_2)
            })
    def testReadWriteSettings(self):
        context = QgsCoordinateTransformContext()
        context.readSettings()

        source_id_1 = QgsDatumTransform.datumTransformations(QgsCoordinateReferenceSystem(4204),
                                                             QgsCoordinateReferenceSystem(4326))[0].sourceTransformId
        dest_id_1 = QgsDatumTransform.datumTransformations(QgsCoordinateReferenceSystem(4204),
                                                           QgsCoordinateReferenceSystem(4326))[0].destinationTransformId

        source_id_2 = QgsDatumTransform.datumTransformations(QgsCoordinateReferenceSystem(4205),
                                                             QgsCoordinateReferenceSystem(4326))[0].sourceTransformId
        dest_id_2 = QgsDatumTransform.datumTransformations(QgsCoordinateReferenceSystem(4205),
                                                           QgsCoordinateReferenceSystem(4326))[0].destinationTransformId

        # should be empty
        self.assertEqual(context.sourceDestinationDatumTransforms(), {})

        self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:4204'),
                                                                   QgsCoordinateReferenceSystem('EPSG:4326'),
                                                                   source_id_1, dest_id_1))
        self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:4205'),
                                                                   QgsCoordinateReferenceSystem(4326), source_id_2,
                                                                   dest_id_2))

        self.assertEqual(context.sourceDestinationDatumTransforms(),
                         {('EPSG:4204', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_1, dest_id_1),
                          ('EPSG:4205', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_2, dest_id_2)})

        # save to settings
        context.writeSettings()

        # restore from settings
        context2 = QgsCoordinateTransformContext()
        self.assertEqual(context2.sourceDestinationDatumTransforms(), {})
        context2.readSettings()

        # check result
        self.assertEqual(context2.sourceDestinationDatumTransforms(),
                         {('EPSG:4204', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_1, dest_id_1),
                          ('EPSG:4205', 'EPSG:4326'): QgsDatumTransform.TransformPair(source_id_2, dest_id_2)})
 def testProject(self):
     """
     Test project's transform context
     """
     project = QgsProject()
     context_changed_spy = QSignalSpy(project.transformContextChanged)
     context = project.transformContext()
     context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:3111'),
                                                QgsCoordinateReferenceSystem('EPSG:4283'), 1, 2)
     project.setTransformContext(context)
     self.assertEqual(len(context_changed_spy), 1)
     self.assertEqual(project.transformContext().sourceDestinationDatumTransforms(),
                      {('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(1, 2)})
Example #4
0
    def testSourceDestinationDatumTransforms(self):
        context = QgsCoordinateTransformContext()
        self.assertEqual(context.sourceDestinationDatumTransforms(), {})
        self.assertFalse(
            context.hasTransform(QgsCoordinateReferenceSystem('EPSG:3111'),
                                 QgsCoordinateReferenceSystem('EPSG:4283')))
        self.assertTrue(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem('EPSG:3111'),
                QgsCoordinateReferenceSystem('EPSG:4283'), 1, 2))
        self.assertTrue(
            context.hasTransform(QgsCoordinateReferenceSystem('EPSG:3111'),
                                 QgsCoordinateReferenceSystem('EPSG:4283')))
        self.assertFalse(
            context.hasTransform(QgsCoordinateReferenceSystem('EPSG:3111'),
                                 QgsCoordinateReferenceSystem('EPSG:4326')))
        self.assertFalse(
            context.hasTransform(QgsCoordinateReferenceSystem('EPSG:3113'),
                                 QgsCoordinateReferenceSystem('EPSG:4283')))
        self.assertEqual(context.sourceDestinationDatumTransforms(), {
            ('EPSG:3111', 'EPSG:4283'):
            QgsDatumTransform.TransformPair(1, 2)
        })
        self.assertTrue(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem('EPSG:28356'),
                QgsCoordinateReferenceSystem(4283), 3, 4))
        self.assertEqual(
            context.sourceDestinationDatumTransforms(), {
                ('EPSG:3111', 'EPSG:4283'): QgsDatumTransform.TransformPair(
                    1, 2),
                ('EPSG:28356', 'EPSG:4283'): QgsDatumTransform.TransformPair(
                    3, 4)
            })
        self.assertTrue(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem('EPSG:28356'),
                QgsCoordinateReferenceSystem(28357), 7, 8))
        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(
                    7, 8)
            })
        self.assertTrue(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem('EPSG:28356'),
                QgsCoordinateReferenceSystem('EPSG:28357'), 9, 11))
        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)
            })

        # invalid additions
        self.assertFalse(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem(),
                QgsCoordinateReferenceSystem('EPSG:28357'), 9, 11))
        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)
            })
        self.assertFalse(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem('EPSG:3111'),
                QgsCoordinateReferenceSystem(), 9, 11))
        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)
            })

        # indicate no transform required
        self.assertTrue(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem(28357),
                QgsCoordinateReferenceSystem(28356), -1, -1))
        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),
                ('EPSG:28357', 'EPSG:28356'):
                QgsDatumTransform.TransformPair(-1, -1)
            })
        self.assertTrue(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem(3111),
                QgsCoordinateReferenceSystem(28356), 17, -1))
        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),
                ('EPSG:28357', 'EPSG:28356'):
                QgsDatumTransform.TransformPair(-1, -1),
                ('EPSG:3111', 'EPSG:28356'):
                QgsDatumTransform.TransformPair(17, -1)
            })
        self.assertTrue(
            context.addSourceDestinationDatumTransform(
                QgsCoordinateReferenceSystem(3113),
                QgsCoordinateReferenceSystem(28356), -1, 18))
        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),
                ('EPSG:28357', 'EPSG:28356'):
                QgsDatumTransform.TransformPair(-1, -1),
                ('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))
        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),
                ('EPSG:28357', 'EPSG:28356'):
                QgsDatumTransform.TransformPair(-1, -1),
                ('EPSG:3111', 'EPSG:28356'):
                QgsDatumTransform.TransformPair(17, -1),
                ('EPSG:3113', 'EPSG:28356'):
                QgsDatumTransform.TransformPair(-1, 18)
            })

        # remove existing
        context.removeSourceDestinationDatumTransform(
            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))
        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:3113', 'EPSG:28356'):
                QgsDatumTransform.TransformPair(-1, 18)
            })

        context.clear()
        self.assertEqual(context.sourceDestinationDatumTransforms(), {})