MariaDB ST_EQUALS() 函数的基础用法与实例
MariaDB ST_EQUALS()
函数用来检测两个几何对象是否相等。如果两个几何对象完全相同,则返回 1 或 true;否则返回 0 或 false。
MariaDB ST_EQUALS()
函数用来检测两个几何对象是否相等。如果两个几何对象完全相同,则返回 1 或 true;否则返回 0 或 false。该函数在进行几何对象比较时非常有用。
语法
MairaDB ST_EQUALS()
函数的语法如下:
ST_EQUALS(geom1, geom2)
参数说明:
geom1
:接受任意几何值,表示第一个几何对象。geom2
:接受任意几何值,表示第二个几何对象。
返回值:
- 如果输入的任一几何对象为空值,则返回 NULL。
- 如果两个几何对象完全相同,返回 1 或 true。
- 如果两个几何对象不同,返回 0 或 false。
实例
比较两个点是否相等
本实例演示了如何比较两个点是否相等。
SELECT ST_EQUALS(POINT(1, 1), POINT(1, 1)) AS equals_1,
ST_EQUALS(POINT(1, 1), POINT(2, 2)) AS equals_2;
以下是该语句的输出:
+----------+----------+
| equals_1 | equals_2 |
+----------+----------+
| 1 | 0 |
+----------+----------+
可以看到,第一个比较中两个点相等,所以返回 1 或 true;第二个比较中两个点不等,所以返回 0 或 false。
比较点与线是否相等
本实例演示了如何比较一个点与一条线是否相等。
DROP TABLE IF EXISTS points_table;
CREATE TABLE points_table (
id INT PRIMARY KEY AUTO_INCREMENT,
pt POINT NOT NULL
);
INSERT INTO points_table (pt) VALUES (POINT(0, 0)), (POINT(1, 1));
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(1, 1))), (LINESTRING(POINT(2, 2), POINT(3, 3)));
SELECT p.id, l.id, ST_EQUALS(p.pt, l.ln) AS equals
FROM points_table p
CROSS JOIN lines_table l;
以下是该语句的输出:
+----+----+--------+
| id | id | equals |
+----+----+--------+
| 1 | 1 | 0 |
| 2 | 1 | 0 |
| 1 | 2 | 0 |
| 2 | 2 | 0 |
+----+----+--------+
可以看到,点与线都是不相等的,所以返回 0 或 false。
比较两条线是否相等
本实例演示了如何比较两条线是否相等。
DROP TABLE IF EXISTS lines1;
CREATE TABLE lines1 (
id INT PRIMARY KEY AUTO_INCREMENT,
ln LINESTRING NOT NULL
);
INSERT INTO lines1 (ln) VALUES (LINESTRING(POINT(0, 0), POINT(1, 1))), (LINESTRING(POINT(1, 1), POINT(2, 2)));
DROP TABLE IF EXISTS lines2;
CREATE TABLE lines2 (
id INT PRIMARY KEY AUTO_INCREMENT,
ln LINESTRING NOT NULL
);
INSERT INTO lines2 (ln) VALUES (LINESTRING(POINT(0, 0), POINT(1, 1))), (LINESTRING(POINT(3, 3), POINT(4, 4)));
SELECT l1.id, l2.id, ST_EQUALS(l1.ln, l2.ln) AS equals
FROM lines1 l1
CROSS JOIN lines2 l2;
以下是该语句的输出:
+----+----+--------+
| id | id | equals |
+----+----+--------+
| 1 | 1 | 1 |
| 2 | 1 | 0 |
| 1 | 2 | 0 |
| 2 | 2 | 0 |
+----+----+--------+
可以看到,只有第一个比较中的两条线相等,所以返回 1 或 true;其他情况都返回 0 或 false。
比较点与面是否相等
本实例演示了如何比较一个点与一个面是否相等。
DROP TABLE IF EXISTS points_table;
CREATE TABLE points_table (
id INT PRIMARY KEY AUTO_INCREMENT,
pt POINT NOT NULL
);
INSERT INTO points_table (pt) VALUES (POINT(0, 0)), (POINT(1, 1));
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, 1), POINT(1, 1), POINT(1, 0), POINT(0, 0)))), (POLYGON(LINESTRING(POINT(1, 1), POINT(1, 2), POINT(2, 2), POINT(2, 1), POINT(1, 1))));
SELECT p.id, po.id, ST_EQUALS(p.pt, po.poly) AS equals
FROM points_table p
CROSS JOIN polygons_table po;
以下是该语句的输出:
+----+----+--------+
| id | id | equals |
+----+----+--------+
| 1 | 1 | 0 |
| 2 | 1 | 0 |
| 1 | 2 | 0 |
| 2 | 2 | 0 |
+----+----+--------+
可以看到,点与面都是不相等的,所以返回 0 或 false。
比较两个面是否相等
本实例演示了如何比较两个面是否相等。
DROP TABLE IF EXISTS polygons1;
CREATE TABLE polygons1 (
id INT PRIMARY KEY AUTO_INCREMENT,
poly POLYGON NOT NULL
);
INSERT INTO polygons1 (poly) VALUES (POLYGON(LINESTRING(POINT(0, 0), POINT(0, 1), POINT(1, 1), POINT(1, 0), POINT(0, 0)))), (POLYGON(LINESTRING(POINT(1, 1), POINT(1, 2), POINT(2, 2), POINT(2, 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(0, 0), POINT(0, 1), POINT(1, 1), POINT(1, 0), POINT(0, 0)))), (POLYGON(LINESTRING(POINT(2, 2), POINT(2, 3), POINT(3, 3), POINT(3, 2), POINT(2, 2))));
SELECT p1.id, p2.id, ST_EQUALS(p1.poly, p2.poly) AS equals
FROM polygons1 p1
CROSS JOIN polygons2 p2;
以下是该语句的输出:
+----+----+--------+
| id | id | equals |
+----+----+--------+
| 1 | 1 | 1 |
| 2 | 1 | 0 |
| 1 | 2 | 0 |
| 2 | 2 | 0 |
+----+----+--------+
可以看到,只有第一个比较中的两个面相等,所以返回 1 或 true;其他情况都返回 0 或 false。
相关函数
以下是几个与 MairaDB ST_EQUALS()
相关的几个函数:
- MariaDB
ST_DISJOINT()
函数用来检测两个几何对象是否不相交。 - MariaDB
ST_Intersects()
函数用来检测两个几何对象是否相交。 - MariaDB
ST_Touches()
函数用来检测两个几何对象是否相交且交集为边界。 - MariaDB
ST_Crosses()
函数用来检测两个几何对象是否相交且交集为 0 维。
结论
MariaDB ST_EQUALS()
函数是一个非常有用的函数,可以检测两个几何对象是否相等。通过本文的实例,我们学习了如何使用该函数比较不同类型的几何对象是否相等,以及一些异常情况下的返回值。同时,我们还了解了一些与该函数相关的其他几何函数。掌握这些函数有助于我们更好地处理和操作空间数据,尤其是需要比较几何对象是否相等时。