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

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

geography 类型是预定义的,可在每个数据库中使用。 可以创建类型 geography 表列,并以与使用其他系统提供的类型相同的方式对 geography 数据进行作。

创建或构造新的地理实例

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

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

在地理位置周围创建缓冲区
STBuffer (地理数据类型)

若要在地理位置周围创建缓冲区,以便达到允许的范围或误差
BufferWithTolerance(geography 数据类型)

从两个地理实例的交集创建地理位置
STIntersection(geography 数据类型)

创建一个来自两个地理实例并集的地理对象
STUnion(geography 数据类型)

创建一个地理区域,该地理区域由不与另一个地理区域重叠的点构成
STDifference (地理数据类型)

从 Well-Known 文本输入构造地理实例

geography 数据类型提供了几种内置方法,这些方法通过开放地理空间联盟 (OGC) WKT 表示形式生成地理。 WKT 标准是一个文本字符串,允许以文本形式交换地理数据。

从 WKT 输入构造任何类型的地理实例
STGeomFromText(geography 数据类型)

分析(地理数据类型)

从 WKT 输入构造地理坐标点实例
STPointFromText(geography 数据类型)

从 WKT 输入中构建地理多点实例
STMPointFromText (geography 数据类型)

使用 WKT 输入创建一个 geography LineString 实例
STLineFromText (地理数据类型)

从 WKT 输入中构建地理多线字符串实例
STMLineFromText (geography 数据类型)

从 WKT 输入构造地理多边形实例
STPolyFromText (geography 数据类型)

从 WKT 输入创建地理“MultiPolygon”实例
STMPolyFromText (geography 数据类型)

从 WKT 输入构造 geography GeometryCollection 实例
STGeomCollFromText (地理数据类型)

从 Well-Known 二进制输入构造地理实例

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

从 WKB 输入构造任何类型的地理实例
STGeomFromWKB (geography 数据类型)

从 WKB 输入中构造一个地理坐标点实例
STPointFromWKB (地理数据类型)

从 WKB 输入构造地理 MultiPoint 实例
STMPointFromWKB (地理数据类型)

使用 WKB 数据构建 geography LineString 实例
STLineFromWKB (地理数据类型)

从 WKB 输入构造地域 MultiLineString 实例
STMLineFromWKB (地理数据类型)

从 WKB 输入构造地理多边形实例
STPolyFromWKB (geography 数据类型)

从 WKB 输入构造地理 MultiPolygon 实例
STMPolyFromWKB (geography 数据类型)

从 WKB 输入构造 geography GeometryCollection 实例
STGeomCollFromWKB (geography 数据类型)STGeomCollFromWKB (geography 数据类型)

从 GML 文本输入构造地理实例

数据类型 geography 提供一个方法,该方法从 GML 生成 geography 实例,这是实例的 geography XML 表示形式。 SQL Server 支持 GML 的子集。

有关地理标记语言的详细信息,请参阅 OGC 规范:OGC 规范、地理标记语言。

从 GML 输入构造任何类型的地理实例
GeomFromGML(地理数据类型)

从地理实例返回 Well-Known 文本和 Well-Known 二进制文件

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

返回地理对象的 WKT 表示形式
STAsText(geography数据类型)

ToString (地理数据类型)

返回地理实例的 WKT 表示形式,包括任何 Z 和 M 值
AsTextZM (geography 数据类型)

返回地理实例的 WKB 表示形式
STAsBinary (地理数据类型)

返回地理实例的 GML 表示形式
AsGml (geography 数据类型)

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

所有 geography 实例都具有许多可以通过 SQL Server 提供的方法检索的属性。 以下主题定义地理类型的属性和行为,以及用于查询每个属性的方法。

有效性、实例类型和几何集合(GeometryCollection)信息

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

返回地理位置的实例类型
STGeometryType (地理空间数据类型)

确定地理位置是否为给定实例类型
InstanceOf (geography 数据类型)

确定地理实例的格式是否适合其实例类型
STNumGeometries(geography 数据类型)

返回 GeometryCollection 实例中的特定地理位置
STGeometryN (地理数据类型)STGeometryN (地理数据类型)

点数

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

返回构成实例的点数
STNumPoints (geography 数据类型)

返回实例中的特定点
STPointN (几何数据类型)

返回实例的起点
STStartPoint (geography 数据类型)

返回实例的终点
STEndpoint(geography 数据类型)

尺寸

非空 geography 实例可以是 0 维、1 维或二维实例。 零维 geography 实例(如 PointMultiPoint)没有长度或区域。 一维对象(例如 LineString, CircularStringCompoundCurveMultiLineString)具有长度。 二维实例(例如 Polygon, CurvePolygon,以及 MultiPolygon)具有面积和长度。 空实例报告维度 -1,并 GeometryCollection 报告其内容的最大维度。

返回实例的维度
STDimension (geography 数据类型)

返回实例的长度
STLength (地理数据类型)

返回实例的区域
STArea (geography 数据类型)

geography实例没有任何点。 空的LineString, CircularStringCompoundCurveMultiLineString实例的长度为 0。 空 Polygon, CurvePolygonMultiPolygon 实例的区域面积为 0。

确定实例是否为空
STIsEmpty (地理数据类型)

结束语

封闭geography实例是一个数字,其起点和终点相同。 Polygon 实例被视为已关闭。 Point 实例尚未关闭。

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

确定实例是否已关闭
STIsClosed (地理数据类型)

返回多边形实例中的环数
NumRings(geography 数据类型)

返回地理实例的指定环
RingN (地理数据类型)

空间引用 ID (SRID)

空间引用 ID (SRID) 是一个标识符,用于指定实例所表示的椭圆坐标系 geography 。 无法比较具有不同 SRID 的两 geography 个实例。

设置或返回实例的 SRID
STSrid (geography 数据类型)

可以修改此属性。

确定地理实例之间的关系

geography 数据类型提供了许多内置方法,可用于确定两个 geography 实例之间的关系。

确定两个实例是否构成相同的点集
STEquals (几何数据类型)

判断两个实例是否不相交
STDisjoint (几何数据类型)

确定两个实例是否相交
STIntersects (几何数据类型)

确定两个实例相交的点或点
STIntersection (地理数据类型)

确定两个地理实例中点之间的最短距离
STDistance (几何数据类型)

确定两个地理实例之间的点差异
STDifference (地理数据类型)

派生一个地理实例与另一个地理实例进行比较时的对称差或独特点
STSymDifference (geography 数据类型)

geography 实例必须使用支持的 SRID

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

SQL Server 在对 geography 实例使用方法时,会使用默认的 SRID 为 4326,它映射到 WGS 84 空间参考系统。 如果使用 WGS 84(或 SRID 4326)以外的空间引用系统中的数据,则需要确定地理空间数据的特定 SRID。

例子

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

  • 第一个示例创建一个具有标识列和 geographyGeogCol1的表。 第三列将 geography 列转换为开放地理空间联盟(OGC)的Well-Known文本(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  
    
  • 第二个示例使用 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)