从 RStudio 连接服务器连接到空间 SQL 表

Connect to Spatial SQL Tables from RStudio Connect Server

我有一个闪亮的应用程序,其中包含以下与 SQL 服务器中的空间 table(包含从 ESRI shapefile 上传的数据)的连接:

dsn <- paste0("MSSQL:server=host\instance;",
              "database=database;",
              "UID=my_username;",
              "PWD=my_password;",
              "trusted_connection=no")

spdf <- rgdal::readOGR(dsn = dsn, layer = "my_spatial_table")

它在我的本地 Windows 机器上工作正常,并按预期检索空间数据。

当我将其发布到 RSConnect 时,连接失败。但是,我可以访问 table 本身并将其作为表格数据读入 R 会话(使用 RODBC 包和几乎相同的 DSN,但前面没有 MSSQL)。

所以我的问题是:

  1. 是否可以从 RSConnect 服务器 R 会话的 SQL 服务器中读取 tables 的空间数据?

  2. 如果没有,有没有办法将编码的空间数据从表格形式转换为 R 中的 SpatialPointsDataFrame

版本

我正在使用 rgdal v1.2-15,R 版本 3.4.2,SQL Server 2016,RSConnect v1.5.8-12

非常感谢您的任何建议 - 如果需要更多技术细节,请告诉我。

Edit:为了以表格形式访问数据,我使用了 'ODBC Driver 13 for SQL Server' 驱动程序。我不确定是否应该为空间数据使用不同的驱动程序。

事实证明,细节决定成败 - 尽管两台机器 运行 具有相同版本的 R 和所有 R 包,但它们具有不同版本的底层 GDAL 和 PROJ4 系统组件,rgdal 使用。

教训:使用依赖于系统组件的包时要格外小心!

似乎 GDAL v1.11.4 和 PROJ4 v4.8.0 不足以让 readOGR() 从 MS SQL 服务器上正确读取空间表。

GDAL v2.2.0 和 PROJ4 v4.9.3 就足够了(但可能不是必需的 - 还没有测试中间的版本)。