我正在研究pyqgis(使用pyqgis cookbook,并开始加载矢量层。
到目前为止,我已经能够打开我已经知道在地理包中存在的图层。
iface.addVectorLayer("./bcim_2016_21_11_2018.gpkg|layername=lim_unidade_federacao_a", "Nome Vetor", "ogr")
现在,我想知道如何列出托管在geopackage上的所有图层,以便可以定义要加载的图层? 提前感谢
魔咒
答案 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)