ST_Geometry 的空间存取器函数
空间存取器函数返回几何属性。有一些存取器函数可用于确定 ST_Geometry 要素的下列属性:
维数
几何的维度是定义几何的空间范围所需的最小坐标(无, x, y)。
几何可具有 0、1 或 2 个维度。
维度所代表的意义如下:
- 0 - 既不具有长度也不具有面积
- 1 - 具有长度(x 或 y)
- 2 - 包含面积(x 和 y)
点和多点子类型的维度为 0。点表示零维要素,可使用单个坐标为其建模,而多点表示必须使用未连接坐标的群集为其建模的数据。
线串和多线串子类型的维度为 1。它们存储诸如路段、分支河流系统等要素以及其他任何具有线性本质的要素。
面和多面子类型的维度为 2。林分、宗地、水体以及其他周长包围某一可定义区域的要素都可以按面或多面数据类型渲染。
维度十分重要,因为其不仅作为子类型的属性,而且还决定了两个要素的空间关系。生成的一个或多个要素的维度将决定操作是否成功。检查要素的维度以确定应该如何对其进行比较。
要评估几何的维度,请使用 ST_Dimension 函数,该函数处理 ST_Geometry 要素并以整数形式返回维度。有关使用该函数的语法和示例,请参阅 ST_Dimension。
几何的坐标也具有维度。如果几何仅具有 x 和 y 坐标,则坐标维度为 2。如果几何具有 x、y 和 z 坐标,则坐标维度为 3。如果几何具有 x、y、z 和 m 坐标,则坐标维度为 4。
可以使用 ST_CoordDim 函数来确定几何中存在的维度。
Z 坐标
一些几何具有相关的高度或深度(第三维度)。形成要素几何的每个点都可以包含表示相对地球表面的高度或深度的可选 z 坐标。
ST_Is3D 谓词函数处理 ST_Geometry,如果函数具有 Z 坐标,则返回 1 (TRUE);如果没有,则返回 0 (FALSE)。
可以使用 ST_Z 函数来确定点的 Z 坐标。
测量值
测量值是分配给每个坐标的值,其用于线性参考和动态分段应用。例如,沿公路的里程标志位置可包含指示其位置的测量值。值将表示可以双精度数形式存储的任何项目。
ST_IsMeasured 谓词函数处理几何,如果几何包含测量值,则返回 1 (TRUE);如果不包含,则返回 0 (FALSE)。(只能与 ST_Geometry 的 Oracle 实现一起使用。)
可以使用 ST_M 函数来获得某点的测量值。
几何类型
几何类型指的是几何实体的类型。其中包括以下内容:
- 点和多点
- 线和多线
- 面和多面
ST_Geometry 是超类,可存储多个子类型。要确定某个几何属于哪种子类型,请使用 ST_GeometryType 或 ST_Entity(仅限 Oracle)函数。
点(折点)集合与点数
几何可以有零个或更多个点。如果几何有零个点,则其被视为空几何。点子类型是唯一的一种限制为零个点或一个点的几何;其他所有子类型都可有零个或更多个点。
ST_Point
ST_Point 是零维度几何,它在坐标空间中占据单个位置。ST_Point 具有单个 x,y 坐标值(始终是简单的),并且边界为空。ST_Point 可以用来定义诸如油井、地标和水样采集点等要素。
以下是仅适用于 ST_Point 数据类型的函数:
ST_MultiPoint
ST_MultiPoint 是 ST_Point 的集合;ST_MultiPoint 的维度为 0,与其元素相同。如果 ST_MultiPoint 中的元素均没有占据相同的坐标空间,则它是简单的。ST_MultiPoint 的边界为空。ST_MultiPoint 可以定义诸如天线广播模式和疾病爆发事件等。
长度和面积
长度和面积是几何的可测量特征。线串和多线串的元素是一维的并且具有长度特征。面和多面的元素是二维表面,因此面积可以测量。可以使用函数 ST_Length 和 ST_Area 来确定这些属性。测量单位根据数据的存储方式的不同而有所变化。
ST_LineString
ST_LineString 是一维对象,它被存储为定义线性插值路径的点序列。如果 ST_LineString 不与其内部相交,则 ST_LineString 很简单。闭合的 ST_LineString 的端点(边界)占据空间中的相同点。如果 ST_LineString 是闭合的并且是简单的,那么它是一个环。与从超类 ST_Geometry 继承的其他属性一样,ST_LineString 具有长度。ST_LineString 通常用于定义线状要素,如道路、河流和电力线。
端点通常形成 ST_LineString 的边界,除非 ST_LineString 是闭合的(在这种情况下边界为空)。ST_LineString 的内部是端点之间的连通路径,除非它是闭合的(在这种情况下内部是连续的)。
以下是适用于 ST_LineString 的函数:
- ST_StartPoint - 返回指定 ST_LineString 的第一个点
- ST_EndPoint - 返回 ST_LineString 的最后一个点
- ST_PointN - 处理 ST_LineString 和到第 n 个点的索引,然后返回该点
- ST_Length - 以双精度数形式返回 ST_LineString 的长度
- ST_NumPoints - 评估 ST_LineString 并以整数数形式返回其序列中的点数
- ST_IsRing - 谓词函数,如果指定的 ST_LineString 是一个环,则返回 1 (TRUE);如果不是,则返回 0 (FALSE)
- ST_IsClosed - 谓词函数,如果指定的 ST_LineString 是闭合的,则返回 1 (TRUE);如果不是,则返回 0 (FALSE)
下图显示 ST_LineString 对象的示例:(1) 是简单非闭合 ST_LineString;(2) 是非简单非闭合 ST_LineString;(3) 是闭合简单 ST_LineString,因此是环;(4) 是闭合非简单 ST_LineString,不是环。
ST_MultiLineString
ST_MultiLineString 是 ST_LineString 的集合。如果 ST_MultiLineString 只在 ST_LineString 元素的端点相交,则它是简单的。如果 ST_LineString 元素的内部相交,则 ST_MultiLineString 是非简单的。
ST_MultiLineString 的边界是 ST_LineString 元素的非相交端点。如果 ST_MultiLineString 的所有 ST_LineString 元素均为闭合的,则它也为闭合的。如果 ST_MultiLineString 的所有元素的所有端点都相交,则它的边界为空。ST_MultiLineString 不仅具有从超类 ST_Geometry 继承的其他属性,还具有长度。ST_MultiLineString 用于定义不毗连的线状要素,如河流或道路网络。
下图提供 ST_MultiLineString 的示例:(1) 是简单 ST_MultiLineString,其边界为它的两个 ST_LineString 元素的四个端点。(2) 是简单 ST_MultiLineString,因为只有 ST_LineString 元素的端点是相交的。边界是两个不相交端点。(3) 是非简单 ST_MultiLineString,因为它的一个 ST_LineString 元素的内部是相交的。此 ST_MultiLineString 的边界是三个不相交的端点。(4) 是简单非闭合 ST_MultiLineString。它是非闭合的,因为其 ST_LineString 元素均是非闭合的。它是简单的,因为所有 ST_LineString 元素的内部都没有相交。(5) 是单个简单闭合 ST_MultiLineString。它是闭合的,因为其所有元素都是闭合的。它是简单的,因为其所有元素均没有在内部相交。
适用于 ST_MultiLineString 的函数包括 ST_Length 和 ST_IsClosed。
ST_Length 函数评估 ST_MultiLineString 并以双精度数形式返回其所有 ST_LineString 元素的累积长度。
如果指定的 ST_MultiLineString 是闭合的,则 ST_IsClosed 谓词函数返回 1 (TRUE);如果不是,则返回 0 (FALSE)。
ST_Polygon
ST_Polygon 是二维表面,它被存储为点序列,该序列定义其外接环以及 0 个或更多内部环。ST_Polygon 始终是简单的。ST_Polygon 用于定义具有空间范围的要素,例如地块、水体以及管辖区。
下图显示 ST_Polygon 对象的示例:(1) 是边界由外部环定义的 ST_Polygon。(2) 是边界由外部环和两个内部环定义的 ST_Polygon。内部环内的区域是 ST_Polygon 外部环的一部分。(3) 是有效 ST_Polygon,因为环在一个切点处相交。
外部环和任意内部环确定了 ST_Polygon 的边界,环之间的封闭空间确定了 ST_Polygon 的内部。ST_Polygon 的环可以在切点相交,但绝不可以交叉。ST_Polygon 不仅具有从超类 ST_Geometry 继承的其他属性,还具有面积。
以下是适用于 ST_Polygon 的函数:
- ST_Area - 以双精度数形式返回 ST_Polygon 的面积
- ST_Centroid - 返回表示 ST_Polygon 包络矩形中心的 ST_Point
- ST_ExteriorRing - 以 ST_LineString 形式返回 ST_Polygon 的外部环
- ST_InteriorRingN - 评估 ST_Polygon 和索引并以 ST_LineString 形式返回第 n 个内部环
- ST_NumInteriorRing - 返回 ST_Polygon 包含的内部环数
- ST_PointOnSurface - 返回保证在指定 ST_Polygon 的表面上的 ST_Point
ST_MultiPolygon
ST_MultiPolygon 的边界是其元素的外部环和内部环的累积长度。ST_MultiPolygon 的内部被定义为其 ST_Polygon 元素的累积内部。ST_MultiPolygon 的元素的边界只能在切点相交。ST_MultiPolygon 不仅具有从超类 ST_Geometry 继承的其他属性,还具有面积。ST_MultiPolygon 用于定义诸如森林地层或不毗连的地块(如太平洋岛链)等要素。
下图提供 ST_MultiPolygon 的示例:(1) 是具有两个 ST_Polygon 元素的 ST_MultiPolygon。边界由两个外部环和三个内部环定义。(2) 是具有两个 ST_Polygon 元素的 ST_MultiPolygon。边界由两个外部环和两个内部环定义。两个 ST_Polygon 元素在切点相交。
适用于 ST_MultiPolygon 的函数包括 ST_Area、ST_Centroid 和 ST_PointOnSurface。
ST_Area 函数以双精度数形式返回 ST_MultiPolygon 的 ST_Polygon 元素的累积 ST_Area。
ST_Centroid 函数以 ST_Point 形式返回 ST_MultiPolygon 包络矩形的中心。
ST_PointOnSurface 函数评估 ST_MultiPolygon,并返回保证是其中一个 ST_Polygon 元素表面的法线的 ST_Point。
多部分几何中简单几何的数目
多部分几何由各种几何组成。
您可能想要确定多部分几何中各种几何的数目,例如 ST_MultiPoint、ST_MultiLineString 和 ST_MultiPolygon 的数目。为此,请使用 ST_NumGeometries 谓词函数。此函数返回几何集合中各种元素的计数。
可以使用 ST_GeometryN 函数确定多部分几何中位置 N 处存在哪种几何;N 是您为此函数提供的数值。例如,如果您想要返回多点几何的第三个点,则可以在执行此函数时输入“3”。
内部、边界、外部
所有几何均在空间中占据由其内部、边界和外部所限定的位置。几何的外部是未被几何占据的所有空间。几何的内部是被几何占据的空间。几何的边界是介于几何的内部和外部之间的位置。子类型可直接继承内部和外部属性;而边界属性则因内部或外部而各不相同。
使用 ST_Boundary 函数可确定源 ST_Geometry 的边界。有关语法和示例的信息,请参阅 ST_Boundary。
简单与非简单
一些 ST_Geometry 的子类型始终是简单的,如 ST_Point 或 ST_Polygon。然而,子类型 ST_LineString、ST_MultiPoint 和 ST_MultiLineString 既可以是简单的,也可以是非简单的。如果它们遵守所有对其施加的拓扑规则,则它们是简单的;如果不遵守,则是非简单的。
以下是其中一些拓扑规则:
- 如果 ST_LineString 内部没有相交,则其为简单的;如果相交,则为非简单的。
- 如果 ST_MultiPoint 中的元素均没有占据相同的坐标空间(即 x,y 坐标相同),则它是简单的;如果有,则是非简单的。
- 如果 ST_MultiLineString 中的任何元素内部均没有与自身内部相交,则它是简单的;如果元素内部确实相交,则它是非简单的。
ST_IsSimple 谓词函数用于确定 ST_LineString、ST_MultiPoint 或 ST_MultiLineString 是简单的还是非简单的。ST_IsSimple 处理 ST_Geometry,如果 ST_Geometry 是简单的,则返回 1 (TRUE);如果不是,则返回 0 (FALSE)。有关使用该函数的语法和示例的信息,请参阅 ST_IsSimple。
空与非空
如果几何没有任何点,则该几何为空。空几何具有空的包络矩形、边界、内部和外部。空几何始终是简单的。空线串和空多线串的长度为 0。空面和空多面的面积为 0。
ST_IsEmpty 谓词函数用于确定几何是否为空。该函数分析 ST_Geometry,如果 ST_Geometry 为空,则返回 1 (TRUE);如果不为空,则返回 0 (FALSE)。有关使用该函数的语法和示例,请参阅 ST_IsEmpty。
IsClosed 和 IsRing
线串几何可以为闭合的和/或为环。线串可以为闭合的并且不为环。使用 ST_IsClosed 谓词函数可确定线串是否闭合;如果线串的起点与终点相交,则 ST_IsClosed 返回 TRUE。环是闭合且简单的线串。ST_IsRing 谓词函数可用于测试线串是否确实为环;如果线串是闭合且简单的,则该函数返回 TRUE。
有关语法和示例的信息,请参阅 ST_IsClosed 和 ST_IsRing。
包络矩形
每个几何都具有包络矩形。几何的包络矩形是由最小和最大 x,y 坐标所形成的边界几何。对于点几何,因为最小和最大 x,y 坐标相同,所以围绕这些坐标可创建矩形或包络矩形。对于线几何,线的端点表示包络矩形的两侧,另外两侧正好在线的上方和下方创建。
ST_Envelope 函数处理 ST_Geometry 并返回表示源 ST_Geometry 包络矩形的 ST_Geometry。有关语法和示例,请参阅 ST_Envelope。
要查找几何的 x、y 坐标的最小值和最大值,请使用函数 ST_MinX、ST_MinY、ST_MaxX 和 ST_MaxY。
空间参考系统
空间参考系统可识别每个几何的坐标变换矩阵,其由坐标系、分辨率和容差组成。
地理数据库已知的所有空间参考系统都存储在 spatial_references 表中。
以下两个函数用于获取与几何的空间参考系统有关的信息:ST_SRID 和 ST_EqualSRS。
ST_SRID 函数处理 ST_Geometry 并以整数形式返回其空间参考标识符。
ST_EqualSRS 函数确定两个不同的要素类的空间参考系统是否相同。
有关这些函数的语法和示例,请参阅 ST_SRID 和 ST_EqualSRS。
您可以在主题空间参考的属性中找到有关空间参考的详细信息。使用 IBM DBMS 时,请参阅《IBM DB2 Spatial Extender 和 Geodetic Extender 用户指南和参考》或《IBM Informix Spatial DataBlade 模块用户指南》。
要素大小(仅限 PostgreSQL)
要素(表中的空间记录)会占据一部分存储空间(以字节存储)。可以使用 ST_GeoSize 函数来确定表中每个要素的大小。