Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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))
Ejemplo n.º 3
0
    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))
Ejemplo n.º 4
0
    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))