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

时间:2015-11-17 11:38:06

标签: python sql-server python-2.7 qgis pymssql

我正在尝试按照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"  

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

发现问题所在,我不得不改变这个问题' ogr'到了' mssql'在QgsVectorLayer参数中如下......

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

答案 1 :(得分:0)

我是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)