系统表空间查询

表 GDB_Items 包含一个几何列,在其中保留了存储在地理数据库中的要素类的范围。因为列的数据类型是可使用 SQL 进行查询的空间类型,所以可以在表上使用 SQL 执行空间查询,并发现哪些要素类和搜索区域相交。

无论要素类有什么空间参考,每个要素类的范围存储的几何都有 WGS 84 空间参考。所以,也应使用 WGS 84 空间参考构造所有查询几何。

以下示例展示了如何查找位于搜索区域的要素类的名称。请注意,该示例仅使用了面和相交运算符,也可以使用其他几何类型和关系运算符。

--Queries a dbo-schema geodatabase in SQL Server

-- Defines the extents of the search area.
-- VARCHARs are used rather than FLOATs to reduce casting.
DECLARE @MAX_X VARCHAR(3);
DECLARE @MIN_X VARCHAR(3);
DECLARE @MAX_Y VARCHAR(2);
DECLARE @MIN_Y VARCHAR(2);

SET @MAX_X = '-85';
SET @MIN_X = '-86';
SET @MAX_Y = '33';
SET @MIN_Y = '32';

-- Create a polygon for the search area.
-- 4326 is the spatial reference ID for WGS84 in the SQL Server system table.
DECLARE @WKT_CONST nvarchar(max);
DECLARE @SEARCH_AREA GEOMETRY;

SET @WKT_CONST = 'POLYGON ((' +
 @MIN_X + ' ' + @MIN_Y + ', ' +
 @MAX_X + ' ' + @MIN_Y + ', ' +
 @MAX_X + ' ' + @MAX_Y + ', ' + 
 @MIN_X + ' ' + @MAX_Y + ', ' +
 @MIN_X + ' ' + @MIN_Y + '))';
SET @SEARCH_AREA =GEOMETRY::STPolyFromText(@WKT_CONST, 4326);

 -- Find the classes that intersect the extent.
SELECT Name
FROM dbo.GDB_ITEMS
WHERE Shape.STIntersects(@SEARCH_area) = 1


3/7/2012