使用 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
使用 PhpMyAdmin 导入 MSSQL.sql 时出现问题