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 testWriteReadXmlProj6(self): # setup a context context = QgsCoordinateTransformContext() proj_1 = '+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step +proj=cart +ellps=intl +step +proj=helmert +x=-18.944 +y=-379.364 +z=-24.063 +rx=-0.04 +ry=0.764 +rz=-6.431 +s=3.657 +convention=coordinate_frame +step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1' proj_2 = '+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step +proj=cart +ellps=intl +step +proj=helmert +x=-150 +y=-250 +z=-1 +step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1' self.assertTrue(context.addCoordinateOperation(QgsCoordinateReferenceSystem(4204), QgsCoordinateReferenceSystem(4326), proj_1)) self.assertTrue(context.addCoordinateOperation(QgsCoordinateReferenceSystem(4205), QgsCoordinateReferenceSystem(4326), proj_2)) self.assertEqual(context.coordinateOperations(), {('EPSG:4204', 'EPSG:4326'): proj_1, ('EPSG:4205', 'EPSG:4326'): proj_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.coordinateOperations(), {('EPSG:4204', 'EPSG:4326'): proj_1, ('EPSG:4205', 'EPSG:4326'): proj_2})
def testWriteReadXmlSingleVariant(self): # setup a context context = QgsCoordinateTransformContext() self.assertTrue(context.addSourceDatumTransform(QgsCoordinateReferenceSystem('EPSG:3111'), 1)) self.assertTrue(context.addSourceDatumTransform(QgsCoordinateReferenceSystem('EPSG:28356'), 2)) self.assertTrue(context.addDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:3113'), 11)) self.assertTrue(context.addDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:28355'), 12)) self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:3111'), QgsCoordinateReferenceSystem('EPSG:4283'), 1, 2)) self.assertTrue(context.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem('EPSG:28356'), QgsCoordinateReferenceSystem(4283), 3, 4)) self.assertEqual(context.sourceDatumTransforms(), {'EPSG:3111': 1, 'EPSG:28356': 2}) self.assertEqual(context.destinationDatumTransforms(), {'EPSG:3113': 11, 'EPSG:28355': 12}) self.assertEqual(context.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): (1, 2), ('EPSG:28356', 'EPSG:4283'): (3, 4)}) # 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.sourceDatumTransforms(), {'EPSG:3111': 1, 'EPSG:28356': 2}) self.assertEqual(context2.destinationDatumTransforms(), {'EPSG:3113': 11, 'EPSG:28355': 12}) self.assertEqual(context2.sourceDestinationDatumTransforms(), {('EPSG:3111', 'EPSG:4283'): (1, 2), ('EPSG:28356', 'EPSG:4283'): (3, 4)})
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 testMissingTransformsProj6(self): return # TODO -- this seems impossible to determine with existing PROJ6 api # fudge context xml with a missing transform doc = QDomDocument("testdoc") elem = doc.createElement("test") contextElem = doc.createElement("transformContext") transformElem = doc.createElement("srcDest") transformElem.setAttribute("source", 'EPSG:4204') transformElem.setAttribute("dest", 'EPSG:4326') # fake a proj string with a grid which will NEVER exist fake_proj = '+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +inv +proj=hgridshift +grids=this_is_not_a_real_grid.gsb +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1' transformElem.setAttribute("coordinateOp", fake_proj) contextElem.appendChild(transformElem) elem2 = doc.createElement("test2") elem2.appendChild(contextElem) # restore from xml context2 = QgsCoordinateTransformContext() ok, errors = context2.readXml(elem2, QgsReadWriteContext()) self.assertFalse(ok) # check result self.assertEqual(errors, ['not valid'])
def testMissingTransformsProj6(self): return # TODO -- this seems impossible to determine with existing PROJ6 api # fudge context xml with a missing transform doc = QDomDocument("testdoc") elem = doc.createElement("test") contextElem = doc.createElement("transformContext") transformElem = doc.createElement("srcDest") transformElem.setAttribute("source", 'EPSG:4204') transformElem.setAttribute("dest", 'EPSG:4326') # fake a proj string with a grid which will NEVER exist fake_proj = '+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +inv +proj=hgridshift +grids=this_is_not_a_real_grid.gsb +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1' transformElem.setAttribute("coordinateOp", fake_proj) contextElem.appendChild(transformElem) elem2 = doc.createElement("test2") elem2.appendChild(contextElem) # restore from xml context2 = QgsCoordinateTransformContext() ok, errors = context2.readXml(elem2, QgsReadWriteContext()) self.assertFalse(ok) # check result self.assertEqual(errors, ['not valid'])
def testWriteReadXmlProj6(self): # setup a context context = QgsCoordinateTransformContext() proj_1 = '+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step +proj=cart +ellps=intl +step +proj=helmert +x=-18.944 +y=-379.364 +z=-24.063 +rx=-0.04 +ry=0.764 +rz=-6.431 +s=3.657 +convention=coordinate_frame +step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1' proj_2 = '+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step +proj=cart +ellps=intl +step +proj=helmert +x=-150 +y=-250 +z=-1 +step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1' self.assertTrue( context.addCoordinateOperation(QgsCoordinateReferenceSystem(4204), QgsCoordinateReferenceSystem(4326), proj_1, True)) self.assertTrue( context.addCoordinateOperation(QgsCoordinateReferenceSystem(4205), QgsCoordinateReferenceSystem(4326), proj_2, False)) self.assertEqual(context.coordinateOperations(), { ('EPSG:4204', 'EPSG:4326'): proj_1, ('EPSG:4205', 'EPSG:4326'): proj_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.coordinateOperations(), { ('EPSG:4204', 'EPSG:4326'): proj_1, ('EPSG:4205', 'EPSG:4326'): proj_2 }) self.assertTrue( context2.allowFallbackTransform( QgsCoordinateReferenceSystem(4204), QgsCoordinateReferenceSystem(4326))) self.assertFalse( context2.allowFallbackTransform( QgsCoordinateReferenceSystem(4205), QgsCoordinateReferenceSystem(4326)))
def testMissingTransforms(self): # fudge context xml with a missing transform doc = QDomDocument("testdoc") elem = doc.createElement("test") contextElem = doc.createElement("transformContext") transformElem = doc.createElement("srcDest") transformElem.setAttribute("source", 'EPSG:4204') transformElem.setAttribute("dest", 'EPSG:4326') transformElem.setAttribute("sourceTransform", 'not valid') transformElem.setAttribute("destTransform", 'not valid 2') contextElem.appendChild(transformElem) elem2 = doc.createElement("test2") elem2.appendChild(contextElem) # restore from xml context2 = QgsCoordinateTransformContext() ok, errors = context2.readXml(elem2, QgsReadWriteContext()) self.assertFalse(ok) # check result self.assertEqual(errors, ['not valid', 'not valid 2'])
def testMissingTransforms(self): # fudge context xml with a missing transform doc = QDomDocument("testdoc") elem = doc.createElement("test") contextElem = doc.createElement("transformContext") transformElem = doc.createElement("srcDest") transformElem.setAttribute("source", 'EPSG:4204') transformElem.setAttribute("dest", 'EPSG:4326') transformElem.setAttribute("sourceTransform", 'not valid') transformElem.setAttribute("destTransform", 'not valid 2') contextElem.appendChild(transformElem) elem2 = doc.createElement("test2") elem2.appendChild(contextElem) # restore from xml context2 = QgsCoordinateTransformContext() ok, errors = context2.readXml(elem2, QgsReadWriteContext()) self.assertFalse(ok) # check result self.assertEqual(errors, ['not valid', 'not valid 2'])
def testWriteReadXmlSingleVariant(self): # setup a context context = QgsCoordinateTransformContext() self.assertTrue( context.addSourceDatumTransform( QgsCoordinateReferenceSystem('EPSG:3111'), 1)) self.assertTrue( context.addSourceDatumTransform( QgsCoordinateReferenceSystem('EPSG:28356'), 2)) self.assertTrue( context.addDestinationDatumTransform( QgsCoordinateReferenceSystem('EPSG:3113'), 11)) self.assertTrue( context.addDestinationDatumTransform( QgsCoordinateReferenceSystem('EPSG:28355'), 12)) self.assertTrue( context.addSourceDestinationDatumTransform( QgsCoordinateReferenceSystem('EPSG:3111'), QgsCoordinateReferenceSystem('EPSG:4283'), 1, 2)) self.assertTrue( context.addSourceDestinationDatumTransform( QgsCoordinateReferenceSystem('EPSG:28356'), QgsCoordinateReferenceSystem(4283), 3, 4)) self.assertEqual(context.sourceDatumTransforms(), { 'EPSG:3111': 1, 'EPSG:28356': 2 }) self.assertEqual(context.destinationDatumTransforms(), { 'EPSG:3113': 11, 'EPSG:28355': 12 }) self.assertEqual( context.sourceDestinationDatumTransforms(), { ('EPSG:3111', 'EPSG:4283'): (1, 2), ('EPSG:28356', 'EPSG:4283'): (3, 4) }) # 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.sourceDatumTransforms(), { 'EPSG:3111': 1, 'EPSG:28356': 2 }) self.assertEqual(context2.destinationDatumTransforms(), { 'EPSG:3113': 11, 'EPSG:28355': 12 }) self.assertEqual( context2.sourceDestinationDatumTransforms(), { ('EPSG:3111', 'EPSG:4283'): (1, 2), ('EPSG:28356', 'EPSG:4283'): (3, 4) })
def testWriteReadXmlProj6(self): # setup a context context = QgsCoordinateTransformContext() proj_1 = '+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step +proj=cart +ellps=intl +step +proj=helmert +x=-18.944 +y=-379.364 +z=-24.063 +rx=-0.04 +ry=0.764 +rz=-6.431 +s=3.657 +convention=coordinate_frame +step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1' proj_2 = '+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step +proj=cart +ellps=intl +step +proj=helmert +x=-150 +y=-250 +z=-1 +step +inv +proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1' proj_3 = '+proj=pipeline +step +proj=axisswap +order=2,1' self.assertTrue( context.addCoordinateOperation( QgsCoordinateReferenceSystem('EPSG:4204'), QgsCoordinateReferenceSystem('EPSG:4326'), proj_1, True)) self.assertTrue( context.addCoordinateOperation( QgsCoordinateReferenceSystem('EPSG:4205'), QgsCoordinateReferenceSystem('EPSG:4326'), proj_2, False)) # also insert a crs with no authid available self.assertTrue( context.addCoordinateOperation( QgsCoordinateReferenceSystem.fromProj( "+proj=longlat +a=6378137 +rf=298.25722356300003 +no_defs" ), QgsCoordinateReferenceSystem('EPSG:4326'), proj_3, False)) self.assertEqual( context.coordinateOperations(), { ('EPSG:4204', 'EPSG:4326'): proj_1, ('EPSG:4205', 'EPSG:4326'): proj_2, ('', 'EPSG:4326'): proj_3 }) # 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.coordinateOperations(), { ('EPSG:4204', 'EPSG:4326'): proj_1, ('EPSG:4205', 'EPSG:4326'): proj_2, ('', 'EPSG:4326'): proj_3 }) self.assertEqual( context2.calculateCoordinateOperation( QgsCoordinateReferenceSystem.fromProj( "+proj=longlat +a=6378137 +rf=298.25722356300003 +no_defs" ), QgsCoordinateReferenceSystem('EPSG:4326')), '+proj=pipeline +step +proj=axisswap +order=2,1') self.assertFalse( context2.mustReverseCoordinateOperation( QgsCoordinateReferenceSystem.fromProj( "+proj=longlat +a=6378137 +rf=298.25722356300003 +no_defs" ), QgsCoordinateReferenceSystem('EPSG:4326'))) self.assertEqual( context2.calculateCoordinateOperation( QgsCoordinateReferenceSystem('EPSG:4326'), QgsCoordinateReferenceSystem.fromProj( "+proj=longlat +a=6378137 +rf=298.25722356300003 +no_defs") ), '+proj=pipeline +step +proj=axisswap +order=2,1') self.assertTrue( context2.mustReverseCoordinateOperation( QgsCoordinateReferenceSystem('EPSG:4326'), QgsCoordinateReferenceSystem.fromProj( "+proj=longlat +a=6378137 +rf=298.25722356300003 +no_defs") )) self.assertTrue( context2.allowFallbackTransform( QgsCoordinateReferenceSystem('EPSG:4204'), QgsCoordinateReferenceSystem('EPSG:4326'))) self.assertFalse( context2.allowFallbackTransform( QgsCoordinateReferenceSystem('EPSG:4205'), QgsCoordinateReferenceSystem('EPSG:4326')))