MariaDB ST_DISJOINT() 函数的基础用法与实例

MariaDB ST_DISJOINT() 函数用来检测两个几何对象是否不相交。如果两个几何对象不相交,则返回 1 或 true;如果两个几何对象相交,则返回 0 或 false。

发布于

MariaDB ST_DISJOINT() 函数用来检测两个几何对象是否不相交。如果两个几何对象不相交,则返回 1 或 true;如果两个几何对象相交,则返回 0 或 false。该函数常用于判断两个空间对象是否位于不同的区域。

语法

MairaDB ST_DISJOINT() 函数的语法如下:

ST_DISJOINT(geom1, geom2)

参数说明:

  • geom1:接受任意几何值。
  • geom2:接受任意几何值。

返回值:

  • 如果两个几何对象不相交,返回 1 或 true。
  • 如果两个几何对象相交,返回 0 或 false。
  • 如果任一几何对象为空值,则返回 NULL。

实例

检测两个点是否不相交

本实例演示了如何检测两个点是否不相交。

SELECT ST_DISJOINT(POINT(1, 1), POINT(2, 2)) AS disjoint;

以下是该语句的输出:

+----------+
| disjoint |
+----------+
|        1 |
+----------+

可以看到,两个点不相交,所以返回 1 或 true。

检测点与线是否不相交

本实例演示了如何检测一个点与一条线是否不相交。

DROP TABLE IF EXISTS lines_table;
CREATE TABLE lines_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    ln LINESTRING NOT NULL
);
INSERT INTO lines_table (ln) VALUES (LINESTRING(POINT(0, 0), POINT(2, 2))), (LINESTRING(POINT(3, 3), POINT(4, 4)));

SELECT id, ST_DISJOINT(ln, POINT(1, 1)) AS disjoint FROM lines_table;

以下是该语句的输出:

+----+----------+
| id | disjoint |
+----+----------+
|  1 |        0 |
|  2 |        1 |
+----+----------+

可以看到,第一条线与点 (1, 1) 相交,所以返回 0 或 false;第二条线与点 (1, 1) 不相交,所以返回 1 或 true。

检测点与面是否不相交

本实例演示了如何检测一个点与一个面是否不相交。

DROP TABLE IF EXISTS polygons_table;
CREATE TABLE polygons_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    poly POLYGON NOT NULL
);
INSERT INTO polygons_table (poly) VALUES (POLYGON(LINESTRING(POINT(0, 0), POINT(0, 3), POINT(3, 3), POINT(3, 0), POINT(0, 0)))), (POLYGON(LINESTRING(POINT(4, 4), POINT(4, 7), POINT(7, 7), POINT(7, 4), POINT(4, 4))));

SELECT id, ST_DISJOINT(poly, POINT(1, 1)) AS disjoint FROM polygons_table;

以下是该语句的输出:

+----+----------+
| id | disjoint |
+----+----------+
|  1 |        0 |
|  2 |        1 |
+----+----------+

可以看到,第一个面与点 (1, 1) 相交,所以返回 0 或 false;第二个面与点 (1, 1) 不相交,所以返回 1 或 true。

检测两个面是否不相交

本实例演示了如何检测两个面是否不相交。

DROP TABLE IF EXISTS polygons_table;
CREATE TABLE polygons_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    poly POLYGON NOT NULL
);
INSERT INTO polygons_table (poly) VALUES (POLYGON(LINESTRING(POINT(0, 0), POINT(0, 3), POINT(3, 3), POINT(3, 0), POINT(0, 0)))), (POLYGON(LINESTRING(POINT(1, 1), POINT(1, 4), POINT(4, 4), POINT(4, 1), POINT(1, 1))));

DROP TABLE IF EXISTS polygons2;
CREATE TABLE polygons2 (
    id INT PRIMARY KEY AUTO_INCREMENT,
    poly POLYGON NOT NULL
);
INSERT INTO polygons2 (poly) VALUES (POLYGON(LINESTRING(POINT(4, 4), POINT(4, 7), POINT(7, 7), POINT(7, 4), POINT(4, 4)))), (POLYGON(LINESTRING(POINT(5, 5), POINT(5, 6), POINT(6, 6), POINT(6, 5), POINT(5, 5))));

SELECT p1.id, p2.id, ST_DISJOINT(p1.poly, p2.poly) AS disjoint
FROM polygons_table p1
CROSS JOIN polygons2 p2;

以下是该语句的输出:

+----+----+----------+
| id | id | disjoint |
+----+----+----------+
|  1 |  1 |        1 |
|  2 |  1 |        0 |
|  1 |  2 |        1 |
|  2 |  2 |        1 |
+----+----+----------+

相关函数

以下是几个与 MairaDB ST_DISJOINT() 相关的几个函数:

  • MariaDB ST_Intersects() 函数用来检测两个几何对象是否相交。
  • MariaDB ST_Crosses() 函数用来检测两个几何对象是否相交,并且交集是 0 维的。
  • MariaDB ST_Touches() 函数用来检测两个几何对象是否相交,并且交集是 0 维的边界。
  • MariaDB ST_Overlaps() 函数用来检测两个几何对象是否相交,并且交集不是 0 维的边界。

结论

MariaDB ST_DISJOINT() 函数是一个非常有用的函数,可以检测两个几何对象是否不相交。通过本文的实例,我们学习了如何使用该函数检测不同类型的几何对象是否不相交,以及一些异常情况下的返回值。同时,我们还了解了一些与该函数相关的其他几何函数。掌握这些函数有助于我们更好地处理和操作空间数据。