def testEquality(self): """ Test equality operator """ req = QgsProfileRequest(None) req2 = QgsProfileRequest(None) self.assertEqual(req, req2) req.setProfileCurve(QgsLineString([[1, 2], [3, 4]])) self.assertNotEqual(req, req2) req2.setProfileCurve(QgsLineString([[1, 2], [3, 5]])) self.assertNotEqual(req, req2) req.setProfileCurve(None) self.assertNotEqual(req, req2) req.setProfileCurve(QgsLineString([[1, 2], [3, 5]])) self.assertEqual(req, req2) req.setCrs(QgsCoordinateReferenceSystem('EPSG:3857')) self.assertNotEqual(req, req2) req2.setCrs(QgsCoordinateReferenceSystem('EPSG:3857')) self.assertEqual(req, req2) proj_string = '+proj=pipeline +step +inv +proj=lcc +lat_0=-37 +lon_0=145 +lat_1=-36 +lat_2=-38 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1' transform_context = QgsCoordinateTransformContext() transform_context.addCoordinateOperation( QgsCoordinateReferenceSystem('EPSG:3111'), QgsCoordinateReferenceSystem('EPSG:4283'), proj_string) req.setTransformContext(transform_context) self.assertNotEqual(req, req2) req2.setTransformContext(transform_context) self.assertEqual(req, req2) req.setTolerance(5) self.assertNotEqual(req, req2) req2.setTolerance(5) self.assertEqual(req, req2) req.setStepDistance(15) self.assertNotEqual(req, req2) req2.setStepDistance(15) self.assertEqual(req, req2) terrain = QgsFlatTerrainProvider() terrain.setOffset(5) req.setTerrainProvider(terrain) self.assertNotEqual(req, req2) req2.setTerrainProvider(QgsMeshTerrainProvider()) self.assertNotEqual(req, req2) req.setTerrainProvider(None) self.assertNotEqual(req, req2) req.setTerrainProvider(QgsFlatTerrainProvider()) self.assertNotEqual(req, req2) req.setTerrainProvider(QgsMeshTerrainProvider()) self.assertEqual(req, req2)
def testFlatProvider(self): """ Test QgsFlatTerrainProvider """ provider = QgsFlatTerrainProvider() self.assertEqual(provider.type(), 'flat') self.assertFalse(provider.crs().isValid()) self.assertEqual(provider.heightAt(1, 2), 0) provider.setOffset(5) self.assertEqual(provider.heightAt(1, 2), 5) clone = provider.clone() self.assertIsInstance(clone, QgsFlatTerrainProvider) self.assertEqual(clone.offset(), 5) # via xml doc = QDomDocument("testdoc") context = QgsReadWriteContext() parent_elem = doc.createElement('test') element = provider.writeXml(doc, context) parent_elem.appendChild(element) from_xml = QgsRasterDemTerrainProvider() self.assertTrue(from_xml.readXml(parent_elem, context)) self.assertEqual(from_xml.offset(), 5) # test equals provider1 = QgsFlatTerrainProvider() provider2 = QgsFlatTerrainProvider() self.assertTrue(provider1.equals(provider2)) self.assertFalse(provider1.equals(QgsRasterDemTerrainProvider())) provider1.setOffset(1) self.assertFalse(provider1.equals(provider2)) provider2.setOffset(1) self.assertTrue(provider1.equals(provider2))
def testRasterDemProvider(self): """ Test QgsRasterDemTerrainProvider """ provider = QgsRasterDemTerrainProvider() self.assertEqual(provider.type(), 'raster') # without layer assigned self.assertFalse(provider.crs().isValid()) self.assertTrue(math.isnan(provider.heightAt(1, 2))) # add raster layer to project p = QgsProject() rl = QgsRasterLayer(os.path.join(unitTestDataPath(), 'float1-16.tif'), 'rl') self.assertTrue(rl.isValid()) p.addMapLayer(rl) provider.setLayer(rl) self.assertEqual(provider.layer(), rl) self.assertEqual(provider.crs().authid(), 'EPSG:4326') self.assertEqual(provider.heightAt(106.4105, -6.6341), 11.0) # outside of raster extent self.assertTrue(math.isnan(provider.heightAt(1, 2))) provider.setOffset(5) self.assertEqual(provider.offset(), 5) provider.setScale(3) self.assertEqual(provider.scale(), 3) self.assertEqual(provider.heightAt(106.4105, -6.6341), 11 * 3 + 5) clone = provider.clone() self.assertIsInstance(clone, QgsRasterDemTerrainProvider) self.assertEqual(clone.layer(), rl) self.assertEqual(clone.offset(), 5) self.assertEqual(clone.scale(), 3) # via xml doc = QDomDocument("testdoc") context = QgsReadWriteContext() parent_elem = doc.createElement('test') element = provider.writeXml(doc, context) parent_elem.appendChild(element) from_xml = QgsRasterDemTerrainProvider() self.assertTrue(from_xml.readXml(parent_elem, context)) self.assertEqual(from_xml.offset(), 5) self.assertEqual(from_xml.scale(), 3) # layer won't be resolved till we resolve references from project self.assertFalse(from_xml.layer()) from_xml.resolveReferences(p) self.assertEqual(from_xml.layer(), rl) # test equals provider1 = QgsRasterDemTerrainProvider() provider2 = QgsRasterDemTerrainProvider() self.assertTrue(provider1.equals(provider2)) self.assertFalse(provider1.equals(QgsFlatTerrainProvider())) provider1.setOffset(1) self.assertFalse(provider1.equals(provider2)) provider2.setOffset(1) self.assertTrue(provider1.equals(provider2)) provider1.setScale(11) self.assertFalse(provider1.equals(provider2)) provider2.setScale(11) self.assertTrue(provider1.equals(provider2)) provider1.setLayer(rl) self.assertFalse(provider1.equals(provider2)) provider2.setLayer(rl) self.assertTrue(provider1.equals(provider2))
def testMeshProvider(self): """ Test QgsMeshTerrainProvider """ provider = QgsMeshTerrainProvider() self.assertEqual(provider.type(), 'mesh') # without layer assigned self.assertFalse(provider.crs().isValid()) self.assertTrue(math.isnan(provider.heightAt(1, 2))) # add mesh layer to project p = QgsProject() mesh_layer = QgsMeshLayer( os.path.join(unitTestDataPath(), '3d', 'elev_mesh.2dm'), 'mdal', 'mdal') mesh_layer.setCrs(QgsCoordinateReferenceSystem('EPSG:27700')) self.assertTrue(mesh_layer.isValid()) p.addMapLayer(mesh_layer) provider.setLayer(mesh_layer) self.assertEqual(provider.layer(), mesh_layer) self.assertEqual(provider.crs().authid(), 'EPSG:27700') self.assertTrue(math.isnan(provider.heightAt(1, 2))) self.assertAlmostEqual(provider.heightAt(321695.2, 129990.5), 89.49743150684921, 5) provider.setOffset(5) self.assertEqual(provider.offset(), 5) provider.setScale(3) self.assertEqual(provider.scale(), 3) clone = provider.clone() self.assertIsInstance(clone, QgsMeshTerrainProvider) self.assertEqual(clone.layer(), mesh_layer) self.assertEqual(clone.offset(), 5) self.assertEqual(clone.scale(), 3) # via xml doc = QDomDocument("testdoc") context = QgsReadWriteContext() parent_elem = doc.createElement('test') element = provider.writeXml(doc, context) parent_elem.appendChild(element) from_xml = QgsMeshTerrainProvider() self.assertTrue(from_xml.readXml(parent_elem, context)) self.assertEqual(from_xml.offset(), 5) self.assertEqual(from_xml.scale(), 3) # layer won't be resolved till we resolve references from project self.assertFalse(from_xml.layer()) from_xml.resolveReferences(p) self.assertEqual(from_xml.layer(), mesh_layer) # test equals provider1 = QgsMeshTerrainProvider() provider2 = QgsMeshTerrainProvider() self.assertTrue(provider1.equals(provider2)) self.assertFalse(provider1.equals(QgsFlatTerrainProvider())) provider1.setOffset(1) self.assertFalse(provider1.equals(provider2)) provider2.setOffset(1) self.assertTrue(provider1.equals(provider2)) provider1.setScale(11) self.assertFalse(provider1.equals(provider2)) provider2.setScale(11) self.assertTrue(provider1.equals(provider2)) provider1.setLayer(mesh_layer) self.assertFalse(provider1.equals(provider2)) provider2.setLayer(mesh_layer) self.assertTrue(provider1.equals(provider2))