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

MariaDB ST_SYMDIFFERENCE() 函数用来返回两个几何体之间的对称差集。

发布于

MariaDB ST_SYMDIFFERENCE() 函数用来返回两个几何体之间的对称差集。对称差集是由两个几何体中独占区域构成的几何体。它常用于地理信息系统(GIS)应用程序中,用于处理和分析空间数据。

语法

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

ST_SYMDIFFERENCE(g1, g2)
  • g1:表示第一个几何体。
  • g2:表示第二个几何体。

函数返回一个几何体值,表示两个输入几何体的对称差集。

实例

计算两个点的对称差集

本实例展示了如何使用 ST_SYMDIFFERENCE() 函数计算两个点的对称差集。

SELECT ST_AsText(ST_SYMDIFFERENCE(
  ST_GeomFromText('POINT(1 1)'), 
  ST_GeomFromText('POINT(2 2)')))
AS sym_diff;

以下是该语句的输出:

+---------------------+
| sym_diff            |
+---------------------+
| MULTIPOINT(1 1,2 2) |
+---------------------+

由于两个点没有重叠部分,因此对称差集包含了两个输入点。

计算两个线的对称差集

本实例展示了如何使用 ST_SYMDIFFERENCE() 函数计算两条线的对称差集。

SELECT ST_AsText(ST_SYMDIFFERENCE(
  ST_GeomFromText('LINESTRING(1 1, 2 2)'), 
  ST_GeomFromText('LINESTRING(2 2, 3 3)')))
AS sym_diff;  

以下是该语句的输出:

+---------------------+
| sym_diff            |
+---------------------+
| LINESTRING(1 1,3 3) |
+---------------------+

由于两条线只在点 (2 2) 处相交,因此对称差集包含了两条线中不重叠的部分。

计算一个多边形和一条线的对称差集

本实例展示了如何使用 ST_SYMDIFFERENCE() 函数计算一个多边形和一条线的对称差集。

DROP TABLE IF EXISTS polygons;
CREATE TABLE polygons (id INT, poly POLYGON);
INSERT INTO polygons VALUES
  (1, ST_GeomFromText('POLYGON((0 0, 4 0, 4 4, 0 4, 0 0))')),
  (2, ST_GeomFromText('POLYGON((2 2, 6 2, 6 6, 2 6, 2 2))'));

SELECT id, ST_AsText(ST_SYMDIFFERENCE(poly, ST_GeomFromText('LINESTRING(1 1, 5 5)'))) AS sym_diff
FROM polygons;

以下是该语句的输出:

+------+------------------------------------------------------------------------+
| id   | sym_diff                                                               |
+------+------------------------------------------------------------------------+
|    1 | GEOMETRYCOLLECTION(POLYGON((0 0,0 4,4 4,4 0,0 0)),LINESTRING(4 4,5 5)) |
|    2 | GEOMETRYCOLLECTION(LINESTRING(1 1,2 2),POLYGON((2 2,2 6,6 6,6 2,2 2))) |
+------+------------------------------------------------------------------------+

在这个例子中,第一行的对称差集由两个多边形组成,第二行的对称差集由一个多边形和一个矩形组成。

计算两个多边形的对称差集

本实例展示了如何使用 ST_SYMDIFFERENCE() 函数计算两个多边形的对称差集。

DROP TABLE IF EXISTS poly_tbl;
CREATE TABLE poly_tbl (id INT, poly POLYGON);
INSERT INTO poly_tbl VALUES
  (1, ST_GeomFromText('POLYGON((0 0, 4 0, 4 4, 0 4, 0 0))')),
  (2, ST_GeomFromText('POLYGON((2 2, 6 2, 6 6, 2 6, 2 2))'));

SELECT ST_AsText(ST_SYMDIFFERENCE(p1.poly, p2.poly)) AS sym_diff
FROM poly_tbl p1, poly_tbl p2
WHERE p1.id = 1 AND p2.id = 2;

以下是该语句的输出:

+-------------------------------------------------------------------------------+
| sym_diff                                                                      |
+-------------------------------------------------------------------------------+
| MULTIPOLYGON(((0 0,0 4,2 4,2 2,4 2,4 0,0 0)),((4 2,4 4,2 4,2 6,6 6,6 2,4 2))) |
+-------------------------------------------------------------------------------+

在这个例子中,对称差集由两个多边形组成,分别是两个输入多边形中独占的区域。

当传入空值时的行为

当传入空值时,ST_SYMDIFFERENCE() 函数将返回 NULL。

SELECT ST_AsText(ST_SYMDIFFERENCE(
  ST_GeomFromText('LINESTRING(1 1, 2 2)'), 
  NULL))
AS sym_diff;

以下是该语句的输出:

+----------+
| sym_diff |
+----------+
| NULL     |
+----------+

相关函数

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

  • MariaDB ST_Union() 函数用来计算两个几何体的并集。
  • MariaDB ST_Intersection() 函数用来计算两个几何体的交集。
  • MariaDB ST_Difference() 函数用来计算第一个几何体中不被第二个几何体覆盖的部分。
  • MariaDB ST_SymDifference() 函数是 ST_SYMDIFFERENCE() 的别名。

结论

MariaDB ST_SYMDIFFERENCE() 函数是地理信息系统(GIS)应用程序中一个非常有用的函数,它可以计算两个几何体之间的对称差集。本文介绍了该函数的语法、用法实例以及相关函数。通过本文的学习,您应该能够熟练地使用 ST_SYMDIFFERENCE() 函数来处理和分析空间数据。