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

时间:2019-07-13 00:40:10

标签: gis qgis

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

到目前为止,我已经能够打开我已经知道在地理包中存在的图层。

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

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

魔咒

2 个答案:

答案 0 :(得分:1)

Felipe,所有图层均存储在gpkg_geometry_columns中。因此,您应该使用Qt或sqlite3的QSqlDatabase查询该表。

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

从gpkg_geometry_columns中选择表名称,列名称和geometry_type_name

希望我能帮助您!

菲利普

答案 1 :(得分:0)

我刚刚在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)