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:
从中加载应用程序的目录。
当前目录。
系统目录。使用 GetSystemDirectory 函数获取此目录的路径。
16位系统目录。
Windows目录。使用 GetWindowsDirectory 函数获取此目录的路径。
在PATH环境变量中列出的目录。
使用空间索引¶
为了加快对特征的访问,应为几何列创建空间索引,这可以很容易地使用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"
更多信息¶
OGR MSSQL Spatial driver page (描述了OGR MSSQL支持)
ogr2ogr application (介绍ogr2ogr命令行应用程序)
矢量数据 (MapServer矢量数据访问指南)