如何使用 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)
我正在研究 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)