空间类型 - geometry (Transact-SQL)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Microsoft Fabric SQL 数据库

平面空间数据类型 geometry 在 SQL Server 中作为公共语言运行时 (CLR) 数据类型实现。 此类型表示欧几里得(平面)坐标系中的数据。

SQL Server 支持 geometry 空间数据类型的一组方法。 这些方法包括开放地理空间联盟 (OGC) 标准和对该标准的一组 Microsoft 扩展所定义的几何图形方法。

geometry 方法的公差可高达 1.0e-7 * extents。 extents 表示 geometry 对象的各点之间的近似最大距离。

注册 geometry 类型

geometry 类型已进行预定义,可在每个数据库中使用。 您可以创建 geometry 类型的表列并对 geometry 数据进行操作,就像使用其他 CLR 类型一样。 可以用在持久化和非持久化计算列中。

注解

在 Microsoft Fabric 中的 SQL 数据库中,支持地理和几何数据类型,但无法镜像到 Fabric OneLake

示例

A. 显示如何添加和查询几何图形数据

以下两个示例显示了如何添加和查询几何图形数据。 第一个示例创建包含一个标识列和一个 geometryGeomCol1 的表。 第三列将 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  
)  

另请参阅

空间数据 (SQL Server)