mysql函数MBRDISJOINT()怎么用?
MBRDISJOINT()函数用于判断两个MySQL空间对象是否相离(没有交点)。它的语法如下:
MBRDISJOINT(g1, g2)
其中,g1和g2表示两个MySQL空间对象,可以是点、线、面等不同维度的几何对象。
函数返回值为0表示g1和g2相交,返回值为1表示g1和g2相离。
示例:
假设有一个表格test,其中有id和geom两个字段,其中geom字段存储了一组多边形数据。现在我们要判断geom字段中的每个多边形是否和另一个多边形相离。可以使用如下SQL语句:
sql
SELECT
a.id, b.id, MBRDISJOINT(a.geom, b.geom) AS disjoint
FROM
test a, test b
WHERE
a.id <> b.id
在这个查询中,我们使用了两个表格自连接,然后在WHERE语句中排除了同一行数据的比较。最后使用MBRDISJOINT()函数计算geom字段中的每个多边形和其他多边形是否相离。
完整代码如下:
sql
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`geom` geometry NOT NULL,
PRIMARY KEY (`id`),
SPATIAL KEY `geom_idx` (`geom`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `test` (`id`, `geom`) VALUES
(1, ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))')),
(2, ST_GeomFromText('POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))')),
(3, ST_GeomFromText('POLYGON((1 1, 2 2, 2 1, 1 1))')),
(4, ST_GeomFromText('POLYGON((3 3, 4 3, 4 4, 3 4, 3 3))'));
SELECT
a.id, b.id, MBRDISJOINT(a.geom, b.geom) AS disjoint
FROM
test a, test b
WHERE
a.id <> b.id
执行结果如下:
+----+----+----------+
| id | id | disjoint |
+----+----+----------+
| 1 | 2 | 1 |
| 1 | 3 | 0 |
| 1 | 4 | 1 |
| 2 | 1 | 1 |
| 2 | 3 | 1 |
| 2 | 4 | 1 |
| 3 | 1 | 0 |
| 3 | 2 | 1 |
| 3 | 4 | 1 |
| 4 | 1 | 1 |
| 4 | 2 | 1 |
| 4 | 3 | 1 |
+----+----+----------+