geography (Transact-SQL)

地理空间数据类型 geography 是作为 SQL Server 中的 .NET 公共语言运行时 (CLR) 数据类型实现的。 此类型表示圆形地球坐标系中的数据。 SQL Server geography 数据类型用于存储诸如 GPS 纬度和经度坐标之类的椭球体(圆形地球)数据。

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

有关 geography 空间数据类型方法的详细信息,请参阅 geography 数据类型方法引用

注册 geography 类型

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

示例

A.显示如何添加和查询地理数据

以下示例说明如何添加和查询地理数据。 第一个示例创建包含一个标识列和一个 geography 列 GeogCol1 的表。 第三列将 geography 列呈现为其开放地理空间联盟 (OGC) 熟知文本 (WKT) 表示形式,并使用 STAsText() 方法。 接下来将插入两行:一行包含 geography 类型的 LineString 实例,一行包含 Polygon 实例。

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL 
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable 
    ( id int IDENTITY (1,1),
    GeogCol1 geography, 
    GeogCol2 AS GeogCol1.STAsText() );
GO

INSERT INTO SpatialTable (GeogCol1)
VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656 )', 4326));

INSERT INTO SpatialTable (GeogCol1)
VALUES (geography::STGeomFromText('POLYGON((-122.358 47.653 , -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326));
GO

B.返回两个 geography 实例的交集。

下面的示例使用 STIntersection() 方法返回以前插入的两个 geography 实例相交的点。

DECLARE @geog1 geography;
DECLARE @geog2 geography;
DECLARE @result geography;

SELECT @geog1 = GeogCol1 FROM SpatialTable WHERE id = 1;
SELECT @geog2 = GeogCol1 FROM SpatialTable WHERE id = 2;
SELECT @result = @geog1.STIntersection(@geog2);
SELECT @result.STAsText();

C.在计算列中使用地理数据

下面的示例使用 geography 类型创建具有持久化计算列的表。

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL 
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable
(
    locationId int IDENTITY(1,1),
    ___location geography,
    deliveryArea as ___location.STBuffer(10) persisted
)

请参阅

概念

空间数据 (SQL Server)

其他资源

geography 数据类型方法引用