Search code examples
gisqgis

How to list all layers on Geopackage using pyqgis?


I am studying about pyqgis (using the pyqgis cookbook and started loading a vector layer.

So far I was able to open a layer that I already knew exist on a geopackge.

iface.addVectorLayer("./bcim_2016_21_11_2018.gpkg|layername=lim_unidade_federacao_a", "Nome Vetor", "ogr")

Now, I am wondering how could I list all layers hosted on a geopackage, so a can define which layer to load? Thansk in advance

Felipe


Solution

  • I have just found this possibility on PyQGIS CookBook - cheatsheet, which answer my question.

    from qgis.core import QgsVectorLayer, QgsProject
    
    fileName = "/path/to/gpkg/file.gpkg"
    layer = QgsVectorLayer(fileName,"test","ogr")
    subLayers =layer.dataProvider().subLayers()
    
    for subLayer in subLayers:
        name = subLayer.split('!!::!!')[1]
        uri = "%s|layername=%s" % (fileName, name,)
        # Create layer
        sub_vlayer = QgsVectorLayer(uri, name, 'ogr')
        # Add layer to map
        QgsProject.instance().addMapLayer(sub_vlayer)