如何使用 pyqgis 列出 Geopackage 上的所有图层?

How to list all layers on Geopackage using pyqgis?

我正在研究 pyqgis(使用 pyqgis cookbook 并开始加载矢量图层。

到目前为止,我能够打开一个我已经知道存在于 geopackge 上的图层。

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

现在,我想知道如何列出地理包上托管的所有图层,以便可以定义要加载的图层? 提前致谢

费利佩

Felipe,所有图层都存储到gpkg_geometry_columns。因此,您应该使用 Qt 或 sqlite3 中的 QSqlDatabase 来查询此 table。

要查询 table 名称、列名称和几何类型,您可以执行以下操作:

select table_name、column_name、geometry_type_name 来自 gpkg_geometry_columns

希望能帮到你!

菲利普

我刚刚在 PyQGIS CookBook - cheatsheet 上发现了这种可能性,它回答了我的问题。

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)