MSSQL

作者

塔玛斯塞克勒斯

联系方式

gmail.com上的szekerest

作者

Jeff McKenna

联系方式

jmckenna在gatewaygeomatics.com

最后更新

2012-09-26

介绍

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

在MSSQL2008中创建空间数据表

在MSSQL2008中有几种创建空间数据表的方法。通过使用 ogr2ogr 命令行工具和食人魔的 MSSQL Spatial driver 下面是一个将shapefile(province.shp)上载到MSSQL2008实例的示例:

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

连接到MSSQL2008中的空间数据

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

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

选项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命令行实用程序通过mssqlspace驱动程序测试连接,例如:

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层

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

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(众所周知的二进制)格式而不是本机格式。

更多信息