技术开发 频道

使用SQL Server 2008中的空间数据类型

练习 2:查询空间数据类型的实例

在本练习中,您将使用geography 数据类型的方法和属性,来执行空间查询和操作。在geography实例上执行空间操作,使得您可以创建丰富的空间应用程序,其中用户可以查找和处理基于位置的信息。

查找一个geography实例的区域

在SQL Server Management Studio中,点击New Query 来创建一个新的查询。如果出现提示对话框,则使用Windows Authentication连接到(local)数据库引擎实例。

在查询编辑器中,输入下面的Transact-SQL 代码:

USE AWSales
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 代码:

-- Find which stores are in which sales region
SELECT s.StoreName,
       s.StoreAddress,
       sp.SalesRegionName,
       sp.FirstName
+ ' ' + sp.LastName Salesperson
FROM Store s, SalesPerson sp
WHERE sp.SalesRegion.STIntersects(s.StoreLocation) = 1

 

-- Create the union of the sales regions
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 代码。

-- Load Interstate 5 GML from XML file
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 打开以备后面的练习使用。
 

0
相关文章