SQL Server 2008 及更高版本支持空间数据。这包括对平面空间数据类型 geometry 的支持,该数据类型支持欧几里得坐标系统中的几何数据(点、线和多边形)。geography 数据类型表示地球表面某区域上的地理对象,如一片陆地。geography 列的空间索引会将地理数据映射到二维非欧几里得空间。
空间索引是对包含空间数据的表列(“空间列”)定义的。每个空间索引指向一个有限空间。例如,geometry 列的索引指向平面上用户指定的矩形区域。
Create Table ZipCodes
(
ID INT PRIMARY KEY, ZipGeometry GEOMETRY NOT NULL,
ZipAsText AS ZipGeometry.STAsText()
)
DECLARE @ZipData GEOMETRY
SET @ZipData=geometry::STGeomFromText('POLYGON((1 10,15 15,30 13,29 4,7 1,1 10))',0)
insert into ZipCodes Values('1',@ZipData)
DECLARE @ZipData GEOMETRY
SET @ZipData=(SELECT ZipGeometry from ZipCodes where ID=1)
SELECT @ZipData.STArea() as 'Area of zipcode'
如果该城市现在10,10建一所中学,并想确定该点所在邮政编码怎么办?以下代码用STWithin()函数来火大这个问题:
DECLARE @HighSchool GEOMETRY
SET @HighSchool=GEOMETRY::STGeomFromText('POINT(10,10)',0);
IF (@HighSchool.STWithin(@ZipData)=1)
SELECT 'School is within ZipCode'
ELSE
SELECT 'School is outside of ZipCode'