练习 1: 以GML 格式返回空间数据
在本练习中,您将创建一个存储过程,并以地理标记语言(GML)格式返回空间数据。GML是由Open Geospatial Consortium (OGC) 为在不同应用程序与系统之间交换空间数据信息所定义的标准。SQL Server支持的空间数据类型支持作为空间数据类型实例的源,并支持作为空间数据传递的格式。这种对于GML的支持,使得在SQL Server和其它地理信息系统(如Microsoft Virtual Earth)之间进行数据交换非常容易。
创建一个包含空间数据的数据库
启动SQL Server Management Studio。当出现提示时,使用Windows Authentication连接到 (local) 数据库实例。
在C:\SQLHOLs\Spatial and VE\Starter 目录中,打开Create DB.sql 查询文件。
查看这个脚本当中的Transact-SQL 代码,注意,这个脚本执行了下面一些任务:
删除并重新创建一个叫做StoreData的数据库。
创建一个叫做Stores 的数据表,包含一个类型为geography 名为StoreLocation的数据列。
在刚刚创建的StoreLocation 数据列上创建一个空间数据索引。
向Stores 表中插入一些数据行。每条记录都包含一个StoreLocation 值,它表示一个由经度和纬度坐标定义商店的地理位置。
点击Execute ,运行脚本。如果已经存在了StoreData 数据库,则可能会出现一些错误,忽略这些错误。
保持SQL Server Management Studio 打开,后面的步骤中要继续使用。
创建一个存储过程返回所有商店
点击 New Query 创建一个新的查询。如果出现提示,使用Windows Authentication连接到 (local) 数据库引擎。
在查询编辑器中输入下面的Transact-SQL 代码。
GO
CREATE PROCEDURE GetStoresGML
AS
-- Return the store location geography data as GML
SELECT StoreName,
StoreAddress + ', Tel:' + StorePhone AS ContactDetails,
StoreLocation.AsGml() As StoreGML
FROM Stores
GO
注意: 在这段代码当中,使用了geography 数据类型的AsGml 方法来以GML格式返回地理信息数据。
点击Execute 运行脚本。
在CREATE PROCEDURE 语句后面,添加下面的代码,测试存储过程。
EXECUTE GetStoresGML
选中刚刚输入的EXECUTE 语句,然后点击Execute 运行选中的代码。
在结果面板中,点击任意StoreGML 值,来在XML查看器中查看空间数据的GML 表示形式。
关闭XML查看器,然后返回查询编辑器中。
创建一个存储过程来返回指定位置附近的商店
在上面的过程中输入的EXECUTE 语句下面,添加下面的Transact-SQL 代码:
AS
-- Create a point geography instance based on the supplied location
DECLARE @SearchPoint geography
SET @SearchPoint = geography::Point(@Lat, @Long, 4326)
-- Create a polygon geography instance by adding a 100km buffer to the point
DECLARE @SearchArea geography
SET @SearchArea = @SearchPoint.STBuffer(100000)
--Return the search area and all store locations that intersect it
SELECT 'Search Area', '100 KM radius', @SearchArea.AsGml()
UNION ALL
SELECT StoreName,
StoreAddress + ', Tel:' + StorePhone AS ContactDetails,
StoreLocation.AsGml() As StoreGML
FROM Stores
WHERE StoreLocation.STIntersects(@SearchArea) = 1
GO
注意: 这段代码创建一个geography 实例,它包含了一个基于经度和纬度的地理坐标,这个坐标将作为参数传递到存储过程当中。它使用geography 数据类型的STBuffer方法来创建了一个geography多边形实例,用来表示一个以待搜索点为圆心100公里为半径的圆。最后,这段代码返回了一个geography实例的GML表示,它使用geography数据类型的STIntersects 方法,返回了所有与搜
索区域相交的商店位置。
选择刚刚创建的CREATE PROCEDURE 语句,然后点击Execute 运行选中的脚本。
在CREATE PROCEDURE 语句下面,添加下面的代码测试存储过程:
EXECUTE GetNearbyStoresGML '34.000000', '-118.000000'
选择刚刚添加的EXECUTE 语句,然后点击Execute 运行选中的代码。
在结果面板中,点击第一个XML值,在XML查看器中查看搜索区域的GML表示形式。
关闭XML查看器,返回查询编辑器。
将查询脚本保存为C:\SQLHOLs\Spatial and VE\Starter\StoredProcs.sql,,然后关闭SQL Server Management Studio。