MySQL 提供了一些 MySQL 特定的函数,用于测试两个几何 g1
和 g2
的最小边界矩形 (MBR) 之间的关系。返回值 1 和 0 分别表示真和假。
点的边界框被解释为一个既是边界又是内部的点。
直线水平线或垂直线的边界框被解释为一条线,其中线的内部也是边界。端点是边界点。
如果任何参数是几何集合,则这些参数的内部、边界和外部是集合中所有元素的并集。
本节中的函数可以检测笛卡尔或地理空间参考系统 (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
错误。如果纬度值不在范围 [−90, 90] 中,则会发生
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
错误。
显示的范围以度为单位。如果 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()
按本节简介中所述处理其参数。如果两个几何图形相交,并且它们的交集形成一个与给定几何图形维度相同但不同于给定几何图形的几何图形,则它们在空间上重叠。
此函数返回 1 或 0,以指示两个几何图形
g1
和g2
的最小边界矩形是否重叠。MBROverlaps()
处理其参数的方式如本节开头所述。如果两个几何图形的内部不相交,但其中一个几何图形的边界与另一个几何图形的边界或内部相交,则它们在空间上接触。
此函数返回 1 或 0,以指示两个几何图形
g1
和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 | +--------------------+--------------------+