def test_group_layer_updates_from_node(self): """ Test that group layer child layers are synced correctly from the group node """ group_node = QgsLayerTreeGroup('my group') options = QgsGroupLayer.LayerOptions(QgsCoordinateTransformContext()) group_layer = group_node.convertToGroupLayer(options) self.assertFalse(group_layer.childLayers()) layer = QgsVectorLayer("Point?field=fldtxt:string", "layer1", "memory") group_node.addLayer(layer) self.assertEqual(group_layer.childLayers(), [layer]) layer2 = QgsVectorLayer("Point?field=fldtxt:string", "layer2", "memory") group_node.insertLayer(0, layer2) self.assertEqual(group_layer.childLayers(), [layer, layer2]) layer3 = QgsVectorLayer("Point?field=fldtxt:string", "layer3", "memory") layer4 = QgsVectorLayer("Point?field=fldtxt:string", "layer4", "memory") layer3_node = QgsLayerTreeLayer(layer3) layer4_node = QgsLayerTreeLayer(layer4) group_node.insertChildNodes(1, [layer3_node, layer4_node]) self.assertEqual(group_layer.childLayers(), [layer, layer4, layer3, layer2]) layer5 = QgsVectorLayer("Point?field=fldtxt:string", "layer5", "memory") layer5_node = QgsLayerTreeLayer(layer5) group_node.addChildNode(layer5_node) self.assertEqual(group_layer.childLayers(), [layer5, layer, layer4, layer3, layer2]) group_node.removeChildNode(layer3_node) self.assertEqual(group_layer.childLayers(), [layer5, layer, layer4, layer2]) group_node.removeLayer(layer) self.assertEqual(group_layer.childLayers(), [layer5, layer4, layer2]) group_node.removeChildren(0, 2) self.assertEqual(group_layer.childLayers(), [layer5]) group_node.removeAllChildren() self.assertEqual(group_layer.childLayers(), [])
def layerFromPath(lineFilePath: str, rootGroup: QgsLayerTreeGroup, project: QgsLayerTreeGroup) -> None: lineFileBasename = os.path.splitext(os.path.basename(lineFilePath))[0] lineLayer = QgsVectorLayer(lineFilePath, lineFileBasename, 'ogr') # Get number of features (range of Sequence#, number of renderer color classes) driver = ogr.GetDriverByName('ESRI Shapefile') dataSource = driver.Open(lineFilePath, 0) # 0 means read-only. 1 means writeable. layer = dataSource.GetLayer() dataSource = None #Setup graduated color renderer based on year targetField = 'Year' renderer = QgsGraduatedSymbolRenderer('', [QgsRendererRange()]) renderer.setClassAttribute(targetField) lineLayer.setRenderer(renderer) #Get viridis color ramp style = QgsStyle().defaultStyle() defaultColorRampNames = style.colorRampNames() viridisIndex = defaultColorRampNames.index('Viridis') viridisColorRamp = style.colorRamp( defaultColorRampNames[viridisIndex]) #Spectral color ramp #Dynamically recalculate number of classes and colors renderer.updateColorRamp(viridisColorRamp) yearsRange = list(range(1972, 2020)) classCount = len(yearsRange) renderer.updateClasses(lineLayer, QgsGraduatedSymbolRenderer.EqualInterval, classCount) #Set graduated color renderer based on Sequence# for i in range(classCount): #[1972-2019], 2020 not included targetField = 'DateUnix' year = yearsRange[i] renderer.updateRangeLowerValue(i, year) renderer.updateRangeUpperValue(i, year) project.addMapLayer(lineLayer, False) rootGroup.insertLayer(0, lineLayer)