使用 MSSQL 使用 QgsVectorLayer 加载矢量图层

Posted

技术标签:

【中文标题】使用 MSSQL 使用 QgsVectorLayer 加载矢量图层【英文标题】:Load vector layer with QgsVectorLayer using MSSQL 【发布时间】:2015-11-17 11:38:06 【问题描述】:

我正在尝试按照 PyQGIS Cookbook 中的说明从 MSSQL 连接加载矢量图层,但我很挣扎!

http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/loadlayer.html

我已成功连接到 PostGIS 中的一个图层,但我想使用 MSSQL 连接连接到一个图层,但似乎无法正常工作。

首先我们可以使用 MSSQL 连接吗?以下是我的脚本的关键部分,我是否正确构建了连接?

uri = QgsDataSourceURI()
# set host name, port, database name, username and password
uri.setConnection("myserver", "1433", "GGPNLPGRDC", "GGPAccessRDC", "GGPAccessRDC")
# set database schema, table name, geometry column and optionally
# subset (WHERE clause)
uri.setDataSource("dbo", "BLPU","GEOMETRY", "")

vlayer = QgsVectorLayer(uri.uri(), "BLPU", "ogr")

if not vlayer.isValid():
    print "Layer failed to load!"
else:
    print "llpg_tan layer loaded successfully"  

感谢您的帮助!

【问题讨论】:

【参考方案1】:

发现问题出在哪里,我只好把QgsVectorLayer参数中的'ogr'改成'mssql'如下...

vlayer = QgsVectorLayer(uri.uri(), "BLPU", "mssql")

【讨论】:

我仍然有各种各样的问题。这对您来说仍然成功吗? 是的,这解决了上述特定问题,但我还没有进行任何进一步的开发。【参考方案2】:

我是一个完全新手 QGIS 用户(1 周)但是......

除了上面的答案,我发现直到我明确设置了 Srid 和 WkbType 之后,我才能成功创建一个有效的层。

对于 Srid,这是一个定制的 Sql 数据库,带有一个 geometry_columns 表,在使用 UI 时似乎可以使用它,但在 python 脚本的情况下却没有。

在 WkbType 的情况下 - 我的表中有 LineString 和 MultilineString,我不确定这是否重要(同样,如果我通过 UI 添加图层,它不会影响图层显示)。

我的脚本是

uri = QgsDataSourceUri()
uri.setConnection("__the_host__", "1433", "__the_db_name__", "__username__", "__password__")
uri.setDataSource("dbo", "__table__", "SHAPE", "")
uri.setSrid('4326')
uri.setWkbType(5) # multilinestring
vlayer = QgsVectorLayer(uri.uri(), "My Table", "mssql")
QgsProject.instance().addMapLayer(vlayer)

【讨论】:

以上是关于使用 MSSQL 使用 QgsVectorLayer 加载矢量图层的主要内容,如果未能解决你的问题,请参考以下文章

如何在 php 上使用 mssql 函数?我的扩展文件夹中没有 php_mssql.dll

无法使用 FreeTDS 连接 MSSQL 服务器

使用 php 连接到 MSSQL 数据库视图

使用 PhpMyAdmin 导入 MSSQL.sql 时出现问题

为 Windows 7 安装 MSSQL 并运行使用 MSSQL2016 为 X86 系统制作的应用程序

远程连接到 MSSQL,使用 Windows 身份验证,JAVA