使用最小边界矩形的空间关系函数
MySQL 提供了一些特有的函数来测试两个几何体 g1 和 g2 的最小边界矩形(MBR)之间的关系。返回值 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 错误(在 MySQL 8.0.12 之前是 ER_LONGITUDE_OUT_OF_RANGE 错误)。
■如果纬度值不在 [−90, 90] 范围内,则会出现 ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE 错误(在 MySQL 8.0.12 之前是 ER_LATITUDE_OUT_OF_RANGE 错误)。
所示范围以度数表示。如果SRS使用其他单位,则范围使用其单位中相应的值。由于浮点运算,精确的范围限制略有偏差。
● 其他情况返回值是非 NULL。
以下这些 MBR 函数可用于测试几何关系:
● MBRContains(g1, g2)
返回 1 或 0 以指示 g1 的最小边界矩形是否包含 g2 的最小边界矩形。此测试与 MBRWithin() 相反。
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() 相反。
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() 相反。
● MBRDisjoint(g1, g2)
返回1或0以指示两个几何值g1和g2的最小边界矩形是否不相交。
● MBREquals(g1, g2)
返回1或0以指示两个几何值g1和g2的最小边界矩形是否相同。
● MBRIntersects(g1, g2)
返回1或0以指示两个几何值g1和g2的最小边界矩形是否相交。
● MBROverlaps(g1, g2)
两个几何值如果相交,并且它们相交的结果是相同维度的几何值,但不等于任何参数给定的几何值,那么它们在空间上重叠。
此函数返回1或0以指示两个几何值g1和g2的最小边界矩形是否重叠。
● MBRTouches(g1, g2)
如果两个几何值的内部不相交,但其中一个几何值的边界与另一个几何值的边界或内部相交,则两个几何值在空间上是接触的。
此函数返回1或0以指示g1和g2两个几何值的最小边界矩形是否接触。
● MBRWithin(g1, g2)
返回1或0以指示g1的最小边界矩形是否在g2的最小边界矩形内。此测试与 MBRContains() 相反。
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 |
+--------------------+--------------------+
复制
官方网址:
https://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mbr.html