【问题标题】:Load vector layer with QgsVectorLayer using MSSQL使用 MSSQL 使用 QgsVectorLayer 加载矢量图层
【发布时间】: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"  

感谢您的帮助!

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      相关资源
      最近更新 更多