QGIS 3.4 - 使用 QgsProject.instance().addMapLayer() 添加图层时出现问题

Posted

技术标签:

【中文标题】QGIS 3.4 - 使用 QgsProject.instance().addMapLayer() 添加图层时出现问题【英文标题】:QGIS 3.4 - Problem adding layers with QgsProject.instance().addMapLayer() 【发布时间】:2020-01-27 10:20:25 【问题描述】:

我正在尝试将 Postgis 中的图层添加到 Qgis 项目中。我的脚本似乎可以工作,因为我没有错误,但图层没有添加到项目中。我尝试添加的每个表都有一个唯一的键。

这是我的脚本:

uri = QgsDataSourceUri()
try:
    uri.setConnection("my_host", "my_port", "my_dbase_name", "my_user", "my_password")
except:
    'Unable to connect database !'

uri.setDataSource("my_schema", "my_table", "geom","","my_unique_id")
vlayer = QgsVectorLayer(uri.uri(), "my_layer_name", "my_user_name")
QgsProject.instance().addMapLayer(vlayer)

不知道问题出在哪里?如果有人作为一个想法或看到一个明显的错误......我很感兴趣。

谢谢

【问题讨论】:

【参考方案1】:

你需要检查创建图层时返回的内容,如果出现错误将是None。我还认为您需要指定要使用的驱动程序 (postgres) 而不是您的用户名。

我会使用如下代码:

tablename = "thetable"
geometrycol = "geom"

from qgis.core import QgsVectorLayer, QgsDataSourceUri
uri = QgsDataSourceUri()
uri.setConnection("host", "5432", "db", "user", "pass")
uri.setDataSource ("schema", tablename, geometrycol)
vlayer=QgsVectorLayer (uri.uri(False), tablename, "postgres")
QgsProject.instance().addMapLayer(vlayer)

【讨论】:

以上是关于QGIS 3.4 - 使用 QgsProject.instance().addMapLayer() 添加图层时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

QGIS入门实战精品教程3.4:QGIS创建连接打包GeoPackage数据库及数据入库案例详解

QGIS入门实战精品教程3.4:QGIS创建连接打包GeoPackage数据库及数据入库案例详解

QGIS 与 Geomesa 或 GeoServer 的集成

初识Qgis

ArcGIS Pro微课1000例0023:ArcGIS Pro 3.0中打开GeoPackage数据库(.gpkg)

ArcGIS Pro微课1000例0023:ArcGIS Pro 3.0中打开GeoPackage数据库(.gpkg)