暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的函数和运算符 - 空间分析函数 - 测试几何对象之间空间关系的函数 - 使用最小边界矩形的空间关系函数

林员外聊编程 2021-08-23
181

使用最小边界矩形的空间关系函数

 

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以指示两个几何值g1g2的最小边界矩形是否不相交。

 

 MBREquals(g1, g2)

 

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

 

 MBRIntersects(g1, g2)

 

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

 

 MBROverlaps(g1, g2)

 

两个几何值如果相交,并且它们相交的结果是相同维度的几何值,但不等于任何参数给定的几何值,那么它们在空间上重叠。

 

此函数返回1或0以指示两个几何值g1g2的最小边界矩形是否重叠。

 

 MBRTouches(g1, g2)

 

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

 

此函数返回1或0以指示g1g2两个几何值的最小边界矩形是否接触。

 

 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


文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论