练习 2:查询空间数据类型的实例
在本练习中,您将使用geography 数据类型的方法和属性,来执行空间查询和操作。在geography实例上执行空间操作,使得您可以创建丰富的空间应用程序,其中用户可以查找和处理基于位置的信息。
查找一个geography实例的区域
在SQL Server Management Studio中,点击New Query 来创建一个新的查询。如果出现提示对话框,则使用Windows Authentication连接到(local)数据库引擎实例。
在查询编辑器中,输入下面的Transact-SQL 代码:
GO
-- Find the area of the sales regions
SELECT SalesRegionName, SalesRegion.STArea()/1000000 AreaInSqKm
FROM SalesPerson
注意: geography 数据类型的STArea 方法可以返回指定geography 实例的区域。根据geography 实例的SRID 决定所使用的测量单元。这个数据库的销售区域使用SRID 4326,这意味着将采用正方形来测量区域。
点击Execute 来运行脚本,然后查看结果,它将会按照平方公里显示每个销售区域。
查找与一个geography 实例相交的geography 实例
在查询编辑器中,在原有代码的下方输入下面的Transact-SQL 代码:
SELECT s.StoreName,
s.StoreAddress,
sp.SalesRegionName,
sp.FirstName + ' ' + sp.LastName Salesperson
FROM Store s, SalesPerson sp
WHERE sp.SalesRegion.STIntersects(s.StoreLocation) = 1
DECLARE @westUS geography
DECLARE @eastUS geography
DECLARE @totalUS geography
SELECT @westUS = SalesRegion FROM SalesPerson WHERE SalesRegionName = 'Western US'
SELECT @eastUS = SalesRegion FROM SalesPerson WHERE SalesRegionName = 'Eastern US'
SET @totalUS = @westUS.STUnion(@eastUS)
SELECT @totalUS.ToString()
注意: STIntersects 方法用来决定geography 实例是否与另一个geography 实例进行交叉。在这个实例中,该方法用来查找与销售区域有交叉的存储数据。
选择您在上个步骤上输入的SELECT 语句,然后点击Execute 运行选中的脚本。其结果应当会显示出,那些销售区域内的商店及其销售代表的名字。
查找两个geography 实例的并集
在查询编辑器中,在原有代码的下方输入下面的Transact-SQL 代码:
注意: STUnion 方法创建了一个新的geography 实例,用来展现两个现有geography 实例的合并。在此示例中,新的geography 实例通过合并东西部的销售区域,从而展现了整个美国的完整销售区域。
选中上个步骤中刚刚输入的代码,然后点击Execute 运行选中的代码。结果应当显示出销售区域合并的多边形的一个文字描述。
查找某种地理区域附近的geography 实例
使用一个XML编辑器,例如Visual Studio 2008查看C:\SQLHOLs\Spatial Data\Starter\I5.xml文件的内容。这个文件中包含了下面图形中所示的Interstate 5 highway 的GML 定义。
关闭XML文件,然后在SQL Server Management Studio的查询编辑器中,输入下面的Transact-SQL 代码。
DECLARE @i5Gml xml
SET @i5Gml =(
SELECT * FROM OPENROWSET(
BULK 'C:\SQLHOLs\Spatial Data\Starter\I5.xml',
SINGLE_BLOB
) AS i5GML)
-- Find stores within 100 km of Interstate 5
DECLARE @i5 geography;
SET @i5 = geography::GeomFromGml(@i5Gml, 4326)
SELECT StoreName,
StoreAddress,
StoreLocation.STDistance(@i5)/1000 DistanceFromI5inKM
FROM Store
WHERE StoreLocation.STDistance(@i5) < 100000
ORDER BY DistanceFromI5inKM
注意:本段代码将使用OPENROWSET函数从XML文件当中,将I5的GML表示形式加载出来。然后,它使用geography数据类型的STDistance方法来找到I5的100公里附近的所有商店。
选中在上个步骤中输入的Transact-SQL 语句,然后点击Execute 运行选中的代码。结果将会显示出所有I5附近100公里以内的商店,并将按距离升序显示。
将查询脚本保存为C:\SQLHOLs\Spatial Data\Starter\QuerySpatial.sql文件。
保持SQL Server Management Studio 打开以备后面的练习使用。