空间类型 - geometry (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例
平面空间数据类型 geometry 在 SQL Server 中作为公共语言运行时 (CLR) 数据类型实现。 此类型表示欧几里得(平面)坐标系中的数据。
SQL Server 支持 geometry 空间数据类型的一组方法。 这些方法包括开放地理空间联盟 (OGC) 标准和对该标准的一组 Microsoft 扩展所定义的几何图形方法。
geometry 方法的公差可高达 1.0e-7 * extents。 extents 表示 geometry 对象的各点之间的近似最大距离。
注册 geometry 类型
geometry 类型已进行预定义,可在每个数据库中使用。 您可以创建 geometry 类型的表列并对 geometry 数据进行操作,就像使用其他 CLR 类型一样。 可以用在持久化和非持久化计算列中。
示例
A. 显示如何添加和查询几何图形数据
以下两个示例显示了如何添加和查询几何图形数据。 第一个示例创建包含一个标识列和一个 geometry
列 GeomCol1
的表。 第三列将 geometry
列呈现为其开放地理空间信息联盟 (OGC) 熟知文本 (WKT) 表示形式,并使用 STAsText()
方法。 接下来将插入两行:一行包含 LineString
类型的 geometry
实例,一行包含 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
)