使用最小边界矩形的空间关系函数
MySQL提供了几个特定于MySQL的函数,用于测试g1
和的两个几何的最小边界矩形(MBR)之间的关系g2
。返回值1和0分别表示true和false。
点的边界框被解释为既是边界又是内部的点。
直线或水平直线的边界框解释为直线,直线的内部也是边界。端点是边界点。
如果任何参数是几何集合,则这些参数的内部,边界和外部将是集合中所有元素的并集。
本节中的函数检测笛卡尔或地理空间参考系统(SRS)中的自变量,并返回适合于SRS的结果。
除非另有说明,否则本节中的函数将按以下方式处理其参数:
- 如果任何参数为
NULL
或为空几何,则返回值为NULL
。 - 如果任何几何参数都不是语法上格式正确的几何,
ER_GIS_INVALID_DATA
则会发生错误。 - 如果任何几何参数都引用了未定义的空间参考系统(SRS),
ER_SRS_NOT_FOUND
则会发生错误。 - 对于带有多个几何参数的函数,如果这些参数不具有相同的SRID,
ER_GIS_DIFFERENT_SRIDS
则会发生错误。 - 如果任何参数在几何上是无效的,则结果为true或false(不确定哪个),否则将发生错误。
对于地理SRS几何参数,如果任何参数的经度或纬度超出范围,则会发生错误:
- 如果经度值不在(-180,180]范围内,
ER_LONGITUDE_OUT_OF_RANGE
则会发生错误。 - 如果纬度值不在[-90,90]范围内,
ER_LATITUDE_OUT_OF_RANGE
则会发生错误。
显示的范围以度为单位。如果SRS使用其他单位,则范围使用其单位中的相应值。精确的范围限制由于浮点运算而略有不同。
- 如果经度值不在(-180,180]范围内,
- 否则,返回值为non-
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以指示两个几何的最小边界矩形
g1
和g2
不相交(不相交)。MBRDisjoint()
按照本节简介中所述处理其参数。MBREquals(g1,g2)
返回1或0以指示两个几何的
g1
和的最小边界矩形是否g2
相同。MBREquals()
按照本节简介中的描述处理其参数,不同之处在于它不会NULL
为空的几何参数返回。MBRIntersects(g1,g2)
返回1或0,以指示最低是否界定两个几何的矩形
g1
和g2
相交。MBRIntersects()
按照本节简介中所述处理其参数。MBROverlaps(g1,g2)
如果两个几何形状相交,则它们在空间上重叠,并且它们的相交会导致尺寸相同但不等于任何给定几何形状的几何形状。
此函数返回1或0,以指示最低是否界定两个几何的矩形
g1
和g2
重叠。MBROverlaps()
按照本节简介中所述处理其参数。MBRTouches(g1,g2)
如果两个几何的内部不相交,则两个几何在空间上接触,但是其中一个几何的边界与另一个的边界或内部相交。
此函数返回1或0,以指示最低是否界定两个几何的矩形
g1
和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 | +-------------------- +-------------------- +