• 欢迎访问交通人网站!
  • 分享一款小游戏:信任的进化
  •    发表于5年前 (2017-08-26)  热点资讯 |   抢沙发  486 
    文章评分 3 次,平均分 5.0

    SQL Server 支持两种空间数据类型: Geometry 数据类型和 Geography 数据类型,其中 Geometry 类型表示欧几里得(平面)坐标系中的数据,Geography 类型表示圆形地球坐标系中的数据,如 GPS 经纬度坐标数据。

    Geometry 和 Geography 数据类型支持十一种空间数据对象或实例类型。但是,这些实例类型中只有七种“可实例化”,分别为 Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon 和 GeometryCollection。只要特定实例的格式正确,即使未显式定义该实例,Geometry 和 Geography 类型也可识别该实例。

    例如,如果您使用 STPointFromText() 方法显式定义了一个 Point 实例,只要方法输入的格式正确,Geometry 和 Geography 便将该实例识别为 Point。如果您使用 STGeomFromText() 方法定义了相同的实例,则 Geometry 和 Geography 数据类型都将该实例识别为 Point。

    下图描述了 Geometry 和 Geography 数据类型所基于的 Geometry 层次结构,其中蓝色为可实例化的类型

    SQL Server 空间数据类型概述

    空间引用标识符:SRID

    空间引用标识符 (SRID) 是指定 Geometry 和 Geography 实例所在坐标系的标识符。因此,每个空间实例都应有一个空间引用标识符 (SRID),且两个拥有不同 SRID 的 Geometry 和 Geography 实例是不可比的。

    在 SQL Server 中,使用 Geometry 和 Geography 类型数据执行计算时,必须指定实例的 SRID。

    对于 Geometry 实例,SQL Server 默认其 SRID 为 0。

    对于 Geography 实例,SQL Server 默认其 SRID 为 4326,对应与 WGS 84 空间坐标系。如果要使用非 WGS 84(或 SRID 4326)数据,需要指定 SRID。SQL Server 支持基于 EPSG 标准的 SRID,但是必须应与 sys.spatial_reference_systems 中的任意一个匹配。

    注:空间引用标识系统是由 European Petroleum Survey Group (EPSG) standard(欧洲石油测绘组 (EPSG) 标准)定义的,它是为绘图、测绘以及大地测量数据存储而开发的一组标准。

    点:Point

    在 SQL Server 空间数据中,Point 是表示单个位置的零维对象,可能包含 Z(仰角)和 M(度量)值。

    下面的示例创建一个表示点 (3, 4) 的 Geometry Point 实例,该实例的 SRID 为 0。

    下一个示例创建一个表示点 (3, 4) 的 Geometry Point 实例,该实例的 Z(仰角)值为 7,M(度量)值为 2.5,默认 SRID 为 0。

    最后一个示例返回 Geometry Point 实例的 X、Y、Z 和 M 值。

    Z 和 M 值可以显式指定为 NULL,如下例所示:

    多点:MultiPoint

    MultiPoint 是零个点或更多个点的集合。MultiPoint 实例的边界为空。

    下面的示例创建一个 Geometry MultiPoint 实例,该实例的 SRID 为 23 且包含两个点:一个点的坐标为 (2, 3),另一个点的坐标为 (7, 8),Z 值为 9.5。

    该 MultiPoint 实例也可使用 STMPointFromText() 表示,如下所示。

    下面的示例使用方法 STGeometryN() 来检索有关集合中第一个点的说明。

    线:LineString

    LineString 是一个一维对象,表示一系列点和连接这些点的线段。一个 LineString 实例必须由至少两个非重复点组成,也可以为空。

    SQL Server 空间数据类型概述

    如图所示:

    • 图 1 显示的是一个简单、非闭合的 LineString 实例。
    • 图 2 显示的是一个不简单、非闭合的 LineString 实例。
    • 图 3 显示的是一个闭合、简单的 LineString 实例,因此是一个环。
    • 图 4 显示的是一个闭合、不简单的 LineString 实例,因此不是一个环。

    下面的示例说明如何创建一个包含三个点且 SRID 为 0 的 Geometry LineString 实例:

    此 LineString 实例中的每个点都可以包含 Z(仰角)和 M(度量)值。下面这个示例向上例中创建的 LineString 实例添加了 M 值。M 和 Z 可以为 Null 值。

    多线:MultiLineString

    MultiLineString 是零个或更多 Geometry 或 Geography LineString 实例的集合。

    SQL Server 空间数据类型概述

    如图中所示:

    • 图 1 显示的是一个简单的 MultiLineString 实例,其边界是其两个 LineString 元素的四个端点。
    • 图 2 显示的是一个简单的 MultiLineString 实例,因为只有 LineString 元素的端点相交。边界是两个不重叠的端点。
    • 图 3 显示的是一个不简单的 MultiLineString 实例,因为它的其中一个 LineString 元素的内部出现了相交。此 MultiLineString 实例的边界是四个端点。
    • 图 4 显示的是一个不简单、非闭合的 MultiLineString 实例。
    • 图 5 显示的是一个简单、非闭合的 MultiLineString。它没有闭合是因为它的 LineStrings 元素没有闭合。而其简单的原因在于,其任何 LineStrings 实例的内部都没有出现相交。
    • 图 6 显示的是一个简单、闭合的 MultiLineString 实例。它为闭合的是因为它的所有元素都是闭合的。而其简单的原因在于,其所有元素都没有出现内部相交现象。

    下面的示例创建了一个包含两个 LineString 元素且 SRID 为 0 的简单 Geometry MultiLineString 实例。

    若要使用不同的 SRID 实例化此实例,请使用 STGeomFromText()STMLineStringFromText()。也可以使用 Parse(),然后修改 SRID,如下例所示。

    面:Polygon

    Polygon 是存储为一系列点的二维表面,这些点定义一个外部边界环和零个或多个内部环。可以从至少具有三个不同点的环中构建一个 Polygon 实例。Polygon 实例也可以为空。

    Polygon 的外部环和任意内部环定义了其边界。环内部的空间定义了 Polygon 的内部。Polygon 的内部环在单个切点处既可与自身接触也可彼此接触,但如果 Polygon 的内部环交叉,则该实例无效。

    SQL Server 空间数据类型概述

    如图中所示:

    • 图 1 是由外部环定义其边界的 Polygon 实例。
    • 图 2 是由外部环和两个内部环定义其边界的 Polygon 实例。内部环内的面积是 Polygon 实例的外部环的一部分。
    • 图 3 是一个有效的 Polygon 实例,因为其内部环在单个切点处相交。

    下例创建了一个带有孔和 SRID 为 10 的简单 Geometry Polygon 实例。

    可能输入无效的实例并转换为有效的 Geometry 实例。在下列 Polygon 示例中,内部环和外部环重叠且该实例无效。

    在下例中,无效实例通过 MakeValid() 成为有效实例。

    以上示例中返回的 Geometry 实例为 MultiPolygon。

    多面:MultiPolygon

    MultiPolygon 实例是零个或更多个 Polygon 实例的集合。

    SQL Server 空间数据类型概述

    如图中所示:

    • 图 1 是一个包含两个 Polygon 元素的 MultiPolygon 实例。边界由两个外环和三个内环界定。
    • 图 2 是一个包含两个 Polygon 元素的 MultiPolygon 实例。边界由两个外环和三个内环界定。这两个 Polygon 元素在切点处相交。

    下面的示例演示如何创建 Geometry MultiPolygon 实例,并返回第二个组件的熟知文本 (WKT)。

    该示例实例化一个空的 MultiPolygon 实例。

    括号要注意,一个 () 代表线,(())代表面,((()))代表多面。

    空间集合:GeometryCollection

    GeometryCollection 是零个或更多个 Geometry 或 Geography 实例的集合,可以为空。

    下面的示例实例化一个包含一个 Point 实例和一个 Polygon 实例的 Geometry GeometryCollection,它具有 Z 值,且 SRID 为 1。

    打赏
    微信
    支付宝
    微信二维码图片

    微信 扫描二维码打赏

    支付宝二维码图片

    支付宝 扫描二维码打赏

     

    本文整理自 微软官网·空间数据类型,原文链接为 https://docs.microsoft.com/zh-cn/sql/relational-databases/spatial/spatial-data-sql-server

    交通人博客是交通人工作室(JTR Studio)建立的交通人系列网站之一,是交通人工作室的主阵地,旨在整合和分享交通行业相关资讯,具体包括但不限于行业新闻、行业动态,以及行业相关规范、书籍、报告和软件等资源。

    发表评论

    表情 格式

    *

    暂无评论

    
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享