#### 12.17.9.2 使用最小边界矩形的空间关系函数 [](<>)[](<>) MySQL 提供了几个 MySQL 特定的函数来测试两个几何的最小边界矩形 (MBR) 之间的关系*`g1`*和*`g2`*.返回值 1 和 0 分别表示真和假。 点的边界框被解释为既是边界又是内部的点。 直线水平或垂直线的边界框被解释为线的内部也是边界的线。端点是边界点。 如果任何参数是几何集合,则这些参数的内部、边界和外部是集合中所有元素的并集。 本节中的函数检测笛卡尔或地理空间参考系统 (SRS) 中的参数,并返回适合 SRS 的结果。 除非另有说明,否则本节中的函数按如下方式处理其几何参数: - 如果有任何论据`空值`或空几何,返回值为`空值`. - 如果任何几何参数不是语法上格式良好的几何,则[`ER_GIS_INVALID_DATA`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_gis_invalid_data)发生错误。 - 如果任何几何参数是未定义的空间参考系统 (SRS) 中的语法结构良好的几何,则[`ER_SRS_NOT_FOUND`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_srs_not_found)发生错误。 - 对于采用多个几何参数的函数,如果这些参数不在同一个 SRS 中,则[`ER_GIS_DIFFERENT_SRIDS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_gis_different_srids)发生错误。 - 如果任何参数在几何上无效,则结果要么为真要么为假(未定义哪个),或者发生错误。 - 对于地理 SRS 几何参数,如果任何参数的经度或纬度超出范围,则会发生错误: - 如果经度值不在 (−180, 180] 范围内,则[`ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_geometry_param_longitude_out_of_range)发生错误([`ER_LONGITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_longitude_out_of_range)在 MySQL 8.0.12 之前)。 - 如果纬度值不在范围内[−90, 90], 一个[`ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_geometry_param_latitude_out_of_range)发生错误([`ER_LATITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_latitude_out_of_range)在 MySQL 8.0.12 之前)。 显示的范围以度为单位。如果 SRS 使用另一个单位,则范围使用其单位中的相应值。由于浮点运算,确切的范围限制略有偏差。 - 否则,返回值为非`空值`. 这些 MBR 函数可用于测试几何关系: - [](<>) [`MBR包含(*`g1`*, *`g2`*)`](spatial-relation-functions-mbr.html#function_mbrcontains) [](<>) 返回 1 或 0 表示是否最小外接矩形*`g1`*包含的最小边界矩形*`g2`*.这测试了相反的关系[`MBRWithin()`](spatial-relation-functions-mbr.html#function_mbrwithin). [`MBRContains()`](spatial-relation-functions-mbr.html#function_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 | +----------------------+--------------------+ ``` - [](<>) [`MBRCoveredBy(*`g1`*, *`g2`*)`](spatial-relation-functions-mbr.html#function_mbrcoveredby) [](<>) 返回 1 或 0 表示是否最小外接矩形*`g1`*被最小外接矩形覆盖*`g2`*.这测试了相反的关系[`MBRCovers()`](spatial-relation-functions-mbr.html#function_mbrcovers). [`MBRCoveredBy()`](spatial-relation-functions-mbr.html#function_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 | +--------------------+-----------------------+ ``` - [](<>) [`MBRCovers(*`g1`*, *`g2`*)`](spatial-relation-functions-mbr.html#function_mbrcovers) [](<>) 返回 1 或 0 表示是否最小外接矩形*`g1`*覆盖最小外接矩形*`g2`*.这测试了相反的关系[`MBRCoveredBy()`](spatial-relation-functions-mbr.html#function_mbrcoveredby).见描述[`MBRCoveredBy()`](spatial-relation-functions-mbr.html#function_mbrcoveredby)举些例子。 [`MBRCovers()`](spatial-relation-functions-mbr.html#function_mbrcovers)如本节介绍中所述处理其参数。 - [](<>) [`MBR不相交(*`g1`*, *`g2`*)`](spatial-relation-functions-mbr.html#function_mbrdisjoint) [](<>) 返回 1 或 0 表示两个几何图形的最小外接矩形*`g1`*和*`g2`*不相交(不相交)。 [`MBR不相交()`](spatial-relation-functions-mbr.html#function_mbrdisjoint)如本节介绍中所述处理其参数。 - [](<>) [`MBREquals(*`g1`*, *`g2`*)`](spatial-relation-functions-mbr.html#function_mbrequals) [](<>) 返回 1 或 0 表示两个几何图形的最小外接矩形*`g1`*和*`g2`*是相同的。 [`MBREquals()`](spatial-relation-functions-mbr.html#function_mbrequals)如本节介绍中所述处理其参数,除了它不返回`空值`对于空几何参数。 - [](<>) [`MBR 相交(*`g1`*, *`g2`*)`](spatial-relation-functions-mbr.html#function_mbrintersects) [](<>) 返回 1 或 0 表示两个几何图形的最小外接矩形*`g1`*和*`g2`*相交。 [`MBRIntersects()`](spatial-relation-functions-mbr.html#function_mbrintersects)如本节介绍中所述处理其参数。 - [](<>) [`MBR重叠(*`g1`*, *`g2`*)`](spatial-relation-functions-mbr.html#function_mbroverlaps) [](<>) 两种几何形状*空间重叠*如果它们相交并且它们的相交会导致几何尺寸相同但不等于给定几何形状中的任何一个。 该函数返回 1 或 0 表示两个几何的最小外接矩形*`g1`*和*`g2`*重叠。 [`MBROverlaps()`](spatial-relation-functions-mbr.html#function_mbroverlaps)如本节介绍中所述处理其参数。 - [](<>) [`MBRTouches(*`g1`*, *`g2`*)`](spatial-relation-functions-mbr.html#function_mbrtouches) [](<>) 两种几何形状*空间接触*如果它们的内部不相交,但其中一个几何图形的边界与另一个几何图形的边界或内部相交。 该函数返回 1 或 0 表示两个几何的最小外接矩形*`g1`*和*`g2`*触碰。 [`MBRTouches()`](spatial-relation-functions-mbr.html#function_mbrtouches)如本节介绍中所述处理其参数。 - [](<>) [`MBR内(*`g1`*, *`g2`*)`](spatial-relation-functions-mbr.html#function_mbrwithin) [](<>) 返回 1 或 0 表示是否最小外接矩形*`g1`*在最小边界矩形内*`g2`*.这测试了相反的关系[`MBRContains()`](spatial-relation-functions-mbr.html#function_mbrcontains). [`MBRWithin()`](spatial-relation-functions-mbr.html#function_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 | +--------------------+--------------------+ ```