14.16.9.2 使用最小边界矩形空间关系函数
MySQL 提供了多个 MySQL 专用函数,用于测试两个几何体 g1 和 g2 之间的最小边界矩形空间关系。返回值 1 和 0 分别表示真和假。
点的边界框被解释为点的同时是边界和内部。
水平或垂直线的边界框被解释为线,其中线的内部也是边界。端点是边界点。
如果任何参数是几何集合,那么这些参数的内部、边界和外部是这些集合中的所有元素的并集。
本节中的函数检测其参数是否在笛卡尔或地理空间参考系统(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对于空geometry参数。 -
返回两个几何体
g1和g2的最小边界矩形是否相交。MBRIntersects()根据本节介绍中描述处理其参数。 -
两个几何体
g1和g2如果它们相交,并且它们的交集结果是同维度的,但不是给定的几何体中的任何一个,则它们spatially overlap。该函数返回1或0,指示两个几何体
g1和g2的最小边界矩形是否相交。MBROverlaps()根据本节介绍中描述处理其参数。 -
两个几何体
g1和g2如果它们的内部不相交,但它们的边界之一与另一个几何体的边界或内部相交,则它们spatially touch。该函数返回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 | +--------------------+--------------------+