【IT168 技术文档】摘要:通过这个动手实验室,您可以了解到:创建返回 GML 格式的空间数据的存储过程;创建 HTTP 处理程序以返回空间数据的 GeoRSS 订阅源;创建将 Microsoft® SQL Server® 2008 中的空间数据与 Microsoft Virtual Earth™ VEMap 控件集成的网页
先决条件
在开始此实验之前,您必须:
• 具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验。
• 熟悉 SQL Server 2008 中的空间数据类型。
• 具有使用 Microsoft Visual Studio® 进行 Microsoft ASP.NET 开发的经验。
• 具有使用 Microsoft JScript® 进行客户端 Web 开发的经验。
实验设置
实验场景
Adventure Works Cycles 向美国各地的大量商店供给自行车。该公司请您开发一个网页,从中可以找到所有销售 Adventure Works 产品的商店。此外,必须允许用户能在指定位置处方圆 100 km 范围内查找商店。商店位置的地理数据要存储在 SQL Server 2008 数据库中,您必须将搜索操作的结果显示在该网页中的 Virtual Earth 地图
实验室操作脚本
1. 检索 GML 格式的空间数据
在此练习中,您将创建返回以地理标记语言 (GML) 表示的空间数据的存储过程。GML 是一个由开放地理空间联盟 (OGC) 定义的标准,用于在应用程序和系统之间交换地理数据。SQL Server 中的空间数据类型支持 GML 作为空间数据类型实例的数据源,也支持 GML 作为表示空间数据值的格式。借助对 GML 的这种支持,可以轻松地在 SQL Server 中的空间数据和其他地理空间系统(如 Microsoft Virtual Earth)之间进行集成。
注意:您可以从 C:\SQLHOLS\Spatial and VE\Solution\StoredProcs.sql 复制此练习中使用的代码
创建包含空间数据的数据库
1. 从开始菜单中的 Microsoft SQL Server 2008 程序组中启动 SQL Server Management Studio。收到提示时,使用 Windows 身份验证连接到数据库引擎的 (local) 实例。
2. 打开 C:\SQLHOLs\Spatial and VE\Starter 文件夹中的 Create DB.sql 查询文件。
3. 检查此脚本中的 Transact-SQL 代码。请注意,此代码执行下列任务:
• 删除名为 StoreData的数据库并重新创建它。
• 创建一个名为 Stores 表,其中包含名为 StoreLocation 的 geography列。
• 在 StoreLocation 列上创建一个空间索引。
• 在 Stores 表中插入大量记录。每个记录都包含一个由纬度和经度坐标定义的表示地理点的 StoreLocation 值。
4. 单击执行运行此脚本。如果尚不存在 StoreData 数据库,请忽略任何有关无法删除该数据库的错误。
5. 保持 SQL Server Management Studio 打开,下一个过程还要使用此程序。
创建检索所有商店的存储过程
1. 单击新建查询创建新查询。如果收到提示,请使用 Windows 身份验证连接到 (local) 数据库引擎实例。
2. 在查询编辑器中键入以下 Transact-SQL 代码。
USE StoreData
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
注意:此代码使用地理数据类型的 AsGml 方法返回 GML 格式的空间数据值。
3. 单击执行运行此脚本。
4. 在 CREATE PROCEDURE 语句下,添加下面的代码以测试存储过程。
EXECUTE GetStoresGML
5. 选择刚刚添加的 EXECUTE 语句,然后单击执行运行所选的代码。
6. 在结果窗格中,单击任意 StoreGML 值在 XML 查看器中查看空间数据的 GML 表示形式。
7. 关闭 XML 查看器并返回到查询编辑器。
创建查找指定位置附近的商店的存储过程
1. 在您在上一过程中添加的 EXECUTE 语句下,添加以下 Transact-SQL 代码。
CREATE PROCEDURE GetNearbyStoresGML @Lat nvarchar(10), @Long nvarchar(10)
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 方法创建表示搜索点周围方圆 100km 范围内的多边形 geography 实例。最后,此代码返回定义搜索区域的 geography 实例的 GML 表示形式以及搜索区域中的所有商店,通过使用 geography 数据类型的 STIntersects 方法可以找到这些商店。
2. 选择刚刚添加的 CREATE PROCEDURE 语句,然后单击执行运行所选的代码。
3. 在 CREATE PROCEDURE 语句下,添加下面的代码以测试存储过程。
EXECUTE GetNearbyStoresGML '34.000000', '-118.000000'
4. 选择刚刚添加的 EXECUTE 语句,然后单击执行运行所选的代码。
5. 在结果窗格中,单击第一个 XML 值,以在 XML 查看器中查看搜索区域的 GML 表示形式。
6. 关闭 XML 查看器并返回到查询编辑器。
7. 将查询脚本文件另存为 C:\SQLHOLs\Spatial and VE\Starter\StoredProcs.sql,然后关闭 SQL Server Management Studio。