我正在尝试按照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"
感谢您的帮助!
答案 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)