MSSQL

作者

塔玛斯塞克勒斯

联系

gmail.com上的szekerest

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

作者

赛斯·吉文

联系

Sethg在gegraph ika.co.uk网站上

最后更新

2021-05-05

介绍

Microsoft SQL Server支持使用内置的几何/地理数据类型存储空间数据。MapServer可以通过以下任一种方式连接到MSSQL:1)OGR连接类型,或2)访问这些包含空间列的表的驱动程序,这些表被编译为插件(“mplugin_mssql2008.dll”)。

备注

即使司机指的是 MSSQL2008 支持MSSQL 2008以后的所有版本的MSSQL。

更多信息:

在MSSQL中创建空间数据表

在MSSQL中创建空间数据表有多种方法。属性可以轻松地将现有数据上载到MSSQL表 ogr2ogr 命令行工具和OGR MSSQL Spatial driver 。以下是将shapefile(province.shp)上载到MSSQL实例的示例:

ogr2ogr -f MSSQLSpatial -a_srs EPSG:4326 "MSSQL:server=.\SQLEXPRESS;database=geo;trusted_connection=yes" province.shp

在MSSQL中连接到空间数据

为了连接到MSSQL空间数据库,应设置有效的数据库连接字符串,如下例所示:

Server=.\MSSQLSERVER2008;Database=Maps;Integrated Security=true
Server=55.55.55.55,1433;uid=a_user;pwd=a_password;database=a_database;
       Integrated Security=True
Server=55.55.55.55\SQLEXPRESS,1433;uid=a_user;pwd=a_password;
       database=a_database;Integrated Security=True

如果您不在连接字符串中指定驱动程序,它将使用“SQL Server”驱动程序(sqlsrv32.dll),该驱动程序上次更新是在2010年。要使用较新的驱动程序,您可以在连接字符串中指定:

driver={ODBC Driver 17 for SQL Server};server=55.55.55.55\SQLEXPRESS,1433;uid=a_user;pwd=a_password;
    database=a_database;Integrated Security=False

还支持“SQL Server Native Client”驱动程序。

选项1:通过OGR连接

GDAL/OGR(以及mapserver)可以通过 MSSQLSpatial driver .

验证对mssqlspace的本地支持

使用命令 ogrinfo --formats 要验证您的本地GDAL是否支持MSSQL;响应应包含“MSSQLSpace”,例如:

Supported Formats:
  -> "OCI" (read/write)
  -> "ESRI Shapefile" (read/write)
  -> "MapInfo File" (read/write)
  ...
  -> "MSSQLSpatial" (read/write)
  ...

测试OGR连接参数

使用 OgrInfo 命令行实用程序,用于测试通过MSSQLSpatial驱动程序的连接,例如:

ogrinfo "MSSQL:server=.\SQLEXPRESS;database=geo;trusted_connection=yes" province -summary

使用ConnectionType OGR创建MapServer层

您的层应该包含一个connectiontype ogr语句以及一个连接。连接还应联系“tables=”参数,以及括号中几何图形列的名称。除非定义以“where”关键字开头的SQL select语句,否则不需要指定数据参数。例如:

LAYER
  NAME "provinces"
  TYPE POLYGON
  STATUS ON
  ####
  CONNECTIONTYPE OGR
  CONNECTION "MSSQL:server=.\SQLEXPRESS;uid=xx;pwd=xxx;database=geo;trusted_connection=yes;tables=province(ogr_geometry)"
  ####
  PROJECTION
    "init=epsg:4326"
  END
  CLASS
    NAME "Land"
    STYLE
      COLOR 240 240 240
      OUTLINECOLOR 199 199 199
    END
  END
  PROCESSING 'CLOSE_CONNECTION=DEFER'
END # layer

备注

在这种情况下,通常的connectiontype术语“using unique”和“using srid”对OGR驱动程序没有意义,因为这些参数是从“geometry_columns”元数据表中自动检索的。

选项2:通过MapServer插件连接

创建MapServer层

一旦可以建立到服务器的连接,就可以将层配置为访问MSSQL,如下所示:

LAYER
  NAME "rivers_mssql_spatial"
  TYPE POLYGON
  STATUS DEFAULT
  CONNECTIONTYPE PLUGIN
  PLUGIN "msplugin_mssql2008.dll"
  CONNECTION "Server=.\MSSQLSERVER2008;Database=Maps;Integrated Security=true"
  DATA "ogr_geometry from rivers USING UNIQUE ogr_fid USING SRID=4326"
  ...
END

数据参数用于执行SQL SELECT语句以访问MSSQL中的表。在select语句中需要geometry列;在上面的示例中,ogr_geometry列是rivers表中的geometry列。该表还应该有一个唯一的列(ogr_fid),用于随机访问功能查询操作中的功能。

数据部分还应包含数据表中功能的空间引用ID(SRID)。在交叉操作期间指定搜索形状时使用SRID,该形状应与功能的SRID匹配,否则在特定查询中不会返回任何功能。如果忽略了在数据段中指定srid值,则在定义搜索形状时,潜水员将使用srid=0。

选择几何列的类型

对于“几何”列,MSSQL支持两种数据类型:“几何”和“地理”。默认情况下,驱动程序认为“几何”列的类型为“几何”。如果几何图形列的类型为“geography”,则必须在数据节中显式指定数据类型,如:

DATA "ogr_geometry(geography) from rivers USING UNIQUE ogr_fid USING SRID=4326"

MSSQL插件的预期位置

在Windows平台上,按以下顺序搜索程序所需的DLL:

  1. 从中加载应用程序的目录。

  2. 当前目录。

  3. 系统目录。使用 GetSystemDirectory 函数获取此目录的路径。

  4. 16位系统目录。

  5. Windows目录。使用 GetWindowsDirectory 函数获取此目录的路径。

  6. 在PATH环境变量中列出的目录。

包含mssql插件的二进制文件

目前,下列二进制发行版包含msplugin_mssql2008.dll:

使用空间索引

为了加快对特征的访问,应为几何列创建空间索引,这可以很容易地使用ogr mssql空间驱动程序,如:

ogrinfo -sql "create spatial index on rivers"
             "MSSQL:server=.\MSSQLSERVER2008;database=Maps;
              Integrated Security=true"

通常,我们可以安全地依赖查询优化器在SQL查询操作中选择最合适的索引。但是,在某些情况下,我们应该通过在数据节中指定索引提示来强制优化器使用空间索引,例如:

DATA "ogr_geometry from rivers using index ogr_geometry_sidx
      USING UNIQUE ogr_fid USING SRID=4326"

层处理选项

我们可以使用以下处理选项控制MSSQL驱动程序的行为:

  • CLOSE_CONNECTION=DEFER -在这里,您可以为某些层类型启用连接池。连接池将允许MapServer在单个映射绘制过程中共享到打开的数据库或层连接的句柄。

  • MSSQL_READ_WKB=TRUE -提取几何图形时使用WKB(众所周知的二进制)格式而不是本机格式。