MySQL 提供了几个 MySQL 特定的函数来测试两个几何图形的最小边界矩形 (MBR)g1
和
g2
. 返回值 1 和 0 分别表示 true 和 false。
点的边界框被解释为既是边界又是内部的点。
直线水平或垂直线的边界框被解释为线的内部也是边界的线。端点是边界点。
如果任何参数是几何集合,则这些参数的内部、边界和外部是集合中所有元素的并集。
本节中的函数检测笛卡尔或地理空间参考系统 (SRS) 中的参数,并返回适合 SRS 的结果。
除非另有说明,本节中的函数按如下方式处理它们的几何参数:
如果任何参数是
NULL
或 空几何,则返回值为NULL
。如果任何几何参数不是语法上格式正确的几何,
ER_GIS_INVALID_DATA
则会发生错误。如果任何几何参数是未定义空间参考系统 (SRS) 中语法上格式正确的几何,
ER_SRS_NOT_FOUND
则会发生错误。对于采用多个几何参数的函数,如果这些参数不在同一个 SRS 中,
ER_GIS_DIFFERENT_SRIDS
则会发生错误。如果任何参数在几何上无效,则结果为真或假(未定义哪个),或者发生错误。
对于地理 SRS 几何参数,如果任何参数的经度或纬度超出范围,则会发生错误:
如果经度值不在 (−180, 180] 范围内,
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
则会发生错误(ER_LONGITUDE_OUT_OF_RANGE
MySQL 8.0.12 之前)。如果纬度值不在 [−90, 90] 范围内,
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
则会发生错误(ER_LATITUDE_OUT_OF_RANGE
MySQL 8.0.12 之前)。
显示的范围以度为单位。如果 SRS 使用另一个单位,则范围使用其单位中的相应值。由于浮点运算,确切的范围限制略有偏差。
否则,返回值为非
NULL
。
这些 MBR 函数可用于测试几何关系:
返回 1 或 0 表示 的最小外接矩形是否
g1
包含 的最小外接矩形g2
。这测试相反的关系作为MBRWithin()
。MBRContains()
如本节介绍中所述处理其参数。mysql> SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'); mysql> SET @g2 = ST_GeomFromText('Point(1 1)'); mysql> SELECT MBRContains(@g1,@g2), MBRWithin(@g2,@g1); +----------------------+--------------------+ | MBRContains(@g1,@g2) | MBRWithin(@g2,@g1) | +----------------------+--------------------+ | 1 | 1 | +----------------------+--------------------+
返回 1 或 0,表示 的最小外接矩形是否被 的最小外接矩形
g1
覆盖g2
。这测试相反的关系作为MBRCovers()
。MBRCoveredBy()
如本节介绍中所述处理其参数。mysql> SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'); mysql> SET @g2 = ST_GeomFromText('Point(1 1)'); mysql> SELECT MBRCovers(@g1,@g2), MBRCoveredby(@g1,@g2); +--------------------+-----------------------+ | MBRCovers(@g1,@g2) | MBRCoveredby(@g1,@g2) | +--------------------+-----------------------+ | 1 | 0 | +--------------------+-----------------------+ mysql> SELECT MBRCovers(@g2,@g1), MBRCoveredby(@g2,@g1); +--------------------+-----------------------+ | MBRCovers(@g2,@g1) | MBRCoveredby(@g2,@g1) | +--------------------+-----------------------+ | 0 | 1 | +--------------------+-----------------------+
返回 1 或 0,表示 的最小外接矩形是否
g1
覆盖 的最小外接矩形g2
。这测试相反的关系作为MBRCoveredBy()
。有关示例,请参见说明MBRCoveredBy()
。MBRCovers()
如本节介绍中所述处理其参数。返回 1 或 0 以指示两个几何的最小边界矩形是否
g1
不g2
相交(不相交)。MBRDisjoint()
如本节介绍中所述处理其参数。返回 1 或 0 表示两个几何图形的最小外接矩形是否
g1
相同g2
。MBREquals()
如本节介绍中所述处理其参数,除了它不返回NULL
空几何参数。返回 1 或 0 以指示两个几何图形的最小外接矩形是否
g1
相交g2
。MBRIntersects()
如本节介绍中所述处理其参数。如果两个几何图形相交并且它们的相交导致具有相同维度但不等于任何给定几何图形的几何图形,则它们在 空间上重叠。
g1
此函数返回 1 或 0 以指示两个几何图形的 最小外接矩形是否g2
重叠。MBROverlaps()
如本节介绍中所述处理其参数。如果两个几何体的内部不相交,但其中一个几何体的边界与另一个几何体的边界或内部相交,则 两个几何体在空间上接触。
g1
此函数返回 1 或 0 以指示两个几何图形的 最小边界矩形是否相g2
触。MBRTouches()
如本节介绍中所述处理其参数。返回 1 或 0,表示 的最小外接矩形
g1
是否在 的最小外接矩形内g2
。这测试相反的关系作为MBRContains()
。MBRWithin()
如本节介绍中所述处理其参数。mysql> SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'); mysql> SET @g2 = ST_GeomFromText('Polygon((0 0,0 5,5 5,5 0,0 0))'); mysql> SELECT MBRWithin(@g1,@g2), MBRWithin(@g2,@g1); +--------------------+--------------------+ | MBRWithin(@g1,@g2) | MBRWithin(@g2,@g1) | +--------------------+--------------------+ | 1 | 0 | +--------------------+--------------------+