前面几节介绍了三种 Spatial 函数:
本节介绍另外三种函数:
几种 Spatial 函数返回关于地形互相相关或互相比较的方式的信息。这些函数 (称作谓词)大多数是布尔函数。 本节先概括地描述这些谓词,然后分别讨论每个函数。
若比较符合该谓词函数的标准, 则该函数返回 1 (TRUE);若比较失败,则该函数返回 0 (FALSE)。 测试 Spatial 关系的谓词比较类型或维数可能不同的几何图形对。
谓词比较提交的几何图形的 X 和 Y 坐标。 忽略 Z 坐标和度量单位(若有的话)。这样就能够将具有 Z 坐标或度量单位的几何图形与没有 Z 坐标或度量单位的几何图形进行比较。
维数扩展 9 相交模型 (DE-9IM) 1 是一种数学方法, 它定义不同类型和维数的几何图形之间的成对 Spatial 关系。 此模型将所有类型的几何图形之间的 Spatial 关系表示为其内部、边界和外部的成对相交, 并考虑产生的交集的维数。
给定几何图形 a 和 b: I(a)、B(a) 和 E(a) 表示 a 的内部、边界和外部。 I(b)、B(b) 和 E(b) 表示 b 的内部、边界和外部。 I(a)、B(a) 和 E(a) 与 I(b)、B(b) 和 E(b) 的交集产生 3 x 3 矩阵。 每个交集可产生具有不同维数的几何图形。例如, 两个多边形的边界交集由一个点和一条线条组成, 此时 dim 函数返回的最大维数为 1。
dim 函数返回值 -1、0、1 或 2。-1 对应空集或 dim(null),
当找不到交集时,返回该值。
|
内部
|
边界
|
外部
|
内部
|
dim(I(a) &intersect. I(b))
|
dim(I(a) &intersect. B(b))
|
dim(I(a) &intersect. E(b))
|
边界
|
dim(B(a) &intersect. I(b))
|
dim(B(a) &intersect. B(b))
|
dim(B(a) &intersect. E(b))
|
外部
|
dim(E(a) &intersect. I(b))
|
dim(E(a) &intersect. B(b))
|
dim(E(a) &intersect. E(b))
|
通过将谓词的结果与表示 DE-9lM 的可接受值的模式矩阵进行比较, 可以了解或验证 Spatial 关系谓词的结果。
例如,ST_Within 谓词的如下模式矩阵包括值 T、F 和 *。
ST_Within 谓词的用于几何图形组合的模式矩阵。 | ||||
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
T
|
*
|
F
|
|
边界
|
*
|
*
|
F
|
|
外部
|
*
|
*
|
*
|
当两个几何图形的内部相交, 且 a 的内部和边界与 b 的外部不相交时, ST_Within 谓词返回 TRUE。 所有其他条件都无关紧要。
每个谓词至少有一个模式矩阵, 但有些谓词需要多个模式矩阵,以便描述各种几何图形类型组合的关系。
若同一类型的两个几何图形具有相同的 X,Y 坐标值, ST_Equals 返回 1 (TRUE)。
图 14. ST_Equals. 若几何图形具有匹配的 X,Y 坐标,则它们相等。
![]() |
相等 DE-9IM 模式矩阵确保内部相交, 并且任一几何图形的内部或边界均不与对方的外部相交。 | ||||
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
T
|
*
|
F
|
|
边界
|
*
|
*
|
F
|
|
外部
|
F
|
F
|
*
|
有关更多信息,参见ST_Equals。
ST_OrderingEquals 比较两个几何图形, 若这两个几何图形相等且坐标次序相同,返回 1 (TRUE); 否则返回 0 (FALSE)。有关更多信息,参见ST_OrderingEquals。
若两个几何图形的交集是空集, 则 ST_Disjoint 返回 1 (TRUE)。
图 15. ST_Disjoint. 若几何图形不以任何方式互相相交, 则称它们不相交。
![]() |
ST_Disjoint 谓词的模式矩阵只表明任一几何图形的内部或边界均不相交。 | ||||
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
F
|
F
|
*
|
|
边界
|
F
|
F
|
*
|
|
外部
|
*
|
*
|
*
|
有关更多信息,参见ST_Disjoint。
若相交不产生空集, 则 ST_Intersects 返回 1 (TRUE)。Intersects 返回的结果与 ST_Disjoint 的结果正好相反。
若下列任何模式矩阵的条件返回 TRUE,
则 ST_Intersects 谓词返回 TRUE。
若两个几何图形的内部相交, 则 ST_Intersects 谓词返回 TRUE。 | ||||
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
T
|
*
|
*
|
|
边界
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
若第一个几何图形的边界与第二个几何图形的边界相交, 则 ST_Intersects 谓词返回 TRUE。 | ||||
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
*
|
T
|
*
|
|
边界
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
若第一个几何图形的边界与第二个几何图形的内部相交, 则 ST_Intersects 谓词返回 TRUE。 | ||||
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
*
|
*
|
*
|
|
边界
|
T
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
若任一几何图形的边界相交, 则 ST_Intersects 谓词返回 TRUE。 | ||||
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
*
|
*
|
*
|
|
边界
|
*
|
T
|
*
|
|
外部
|
*
|
*
|
*
|
有关更多信息,参见ST_Intersects。
若两个几何图形的包络相交,则此函数返回 1 (TRUE)。 它是一个便利函数,能够高效地实现 ST_Intersects (ST_Envelope(g1),ST_Envelope(g2))。有关更多信息, 参见EnvelopesIntersect。
若两个几何图形的公共点均不与这两个几何图形的内部相交, 则 ST_Touches 返回 1 (TRUE)。至少有一个几何图形必须为线条、 多边形、多线条或复合多边形。
![]() |
这些模式矩阵显示,当几何图形的内部不相交,
且任一几何图形的边界与另一几何图形的内部或边界相交时,
则 ST_Touches 谓词返回 TRUE。
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
F
|
T
|
*
|
|
边界
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
F
|
*
|
*
|
|
边界
|
T
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
F
|
*
|
*
|
|
边界
|
*
|
T
|
*
|
|
外部
|
*
|
*
|
*
|
有关更多信息,参见ST_Touches。
ST_Overlaps 比较具有相同维数的两个几何图形。 若这两个几何图形的交集产生与这两个几何图形不同但具有相同维数的几何图形, 则该函数返回 1 (TRUE)。
![]() |
表 50 中的模式矩阵适用于多边形/多边形、
多个点/多个点以及复合多边形/复合多边形重叠。对于这些组合,
若两个几何图形与对方内部和外部相交,则重叠谓词返回 TRUE。
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
T
|
*
|
T
|
|
边界
|
*
|
*
|
*
|
|
外部
|
T
|
*
|
*
|
表 51 中的模式矩阵适用于线条/线条和多线条/多线条重叠。
在此情况下,几何图形的交集必须产生维数为 1 的几何图形(另一条线条)。若内部的交集的维数为 1,
则 ST_Overlaps 谓词将返回 FALSE,而 ST_Crosses 谓词将返回 TRUE。
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
1
|
*
|
T
|
|
边界
|
*
|
*
|
*
|
|
外部
|
T
|
*
|
*
|
有关更多信息,参见ST_Overlaps。
若交集产生的几何图形的维数比两个源几何图形的最大维数小 1, 且交集在两个源几何图形的内部, 则 ST_Crosses 返回 1 (TRUE)。只对多个点/多边形、 多个点/线条、线条/线条、线条/多边形和线条/复合多边形比较, ST_Crosses 返回 1 (TRUE)。
![]() |
表 52 中的模式矩阵适用于多个点/线条、
多个点/多线条、多个点/多边形、多个点/复合多边形、
线条/多边形以及线条/复合多边形。该矩阵表明内部必须相交,
并且主几何图形 (a)
的内部必须与次几何图形 (b) 的外部相交。
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
T
|
*
|
T
|
|
边界
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
表 53 中的模式矩阵适用于线条/线条、
线条/多线条以及多线条/多线条。该矩阵表明内部交集的维数必须为 0
(相交于一个点)。若此交集的维数为 1(相交于一条线条),
则 ST_Crosses 谓词返回 FALSE;而 ST_Overlaps 谓词返回 TRUE。
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
0
|
*
|
*
|
|
边界
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
有关更多信息,参见ST_Crosses。
若第一个几何图形完全在第二个几何图形内, 则 ST_Within 返回 1 (TRUE)。ST_Within 返回的结果与 ST_Contains 的结果正好相反。
![]() |
ST_Within 谓词模式矩阵表明两个几何图形的内部必须相交,
且主几何图形 (a)
的内部不得与次几何图形 (b) 的外部相交。
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
T
|
*
|
F
|
|
边界
|
*
|
*
|
F
|
|
外部
|
*
|
*
|
*
|
有关更多信息,参见ST_Within。
若第二个几何图形完全被第一个几何图形包含, 则 ST_Contains 返回 1 (TRUE)。ST_Contains 谓词返回的结果与 ST_Within 谓词的结果正好相反。
![]() |
ST_Contains 谓词的模式矩阵表明两个几何图形的内部必须相交,
并且次几何图形 (b)
的内部和边界不得与主几何图形 (a) 的外部相交。
|
|
b
|
|
|
|
|
内部
|
边界
|
外部
|
a
|
内部
|
T
|
*
|
*
|
|
边界
|
*
|
*
|
*
|
|
外部
|
F
|
F
|
*
|
有关更多信息,参见ST_Contains。
ST_Relate 比较两个几何图形, 若这两个几何图形满足 DE-9IM 模式矩阵字符串指定的条件,则返回 1 (TRUE); 否则该函数返回 0 (FALSE)。有关更多信息,参见ST_Relate。
ST_Distance 函数报告两个不相交地形之间的最小距离。若地形相交, 该函数将报告 0 最小距离。
例如,ST_Distance 可报告飞行器在两个位置之间必须飞行的最短距离。 图 20举例说明这一点。
图 20. 两个城市之间的最小距离. ST_Distance 可将 Los Angeles 和 Chicago 两个位置的坐标作为输入, 并返回一个表示这两个位置之间的最小距离的值。
![]() |
有关更多信息,参见ST_Distance。
DB2 Spatial Extender 提供从现存几何图形生成新几何图形的谓词和转换函数。
ST_Intersection 函数返回两个几何图形的交集。 交集总是以集合的形式返回,该集合的维数是源几何图形的最小维数。例如, 对于与多边形相交的线,交集函数返回由该线条与多边形的内部和边界的公共部分构成的多线条。 若源线条与具有两个或多个不连续段的多边形相交,则该多线条包含多个线条。 若这些几何图形不相交,或者相交产生的维数小于两个源几何图形的维数, 则返回空几何图形。
图 21. ST_Intersection. ST_Intersection 函数的示例。
![]() |
有关更多信息,参见ST_Intersection。
ST_Difference 函数返回主几何图形的与次几何图形不相交的部分。这是空间的逻辑 “与非”。ST_Difference 函数只处理维数相同的几何图形, 并返回一个与源几何图形具有相同维数的集合。在源几何图形相等时, 返回空几何图形。
![]() |
有关更多信息,参见ST_Difference。
ST_Union 函数返回两个几何图形的并集。这是空间的逻辑 “或”。源几何图形必须具有相同的维数。 ST_Union 总是以集合的形式返回结果。
![]() |
有关更多信息,参见ST_Union。
ST_Buffer 函数通过在指定的距离环绕一个几何图形生成一个几何图形。 当缓冲主几何图形时, 或者当集合的元素足够近,以致所有缓冲多边形重叠时, 产生一个多边形。然而,当被缓冲的集合的元素之间距离足够远时, 将产生各自的缓冲多边形,此时 ST_Buffer 函数返回一个复合多边形。
![]() |
ST_Buffer 函数接受正距离和负距离, 然而,仅二维几何图形(多边形和复合多边形) 应用负缓冲距离。当源几何图形的维数小于 2 时 (除多边形或复合多边形之外的所有几何图形), 使用缓冲距离的绝对值。
一般来说,对于外部环,正缓冲距离生成总是远离源几何图形中心的多边形环; 负缓冲距离生成趋向该中心的多边形或复合多边形。 对于多边形或复合多边形的内部环,正缓冲距离生成趋向中心的缓冲环, 负缓冲距离生成远离中心的缓冲环。
缓冲过程合并重叠的多边形。当负距离超过多边形最大内部宽度的一半时, 将产生空几何图形。
有关更多信息,参见ST_Buffer。
对于具有度量单位的几何图形, 可通过 LocateAlong 函数找到特定度量单位的位置。LocateAlong 以多个点的形式返回该位置。若源几何图形的维数为 0(例如,点和多个点), 则需要精确匹配,并以多个点的形式返回具有匹配的度量单位值的那些点。然而, 对于维数大于 0 的源几何图形,该位置是内插值。例如, 若输入的度量单位值是 5.5,线条的顶点上的度量单位分别是 3、4、5、 6 和 7,则返回内插值点,该点在具有度量单位值 5 和 6 的两个顶点之间, 且距这两个顶点距离相等。
![]() |
有关更多信息,参见LocateAlong。
LocateBetween 函数从具有度量单位的源几何图形返回位于两个度量单位值之间的路径或位置的集合。 若源几何图形的维数为 0,则 LocateBetween 返回一个多点, 该多点包含其度量单位在两个源度量单位之间的所有点。 对于维数大于 0 的源几何图形,若可通过内插值得到一条路径, 则 LocateBetween 返回多线条;否则 LocateBetween 返回包含点位置的多个点。当 LocateBetween 不能通过内插值得到一条路径或找到度量单位之间的位置时, 则返回空点。LocateBetween 对几何图形执行包含搜索; 因此,几何图形的度量单位必须大于或等于度量单位下限且小于或等于度量单位上限。
![]() |
有关更多信息,参见LocateBetween。
ST_ConvexHull 函数返回至少具有三个顶点(构成凸形)的任何几何图形的凸形多边形。若几何图形的顶点不构成凸形, 则 ST_ConvexHull 返回空值。ST_ConvexHull 通常是棋盘形布置中用来由点集创建 TIN 网络的第一步。
![]() |
有关更多信息,参见ST_ConvexHull。
从线条生成多边形。有关更多信息,参见ST_Polygon。
DB2 Spatial Extender 支持三种 GIS 数据交换格式:
DB2 Spatial Extender 具有几个从文本说明生成几何图形的函数。
文本表示是 ASCII 字符串。它允许几何图形以 ASCII 文本形式进行交换。这些函数不需要定义任何特殊程序结构来映射二进制表示。因此, 可在 3GL 或 4GL 程序中使用它们。
ST_AsText 函数将现存几何图形值转换为文本表示。有关更多信息, 参见ST_AsText。
有关公认文本表示的更多信息,参见OGC 公认文本表示。
DB2 Spatial Extender 具有几个使用公认二进制 (WKB) 表示生成几何图形的函数。
公认二进制表示是连续的字节流。它允许在 ODBC 客户机和 SQL 数据库之间以二进制形式交换几何图形。这些几何图形函数需要定义 C 结构来映射二进制表示。因此,它们适用于 3GL 程序, 而不适用于 4GL 环境。
ST_AsBinary 函数将现存几何图形值转换为公认二进制表示。 有关更多信息,参见ST_AsBinary。
有关公认二进制表示的更多信息,参见OGC 公认二进制 (WKB) 表示。
DB2 Spatial Extender 具有几个使用 ESRI 形状表示生成几何图形的函数。ESRI 形状表示除支持文本和公认二进制表示支持的二维表示之外, 还支持 Z 坐标和度量单位。
这些函数的一般语法相同。第一个自变量是以 BLOB 数据类型形式输入的形状表示。第二个自变量是将给几何图形指定的 Spatial 参考系标识符。 例如,GeometryFromShape 函数的语法如下:
GeometryFromShape(shapegeometry, SRID)
要映射二进制表示,这些形状函数需要定义 C 结构。因此,它们适用于 3GL 程序, 而不适用于 4GL 环境。
AsBinaryShape 函数将几何图形值转换为 ESRI 形状表示。有关更多信息,参见AsBinaryShape。
有关形状表示的详细说明,参见ESRI 形状表示。