系统表空间查询
表 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