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