空间数据类型
有两种类型的空间数据。geometry 数据类型支持平面或欧几里得(平面球)数据。geometry 数据类型符合适用于 SQL 规范的开放地理空间联盟 (OGC) 简单特征 1.1.0 版。
另外,SQL Server 支持 geography 数据类型,该数据类型可存储诸如 GPS 纬度和经度坐标之类的椭圆体(圆球)数据。
geometry 和 geography 数据类型支持十一种空间数据对象或实例类型。但是,这些实例类型中只有七种“可实例化”;可以在数据库中创建并使用这些实例(或可对其进行实例化)。这些实例的某些属性由其父级数据类型派生而来,使其在 GeometryCollection 中区分为 Points、 LineStrings、Polygons 或多个 geometry 或 geography 实例。
下图描述了 geometry 和 geography 数据类型所基于的 geometry 层次结构。geometry 和 geography 的可实例化类型以蓝色表示。
如图所示,geometry 和 geography 数据类型的七种可实例化类型为 Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon 和 GeometryCollection。只要特定实例的格式正确,即使未显式定义该实例,geometry 和 geography 类型也可识别该实例。例如,如果您使用 STPointFromText() 方法显式定义了一个 Point 实例,只要方法输入的格式正确,geometry 和 geography 便将该实例识别为 Point。如果您使用 STGeomFromText() 方法定义了相同的实例,则 geometry 和 geography 数据类型都将该实例识别为 Point。
有关这些实例的详细信息,请参阅以下主题:
两种数据类型之间的差别
两种空间数据类型的行为经常非常相似,但在数据存储方式和操作方式上存在某些重要的差别。
如何定义连接边
用于 LineString 和 Polygon 类型的定义数据仅限顶点。几何图形类型中两个顶点之间的连接边是直线。但是,地理类型中两个顶点之间的连接边是两个顶点之间的短的大椭圆弧。大椭圆是具有穿过其中心的投影的椭圆体的相交部分,大椭圆弧是大椭圆上的弧形线段。
空间数据类型中的度量
在平面(或平面球)系统中,均以相同的度量单位为坐标测量距离和面积。如果使用 geometry 数据类型,(2, 2) 和 (5, 6) 之间的距离为 5 个单位,与所用的单位无关。
在椭圆体(或圆球)系统中,坐标以经度和纬度的度数给定。但是,即使测量可能依据的是 geography 实例的空间引用标识符 (SRID),长度和面积的测量单位也通常为米或平方米。geography 数据类型最常见的度量单位为米。
空间数据的方向
在平面系统中,多边形的环方向并非重要因素。例如,((0, 0), (10, 0), (0, 20), (0, 0)) 描述的多边形与 ((0, 0), (0, 20), (10, 0), (0, 0)) 描述的多边形相同。SQL 规范的 OGC 简单特征未规定环顺序,并且 SQL Server 不会强制环的顺序。
在椭圆体系统中,多边形无意义,或者模糊不清,没有方向。例如,赤道周围的环是否描述了北半球或南半球?如果我们使用 geography 数据类型存储空间实例,必须指定环的方向并准确地描述实例的位置。
SQL Server 2008 在使用 geography 数据类型时具有以下限制:
每个 geography 实例必须能够容纳在单个半球的内部。任何大于半球的对象都无法存储。
使用开放地理空间联盟 (OGC) 熟知文本 (Well-Known Text, WKT) 或熟知二进制 (Well-Known Binary, WKB) 表示形式并且会产生大于一个半球的对象的任何 geography 实例都会引发一个 ArgumentException 异常。
如果方法的结果不能容纳在单个半球内部,则需要输入两个 geography 实例的 geography 数据类型方法(如 STIntersection()、STUnion()、STDifference() 和 STSymDifference())将返回 Null。如果输出超过单个半球,STBuffer() 也将返回 Null。
在地理数据类型中外环和内环并不重要
SQL 规范的 OGC 简单特征讨论了外环和内环,但此差别对 SQL Servergeography 数据类型来说几乎毫无意义:多边形的任何环都可以作为外环。
有关 OGC 规范的详细信息,请参阅以下内容:
OGC Specifications, Simple Feature Access Part 1 - Common Architecture(OGC 规范:简单特征访问第 1 部分 - 公共体系结构)
OGC Specifications, Simple Feature Access Part 2 – SQL Options(OGC 规范:简单特征访问第 2 部分 – SQL 选项)