什么是 ST_Geometry 存储类型?

ST_Geometry 数据类型遵循用户定义数据类型 (UDT) 的 SQL 3 规范,用于创建可存储空间数据(如地标、街道或土地宗地的位置)的列。该数据类型可通过符合国际标准化组织 (ISO) 和开放地理空间联盟 (OGC) 标准的结构化查询语言 (SQL) 来访问地理数据库和数据库。通过向表示地理要素的对象(点、线及面)提供存储空间,此存储类型扩展了数据库的功能。此存储类型旨在充分利用数据库资源;与数据库要素(如复制与分区)兼容;以及快速访问空间数据。

ST_Geometry 本身是抽象的、无法实例化的超类。但其子类可以实例化。实例化的数据类型是可定义为表列的数据类型,并且其类型值插入表列之中。

虽然可以将列定义为类型 ST_Geometry,但是您无法将 ST_Geometry 值插入此列,因为无法对 ST_Geometry 进行实例化。相反,您可以插入子类值。

下图说明了 ST_Geometry 数据类型及其子类的等级。

ST_Geometry
ST_Geometry 超类及其子类

子类

ST_Geometry 的子类分为两类:基础几何子类和同类集合子类。基础几何包括 ST_Point、ST_LineString 和 ST_Polygon,而同类集合包括 ST_MultiPoint、ST_MultiLineString 和 ST_MultiPolygon。与名称的含义一致,同类集合是基础几何的集合。除了共享基础几何属性之外,同类集合还具有某些自身的属性。

每个子类都存储其名称所指的几何类型;例如,ST_MultiPoint 存储多点。下表是子类及其说明的列表:

子类型

描述

ST_Point

  • 在坐标空间中占据单个位置的零维度几何
  • 有单个 x,y 坐标值,始终简单,并且有 NULL 边界

ST_LineString

  • 一维对象,作为一串定义线性插值路径的点来存储
  • ST_LineString 具有长度。
  • 如果 ST_LineString 不与其内部相交,则 ST_LineString 很简单。
  • 闭合的 ST_LineString 的端点(边界)占据空间中的相同点。
  • 如果 ST_LineString 是闭合的并且是简单的,那么它是一个环。
  • 端点通常形成 ST_LineString 的边界,除非 ST_LineString 是闭合的(在这种情况下边界为空)。
  • ST_LineString 的内部是位于端点间的连接路径,ST_LineString 闭合的情况除外,这种情况下内部是连续的。

ST_Polygon

  • 作为点序列存储的二维表面,定义该表面的外部边界环以及零或零以上的内部环
  • ST_Polygon 具有面积并且始终是简单的。
  • 外部环和任意内部环确定了 ST_Polygon 的边界,环之间的封闭空间确定了 ST_Polygon 的内部。
  • ST_Polygon 的环可以在切点相交,但绝不可以交叉。

ST_MultiPoint

  • ST_Point 的集合
  • 有 0 维
  • 如果 ST_MultiPoint 的元素占据的坐标空间互不相同,则 ST_MultiPoint 就是简单的。
  • ST_MultiPoint 的边界为空。

ST_MultiLineString

  • ST_LineStrings 的集合
  • ST_MultiLineStrings 具有长度。
  • 如果 ST_MultiLineString 只在 ST_LineString 元素的端点相交,则它是简单的。
  • 如果 ST_LineString 元素的内部相交,则 ST_MultiLineString 是非简单的。
  • ST_MultiLineString 的边界是 ST_LineString 元素的非相交端点。
  • 如果 ST_MultiLineString 的所有 ST_LineString 元素均为闭合的,则它也为闭合的。
  • 如果 ST_MultiLineString 的所有元素的所有端点都相交,则它的边界为空。

ST_MultiPolygon

  • 面的集合
  • ST_MultiPolygons 具有面积。
  • ST_MultiPolygon 的边界是其元素外部环和内部环的累积长度。
  • ST_MultiPolygon 的内部被定义为其 ST_Polygon 元素的累积内部。
  • ST_MultiPolygon 的元素的边界只能在切点相交。

ST_Geometry 子类型

请注意每个子类都继承 ST_Geometry 的属性,但超类还有其本身的属性。适用于 ST_Geometry 数据类型的函数可接受任何子类实体类型。不过,有些函数定义在子类级别,且仅接受特定的子类。例如,ST_GeometryN 函数仅将 ST_MultiLinestring、ST_MultiPoint 或 ST_MultiPolygon 子类型值作为输入。

要搜索 ST_Geometry 的子类,可使用 ST_GeometryType 函数。ST_GeometryType 函数获取 ST_Geometry 并返回字符串形式的实例化子类。要查找包含在同类集合中基础几何元素的数量,可使用 ST_NumGeometries 函数,该函数获取同类集合并返回其包含的基础几何元素的数目。

5/10/2014