def testGeneration(self): ml = QgsMeshLayer( os.path.join(unitTestDataPath(), '3d', 'elev_mesh.2dm'), 'mdal', 'mdal') self.assertTrue(ml.isValid()) ml.setCrs(QgsCoordinateReferenceSystem('EPSG:27700')) curve = QgsLineString() curve.fromWkt( 'LineString (-348095.18706532847136259 6633687.0235139261931181, -347271.57799367723055184 6633093.13086318597197533, -346140.60267287614988163 6632697.89590711053460836, -345777.013075890194159 6631575.50219972990453243)' ) req = QgsProfileRequest(curve) generator = ml.createProfileGenerator(req) self.assertIsNotNone(generator) # set correct crs for linestring and re-try req.setCrs(QgsCoordinateReferenceSystem('EPSG:3857')) generator = ml.createProfileGenerator(req) self.assertTrue(generator.generateProfile()) r = generator.takeResults() results = r.distanceToHeightMap() self.assertEqual(len(results), 102) first_point = min(results.keys()) last_point = max(results.keys()) self.assertAlmostEqual(results[first_point], 152.87405434310168, 0) self.assertAlmostEqual(results[last_point], 98.78085001573021, 0) self.assertAlmostEqual(r.zRange().lower(), 80, 2) self.assertAlmostEqual(r.zRange().upper(), 152.874, 0)
def testSnapping(self): ml = QgsMeshLayer(os.path.join(unitTestDataPath(), '3d', 'elev_mesh.2dm'), 'mdal', 'mdal') self.assertTrue(ml.isValid()) ml.setCrs(QgsCoordinateReferenceSystem('EPSG:27700')) curve = QgsLineString() curve.fromWkt('LineString (321621.3770066662109457 129734.87810317709227093, 321894.21278918092139065 129858.49142702402605209)') req = QgsProfileRequest(curve) generator = ml.createProfileGenerator(req) self.assertTrue(generator.generateProfile()) r = generator.takeResults() # try snapping some points context = QgsProfileSnapContext() res = r.snapPoint(QgsProfilePoint(-10, -10), context) self.assertFalse(res.isValid()) context.maximumSurfaceDistanceDelta = 0 context.maximumSurfaceElevationDelta = 3 context.maximumPointDistanceDelta = 0 context.maximumPointElevationDelta = 0 res = r.snapPoint(QgsProfilePoint(0, 70), context) self.assertTrue(res.isValid()) self.assertEqual(res.snappedPoint.distance(), 0) self.assertAlmostEqual(res.snappedPoint.elevation(), 71.8, 0) context.maximumSurfaceDistanceDelta = 0 context.maximumSurfaceElevationDelta = 5 res = r.snapPoint(QgsProfilePoint(200, 79), context) self.assertTrue(res.isValid()) self.assertEqual(res.snappedPoint.distance(), 200) self.assertAlmostEqual(res.snappedPoint.elevation(), 75.841, 1) res = r.snapPoint(QgsProfilePoint(200, 85), context) self.assertFalse(res.isValid())
def testIdentify(self): ml = QgsMeshLayer(os.path.join(unitTestDataPath(), '3d', 'elev_mesh.2dm'), 'mdal', 'mdal') self.assertTrue(ml.isValid()) ml.setCrs(QgsCoordinateReferenceSystem('EPSG:27700')) curve = QgsLineString() curve.fromWkt('LineString (321621.3770066662109457 129734.87810317709227093, 321894.21278918092139065 129858.49142702402605209)') req = QgsProfileRequest(curve) generator = ml.createProfileGenerator(req) self.assertTrue(generator.generateProfile()) r = generator.takeResults() # try identifying context = QgsProfileIdentifyContext() res = r.identify(QgsProfilePoint(-10, -10), context) self.assertFalse(res) context.maximumSurfaceDistanceDelta = 0 context.maximumSurfaceElevationDelta = 3 context.maximumPointDistanceDelta = 0 context.maximumPointElevationDelta = 0 res = r.identify(QgsProfilePoint(0, 70), context) self.assertEqual(len(res), 1) self.assertEqual(res[0].layer(), ml) self.assertEqual(res[0].results(), [{'distance': 0.0, 'elevation': 71.8236528075051}]) context.maximumSurfaceDistanceDelta = 0 context.maximumSurfaceElevationDelta = 5 res = r.identify(QgsProfilePoint(200, 79), context) self.assertEqual(len(res), 1) self.assertEqual(res[0].layer(), ml) self.assertEqual(res[0].results(), [{'distance': 200.0, 'elevation': 75.84131736154015}]) res = r.identify(QgsProfilePoint(200, 85), context) self.assertFalse(res)