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

MariaDB ST_OVERLAPS() 函数用来检测两个几何体是否相交。

发布于

MariaDB ST_OVERLAPS() 函数用来检测两个几何体是否相交。在进行空间分析时,这个函数能提供重要的信息支持。

语法

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

ST_OVERLAPS(g1, g2)
  • g1:一个几何体值。
  • g2:另一个几何体值。

该函数返回 1 或 0。如果两个输入的几何体相交,则返回 1;否则返回 0。注意,点不与任何几何体相交。

实例

检测两个线串是否相交

本实例将展示如何检测两个线串是否相交。

SET @ls1 = ST_GeomFromText('LINESTRING(0 0, 2 2)');
SET @ls2 = ST_GeomFromText('LINESTRING(1 1, 3 3)');
SELECT ST_OVERLAPS(@ls1, @ls2);

以下是该语句的输出:

+-------------------------+
| ST_OVERLAPS(@ls1, @ls2) |
+-------------------------+
|                       1 |
+-------------------------+

两条线串在点(1,1)和点(2,2)处相交,因此返回 1。

检测一个点和一个多边形是否相交

本实例将展示检测一个点和一个多边形是否相交的情况。

SET @pt = ST_GeomFromText('POINT(1 1)');
SET @poly = ST_GeomFromText('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))');
SELECT ST_OVERLAPS(@pt, @poly);

以下是该语句的输出:

+-------------------------+
| ST_OVERLAPS(@pt, @poly) |
+-------------------------+
|                       0 |
+-------------------------+

一个点不可能与一个多边形相交,因此返回 0。

检测一个点和一个线串是否相交

本实例将展示检测一个点和一个线串是否相交的情况。

SET @pt = ST_GeomFromText('POINT(1 1)');
SET @ls = ST_GeomFromText('LINESTRING(0 0, 2 2)');
SELECT ST_OVERLAPS(@pt, @ls);

以下是该语句的输出:

+-----------------------+
| ST_OVERLAPS(@pt, @ls) |
+-----------------------+
|                     0 |
+-----------------------+

这个点不可能与线串相交,因此返回 0。

检测两个多边形是否相交

本实例将展示检测两个多边形是否相交的情况。

SET @poly1 = ST_GeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))');
SET @poly2 = ST_GeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))');
SELECT ST_OVERLAPS(@poly1, @poly2);

以下是该语句的输出:

+-----------------------------+
| ST_OVERLAPS(@poly1, @poly2) |
+-----------------------------+
|                           1 |
+-----------------------------+

这两个多边形在一个区域内相交,因此返回 1。

使用空间索引

本实例将展示在使用空间索引时的情况。

DROP TABLE IF EXISTS geom_table;
CREATE TABLE geom_table (id INT PRIMARY KEY, g GEOMETRY NOT NULL, SPATIAL INDEX(g));
INSERT INTO geom_table (id, g) VALUES
    (1, ST_GeomFromText('LINESTRING(0 0, 2 2)')),
    (2, ST_GeomFromText('LINESTRING(1 1, 3 3)')),
    (3, ST_GeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))')),
    (4, ST_GeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))'));

SELECT t1.id, t2.id, ST_OVERLAPS(t1.g, t2.g)
FROM geom_table t1, geom_table t2
WHERE t1.id < t2.id;

以下是该语句的输出:

+----+----+-------------------------+
| id | id | ST_OVERLAPS(t1.g, t2.g) |
+----+----+-------------------------+
|  1 |  2 |                       1 |
|  1 |  3 |                       0 |
|  1 |  4 |                       1 |
|  2 |  3 |                       1 |
|  2 |  4 |                       0 |
|  3 |  4 |                       1 |
+----+----+-------------------------+

通过在表上建立空间索引,可以加速空间操作的执行速度。

相关函数

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

  • MariaDB ST_Crosses() 函数用来检测两个几何体是否相交,并且该交集是一个内部点。
  • MariaDB ST_Intersects() 函数用来检测两个几何体是否相交。
  • MariaDB ST_DISJOINT() 函数用来检测两个几何体是否不相交。

结论

ST_OVERLAPS() 是 MariaDB 中处理几何体相交操作时一个非常有用的函数。通过本文的介绍和实例,相信您已经对它的用法有了较为全面的了解。在进行空间分析时,掌握这些空间函数将会给您带来很大的帮助。