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