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。
更多信息:
OGR MSSQL Spatial driver page (描述了OGR MSSQL支持)
ogr2ogr application (介绍ogr2ogr命令行应用程序)
矢量数据 (MapServer矢量数据访问指南)
在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:
从中加载应用程序的目录。
当前目录。
系统目录。使用 GetSystemDirectory 函数获取此目录的路径。
16位系统目录。
Windows目录。使用 GetWindowsDirectory 函数获取此目录的路径。
在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(众所周知的二进制)格式而不是本机格式。