创建、构造和查询地理实例

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

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

主题内容

  • 创建或构建新的地域实例

    • 从现有实例创建新的地域实例

    • 从熟知文本输入构造地域实例

    • 从熟知二进制输入构造地域实例

    • 用 GML 文本输入构造地域实例

  • 从地域实例返回熟知文本和熟知二进制

  • 查询地域实例的属性和行为

    • 有效性、实例类型和 GeometryCollection 信息

    • 点数

    • 维度

    • 闭合

    • 空间引用标识符 (SRID)

  • 确定地域实例之间的关系

  • 地域实例必须使用支持的 SRID

  • 示例

[返回页首]

创建或构建新的地域实例

从现有实例创建新的地域实例

geography 数据类型提供了许多内置方法,可以基于现有实例使用这些方法创建新的 geography 实例。

从熟知文本输入构造地域实例

geography 数据类型提供了若干种用开放地理空间联盟 (OGC) WKT 表示形式生成地域的内置方法。 WKT 标准是一种允许地域数据以文本形式交换的文本字符串。

从熟知二进制输入构造地域实例

WKB 是 OGC 规定的一种二进制格式,该格式允许 Geography 数据在客户端应用程序和 SQL 数据库之间进行交换。 以下函数接受使用 WKB 输入构造地域实例:

用 GML 文本输入构造地域实例

geography 数据类型提供了一种用 GML(geography 实例的 XML 表示形式)生成 geography 实例的方法。 SQL Server 支持部分 GML。

有关地域标记语言的详细信息,请参阅 OGC 规范:OGC Specifications, Geography Markup Language(OGC 规范,地域标记语言)。

从地域实例返回熟知文本和熟知二进制

可以使用以下方法返回 WKT 或 WKB 格式的 geography 实例:

查询地域实例的属性和行为

所有 geography 实例都有很多可以通过 SQL Server 提供的方法进行检索的属性。 下列主题定义了地域类型的属性和行为,并为查询每种图形定义了方法。

有效性、实例类型和 GeometryCollection 信息

构造 geography 实例后,就可以使用以下方法返回实例类型,或者,如果它是 GeometryCollection 实例,则返回特定的 geography 实例。

点数

所有非空 geography 实例都由“点”组成。 这些点表示球体的纬度和经度坐标,在其上可绘制 geography 实例。 数据类型 geography 提供了许多用于查询实例点的内置方法。

维度

非空 geography 实例可以为零维、一维或二维。 零维 geography 实例(例如 Point 和 MultiPoint)没有长度或面积。 一维对象(例如 LineString, CircularString、CompoundCurve 和 MultiLineString)具有长度。 二维实例(例如 Polygon, CurvePolygon 和 MultiPolygon)具有面积和长度。 空实例将报告 -1 维,并且 GeometryCollection 报告其内容的最大维度。

“空”geography 实例不包含任何点。 空的 LineString, CircularString、CompoundCurve 和 MultiLineString 实例的长度为 0。 空的 Polygon, CurvePolygon 和 MultiPolygon 实例的面积为 0。

闭合

“闭合的”geography 实例是指起始点和终点相同的图形。 Polygon 实例被视为闭合的。 Point 实例不是闭合的。

环是一个简单、闭合的 LineString 实例。

空间引用标识符 (SRID)

空间引用标识符 (SRID) 是指定 geography 实例所在的椭球坐标系的标识符。 两个拥有不同 SRID 的 geography 实例是不可比的。

此属性可以进行修改。

确定地域实例之间的关系

geography 数据类型提供了许多内置方法,可以使用这些方法确定两个 geography 实例的关系。

地域实例必须使用支持的 SRID

SQL Server 支持基于 EPSG 标准的 SRID。 必须使用 geography 实例的支持 SQL Server 的 SRID 执行计算或将方法用于地域空间数据。 SRID 必须与 sys.spatial_reference_systems 目录视图中显示的 SRID 中的一个匹配。 如前所述,在使用 geography 数据类型对空间数据执行计算时,结果将取决于在创建数据时使用的是哪个椭圆体,因为为每个椭圆体都分配了一个特定空间引用标识符 (SRID)。

对 geography 实例使用方法时,SQL Server 使用等于 4326 的默认 SRID,它将映射到 WGS 84 空间引用系统。 如果要使用 WGS 84(或 SRID 4326)之外的某个空间引用系统中的数据,您需要确定地域空间数据的特定 SRID。

示例

以下示例说明如何添加和查询地理数据。

  • 第一个示例创建了带有标识列和 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
    
  • 第二个示例使用 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();
    

请参阅

概念

空间数据 (SQL Server)