def testLegend(self): renderer = QgsPointCloudAttributeByRampRenderer() renderer.setAttribute('Intensity') renderer.setMinimum(200) renderer.setMaximum(800) ramp = QgsStyle.defaultStyle().colorRamp("Viridis") shader = QgsColorRampShader(200, 800, ramp.clone()) shader.setClassificationMode(QgsColorRampShader.EqualInterval) shader.classifyColorRamp(classes=4) renderer.setColorRampShader(shader) layer = QgsPointCloudLayer( unitTestDataPath() + '/point_clouds/ept/sunshine-coast/ept.json', 'test', 'ept') layer_tree_layer = QgsLayerTreeLayer(layer) nodes = renderer.createLegendNodes(layer_tree_layer) self.assertEqual(len(nodes), 4) self.assertEqual(nodes[0].data(Qt.DisplayRole), '200') self.assertEqual(nodes[1].data(Qt.DisplayRole), '400') self.assertEqual(nodes[2].data(Qt.DisplayRole), '600') self.assertEqual(nodes[3].data(Qt.DisplayRole), '800') shader = QgsColorRampShader(200, 600, ramp.clone()) shader.setClassificationMode(QgsColorRampShader.EqualInterval) shader.classifyColorRamp(classes=2) renderer.setColorRampShader(shader) nodes = renderer.createLegendNodes(layer_tree_layer) self.assertEqual(len(nodes), 2) self.assertEqual(nodes[0].data(Qt.DisplayRole), '200') self.assertEqual(nodes[1].data(Qt.DisplayRole), '600')
def testRenderZRange(self): layer = QgsPointCloudLayer( unitTestDataPath() + '/point_clouds/ept/sunshine-coast/ept.json', 'test', 'ept') self.assertTrue(layer.isValid()) renderer = QgsPointCloudAttributeByRampRenderer() renderer.setAttribute('Intensity') renderer.setMinimum(200) renderer.setMaximum(1000) ramp = QgsStyle.defaultStyle().colorRamp("Viridis") shader = QgsColorRampShader(200, 1000, ramp) shader.classifyColorRamp() renderer.setColorRampShader(shader) layer.setRenderer(renderer) layer.renderer().setPointSize(2) layer.renderer().setPointSizeUnit(QgsUnitTypes.RenderMillimeters) mapsettings = QgsMapSettings() mapsettings.setOutputSize(QSize(400, 400)) mapsettings.setOutputDpi(96) mapsettings.setDestinationCrs(layer.crs()) mapsettings.setExtent(QgsRectangle(498061, 7050991, 498069, 7050999)) mapsettings.setLayers([layer]) mapsettings.setZRange(QgsDoubleRange(74.7, 75)) renderchecker = QgsMultiRenderChecker() renderchecker.setMapSettings(mapsettings) renderchecker.setControlPathPrefix('pointcloudrenderer') renderchecker.setControlName('expected_ramp_zfilter') result = renderchecker.runTest('expected_ramp_zfilter') TestQgsPointCloudAttributeByRampRenderer.report += renderchecker.report( ) self.assertTrue(result)
def testRenderCrsTransform(self): layer = QgsPointCloudLayer(unitTestDataPath() + '/point_clouds/ept/sunshine-coast/ept.json', 'test', 'ept') self.assertTrue(layer.isValid()) renderer = QgsPointCloudAttributeByRampRenderer() renderer.setAttribute('Intensity') renderer.setMinimum(200) renderer.setMaximum(1000) ramp = QgsStyle.defaultStyle().colorRamp("Viridis") shader = QgsColorRampShader(200, 1000, ramp) shader.classifyColorRamp() renderer.setColorRampShader(shader) layer.setRenderer(renderer) layer.renderer().setPointSize(2) layer.renderer().setPointSizeUnit(QgsUnitTypes.RenderMillimeters) mapsettings = QgsMapSettings() mapsettings.setOutputSize(QSize(400, 400)) mapsettings.setOutputDpi(96) mapsettings.setDestinationCrs(QgsCoordinateReferenceSystem('EPSG:4326')) mapsettings.setExtent(QgsRectangle(152.980508492, -26.662023491, 152.980586020, -26.662071137)) mapsettings.setLayers([layer]) renderchecker = QgsMultiRenderChecker() renderchecker.setMapSettings(mapsettings) renderchecker.setControlPathPrefix('pointcloudrenderer') renderchecker.setControlName('expected_ramp_render_crs_transform') result = renderchecker.runTest('expected_ramp_render_crs_transform') TestQgsPointCloudAttributeByRampRenderer.report += renderchecker.report() self.assertTrue(result)
def mkRasterShader(layer, color_ramp, classif_mode=QgsColorRampShader.Continuous): min, med, max = getValuesFromLayer3(layer) rasterShader = QgsRasterShader(minimumValue=min, maximumValue=max) colorRamp = getRandomSingleColorRamp() if not color_ramp: utils.internal_error("Could not create color ramp") colorRampShader = QgsColorRampShader(minimumValue=min, maximumValue=max, colorRamp=color_ramp, classificationMode=classif_mode) colorRampShader.classifyColorRamp(band=1, input=layer.dataProvider()) if colorRampShader.isEmpty(): utils.internal_error("Empty color ramp shader") rasterShader.setRasterShaderFunction(colorRampShader) return rasterShader
def testVaryingColorFixedWidth(self): """ test that rendering a interpolated line with fixed width and varying color""" interpolated_width = QgsInterpolatedLineWidth() interpolated_color = QgsInterpolatedLineColor() interpolated_width.setIsVariableWidth(False) interpolated_width.setFixedStrokeWidth(5) color_ramp = QgsColorRampShader( 0, 7, QgsStyle.defaultStyle().colorRamp('Viridis'), QgsColorRampShader.Interpolated) color_ramp.classifyColorRamp(10) interpolated_color.setColor(color_ramp) interpolated_color.setColoringMethod( QgsInterpolatedLineColor.ColorRamp) self.renderImage(interpolated_width, interpolated_color, 'interpolatedlinesymbollayer_2')
def testVaryingColorVaryingWidthExact(self): """ test that rendering a interpolated line with varying width and varying color with exact color ramp """ interpolated_width = QgsInterpolatedLineWidth() interpolated_color = QgsInterpolatedLineColor() interpolated_width.setIsVariableWidth(True) interpolated_width.setMinimumValue(1) interpolated_width.setMaximumValue(8) interpolated_width.setMinimumWidth(1) interpolated_width.setMaximumWidth(10) color_ramp = QgsColorRampShader( 0, 10, QgsStyle.defaultStyle().colorRamp('Viridis'), QgsColorRampShader.Exact) color_ramp.classifyColorRamp(10) interpolated_color.setColor(color_ramp) interpolated_color.setColoringMethod( QgsInterpolatedLineColor.ColorRamp) self.renderImage(interpolated_width, interpolated_color, 'interpolatedlinesymbollayer_6')
def testVaryingColorVaryingWidthDiscrete(self): """ test that rendering a interpolated line with varying width and varying color with discrete color ramp """ interpolated_width = QgsInterpolatedLineWidth() interpolated_color = QgsInterpolatedLineColor() interpolated_width.setIsVariableWidth(True) interpolated_width.setMinimumValue(1) interpolated_width.setMaximumValue(8) interpolated_width.setMinimumWidth(1) interpolated_width.setMaximumWidth(10) color_ramp = QgsColorRampShader( 2, 7, QgsStyle.defaultStyle().colorRamp('RdGy'), QgsColorRampShader.Discrete) color_ramp.classifyColorRamp(5) interpolated_color.setColor(color_ramp) interpolated_color.setColoringMethod( QgsInterpolatedLineColor.ColorRamp) self.renderImage(interpolated_width, interpolated_color, 'interpolatedlinesymbollayer_5')
def get_quantile_ramp_item_list(layer): """ Returns the quantile ramp item list and overrides the ramp items labels with our custom categories. We use a dummy shader function to help us with the quantile classification """ stats = layer.dataProvider().bandStatistics( 1, QgsRasterBandStats.All) min_val = stats.minimumValue max_value = stats.maximumValue colors = [ QColor('#4c724b'), QColor('#89a167'), QColor('#d9d98d'), QColor('#b08d64'), QColor('#8a514a') ] dummy_shader = QgsColorRampShader( minimumValue=min_val, maximumValue=max_val, colorRamp=QgsPresetSchemeColorRamp(colors=colors), type=QgsColorRampShader.Discrete, classificationMode=QgsColorRampShader.Quantile) dummy_shader.classifyColorRamp(classes=5, band=1, input=layer.dataProvider()) labels = ['Very low', 'Low', 'Moderate', 'High', 'Very high'] ramp_items = [] for i, ramp_item in enumerate(dummy_shader.colorRampItemList()): ramp_item.label = labels[i] ramp_items.append(ramp_item) return ramp_items