mysql函数MBRCONTAINS()怎么用?

MBRCONTAINS()函数用于判断一个矩形是否包含在另一个矩形中,在空间索引中使用较多。 函数语法如下: MBRCONTAINS(g1,g2) 其中g1和g2是两个矩形,可以是点、线或面。 函数返回值为1表示g1包含g2,为0表示不包含。 下面是一个完整示例: CREATE TABLE `..

MBRCONTAINS()函数用于判断一个矩形是否包含在另一个矩形中,在空间索引中使用较多。

函数语法如下:

MBRCONTAINS(g1,g2)

其中g1和g2是两个矩形,可以是点、线或面。

函数返回值为1表示g1包含g2,为0表示不包含。

下面是一个完整示例:

CREATE TABLE `spatialTest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `geom` geometry DEFAULT NULL,
  PRIMARY KEY (`id`),
  SPATIAL KEY `geom` (`geom`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

INSERT INTO `spatialTest` (`name`, `geom`) VALUES ('A', ST_GeomFromText('POINT(1 1)')), ('B', ST_GeomFromText('POINT(2 2)'));

SELECT MBRContains(Envelope(ST_Union(ST_Buffer(`geom`,1)))), `name`, `geom` FROM `spatialTest`;

在上面的示例中,我们首先创建一个名为spatialTest的空间表,包含了一个名为geom的空间字段。然后在表中插入了两个点,一个坐标为(1,1),另一个坐标为(2,2)。

在查询中,我们使用了ST_Buffer函数对空间数据进行了缓冲区分析,将点扩大为矩形。然后使用ST_Union函数将所有矩形合并,最后使用MBRContains函数判断合并后的矩形是否包含表中的每一个点。

查询结果如下:

+-------------------------------------------------+------+----------------+
| MBRContains(Envelope(ST_Union(ST_Buffer(`geom`,1)))) | name | geom           |
+-------------------------------------------------+------+----------------+
|                                               1 | A    | POINT(1 1)     |
|                                               1 | B    | POINT(2 2)     |
+-------------------------------------------------+------+----------------+

可以看到,MBRContains函数返回值均为1,表示合并后的矩形包含表中的所有点。

本文标题为:mysql函数MBRCONTAINS()怎么用?