平面空间数据类型 geometry 在 SQL Server 中作为公共语言运行时 (CLR) 数据类型实现。 此类型表示欧几里得(平面)坐标系中的数据。
SQL Server 支持 geometry 空间数据类型的一组方法。 这些方法包括开放地理空间联盟 (OGC) 标准和对该标准的一组 Microsoft 扩展所定义的 geometry 方法。
有关 geometry 空间数据类型方法的详细信息,请参阅 geometry 数据类型方法引用。
注册 geometry 类型
geometry 类型已预定义,可在每个数据库中使用。 您可以创建 geometry 类型的表列并对 geometry 数据进行操作,就像使用其他 CLR 类型一样。 可以用在持久化和非持久化计算列中。
示例
A.显示如何添加和查询几何图形数据
以下两个示例显示了如何添加和查询几何图形数据。 第一个示例创建包含一个标识列和一个 geometry 列 GeomCol1 的表。 第三列将 geometry 列呈现为其开放地理空间联盟 (OGC) 熟知文本 (WKT) 表示形式,并使用 STAsText() 方法。 接下来将插入两行:一行包含 geometry 类型的 LineString 实例,一行包含 Polygon 实例。
IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL
DROP TABLE dbo.SpatialTable;
GO
CREATE TABLE SpatialTable
( id int IDENTITY (1,1),
GeomCol1 geometry,
GeomCol2 AS GeomCol1.STAsText() );
GO
INSERT INTO SpatialTable (GeomCol1)
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));
INSERT INTO SpatialTable (GeomCol1)
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));
GO
B.返回两个几何图形实例的交集
第二个示例使用 STIntersection() 方法返回此前插入的两个 geometry 实例相交的点。
DECLARE @geom1 geometry;
DECLARE @geom2 geometry;
DECLARE @result geometry;
SELECT @geom1 = GeomCol1 FROM SpatialTable WHERE id = 1;
SELECT @geom2 = GeomCol1 FROM SpatialTable WHERE id = 2;
SELECT @result = @geom1.STIntersection(@geom2);
SELECT @result.STAsText();
C.在计算列中使用几何图形数据
下面的示例使用 geometry 类型创建具有持久化计算列的表。
IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL
DROP TABLE dbo.SpatialTable;
GO
CREATE TABLE SpatialTable
(
locationId int IDENTITY(1,1),
___location geometry,
deliveryArea as ___location.STBuffer(10) persisted
)