Documentation Home

12.17.9.2 使用最小外接矩形的空间关系函数

MySQL 提供了几个 MySQL 特定的函数来测试两个几何图形的最小边界矩形 (MBR)g1g2. 返回值 1 和 0 分别表示 true 和 false。

点的边界框被解释为既是边界又是内部的点。

直线水平或垂直线的边界框被解释为线的内部也是边界的线。端点是边界点。

如果任何参数是几何集合,则这些参数的内部、边界和外部是集合中所有元素的并集。

本节中的函数检测笛卡尔或地理空间参考系统 (SRS) 中的参数,并返回适合 SRS 的结果。

除非另有说明,本节中的函数按如下方式处理它们的几何参数:

  • 如果任何参数是NULL或 空几何,则返回值为NULL

  • 如果任何几何参数不是语法上格式正确的几何, ER_GIS_INVALID_DATA则会发生错误。

  • 如果任何几何参数是未定义空间参考系统 (SRS) 中语法上格式正确的几何, ER_SRS_NOT_FOUND则会发生错误。

  • 对于采用多个几何参数的函数,如果这些参数不在同一个 SRS 中, ER_GIS_DIFFERENT_SRIDS则会发生错误。

  • 如果任何参数在几何上无效,则结果为真或假(未定义哪个),或者发生错误。

  • 对于地理 SRS 几何参数,如果任何参数的经度或纬度超出范围,则会发生错误:

    显示的范围以度为单位。如果 SRS 使用另一个单位,则范围使用其单位中的相应值。由于浮点运算,确切的范围限制略有偏差。

  • 否则,返回值为非NULL

这些 MBR 函数可用于测试几何关系:

  • MBRContains(g1, g2)

    返回 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 |
    +----------------------+--------------------+
  • MBRCoveredBy(g1, g2)

    返回 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 |
    +--------------------+-----------------------+
  • MBRCovers(g1, g2)

    返回 1 或 0,表示 的最小外接矩形是否g1覆盖 的最小外接矩形g2。这测试相反的关系作为 MBRCoveredBy()。有关示例,请参见说明MBRCoveredBy()

    MBRCovers()如本节介绍中所述处理其参数。

  • MBRDisjoint(g1, g2)

    返回 1 或 0 以指示两个几何的最小边界矩形是否 g1g2相交(不相交)。

    MBRDisjoint()如本节介绍中所述处理其参数。

  • MBREquals(g1, g2)

    返回 1 或 0 表示两个几何图形的最小外接矩形是否 g1相同 g2

    MBREquals()如本节介绍中所述处理其参数,除了它不返回NULL空几何参数。

  • MBRIntersects(g1, g2)

    返回 1 或 0 以指示两个几何图形的最小外接矩形是否 g1相交 g2

    MBRIntersects()如本节介绍中所述处理其参数。

  • MBROverlaps(g1, g2)

    如果两个几何图形相交并且它们的相交导致具有相同维度但不等于任何给定几何图形的几何图形,则它们在 空间上重叠。

    g1此函数返回 1 或 0 以指示两个几何图形的 最小外接矩形是否 g2重叠。

    MBROverlaps()如本节介绍中所述处理其参数。

  • MBRTouches(g1, g2)

    如果两个几何体的内部不相交,但其中一个几何体的边界与另一个几何体的边界或内部相交,则 两个几何体在空间上接触。

    g1此函数返回 1 或 0 以指示两个几何图形的 最小边界矩形是否相 g2触。

    MBRTouches()如本节介绍中所述处理其参数。

  • MBRWithin(g1, g2)

    返回 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 |
    +--------------------+--------------------+