【问题标题】:How to list all layers on Geopackage using pyqgis?如何使用 pyqgis 列出 Geopackage 上的所有图层?
【发布时间】:2019-07-13 00:40:10
【问题描述】:

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

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

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

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

费利佩

【问题讨论】:

    标签: gis qgis


    【解决方案1】:

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

    【讨论】:

    • 此代码 sn-p 可以稍作修改以读取 ESRI 地理数据库中的所有矢量。只需将 filename 替换为 gdb 文件的路径即可。
    【解决方案2】:

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

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

    从 gpkg_geometry_columns 中选择 table_name、column_name、geometry_type_name

    希望能帮到你!

    菲利普

    【讨论】:

    • 伟大的菲利普。也许我的问题不是很清楚......试图更客观:与加载iface.addVectorLayer() 之前相比,我可以运行什么程序来获得一个表列表(我的意思是原始问题中的层)?例如:在 R 中并使用 sfpackage,我运行 sf_layers("./path_to_gpkg") 来查看此特定 gpkg 中托管的所有层。看来你带来的答案我应该知道表名……我错了吗?
    • 菲利普,再次阅读您的答案,我发现我误解了。这就是我需要的。但现在我的问题是:如何通过 pyqgis 传递这个查询?顺便说一句,我想知道是否有一个命令 likeiface.showAttributeTable(layer) 但是要有 te 可用层...
    • 恐怕 pyqgis 不能提供你需要的东西。您应该查询数据库,然后获取所需的表名。例如,在 DSGTools 的方法 listClassesFromDatabases 中,您可以获得所需的表:github.com/dsgoficial/DsgTools/blob/…
    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2015-10-09
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多