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

MariaDB ST_CONVEXHULL() 函数用来计算一组点的凸包(convex hull)。凸包是最小的凸多边形,该多边形包含了所有给定的点。

发布于

MariaDB ST_CONVEXHULL() 函数用来计算一组点的凸包(convex hull)。凸包是最小的凸多边形,该多边形包含了所有给定的点。此函数常用于空间分析和计算几何形状的包络线等领域。

语法

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

ST_CONVEXHULL(g)
  • g:接收一个几何值,可以是 MULTIPOINTLINESTRINGMULTILINESTRING

此函数将返回一个表示所有输入点凸包的 POLYGON 值。如果输入为空或无效几何值,则返回 NULL

实例

计算几个点的凸包

本实例将展示如何计算几个点的凸包。

SET @mp = MULTIPOINT(POINT(2, 2), POINT(2, 18), POINT(16, 4), POINT(16, 16));
SELECT ST_AsText(ST_CONVEXHULL(@mp));

以下是该语句的输出:

+------------------------------------+
| ST_AsText(ST_CONVEXHULL(@mp))      |
+------------------------------------+
| POLYGON((2 2,2 18,16 16,16 4,2 2)) |
+------------------------------------+

这个例子中,我们首先创建了一个包含几个点的表,然后使用 ST_CONVEXHULL() 函数计算了这些点的凸包。结果显示,这些点的凸包是一个多边形。

计算线串的凸包

本实例将展示如何计算一条线串的凸包。

SELECT ST_AsText(ST_CONVEXHULL(MULTILINESTRING(LINESTRING(POINT(2, 2), POINT(2, 18))))) AS convex_hull;

以下是该语句的输出:

+----------------------+
| convex_hull          |
+----------------------+
| LINESTRING(2 2,2 18) |
+----------------------+

在这个例子中,我们创建了一条线串,然后使用 ST_CONVEXHULL() 函数计算了这个线串的凸包。 包相同。

计算多点的凸包

本实例将展示如何计算一组多点的凸包。

DROP TABLE IF EXISTS multipoints;
CREATE TABLE multipoints (
  id INT PRIMARY KEY AUTO_INCREMENT,
  g MULTIPOINT NOT NULL
);

INSERT INTO multipoints (g) VALUES
  (MULTIPOINT(POINT(2, 2), POINT(2, 18), POINT(16, 4), POINT(16, 16))),
  (MULTIPOINT(POINT(4, 4), POINT(4, 14), POINT(10, 6), POINT(10, 12)));

SELECT ST_AsText(ST_CONVEXHULL(g)) AS convex_hull
FROM multipoints;

以下是该语句的输出:

+------------------------------------+
| convex_hull                        |
+------------------------------------+
| POLYGON((2 2,2 18,16 16,16 4,2 2)) |
| POLYGON((4 4,4 14,10 12,10 6,4 4)) |
+------------------------------------+

在这个例子中,我们创建了一个包含多个 MULTIPOINT 值的表,然后使用 ST_CONVEXHULL() 函数分别计算了每个 MULTIPOINT 的凸包。结果显示,每个 MULTIPOINT 的凸包都是一个多边形。

计算混合几何集合的凸包

本实例将展示如何计算包含点、线串和多点的混合几何集合的凸包。

DROP TABLE IF EXISTS geometries;
CREATE TABLE geometries (
  id INT PRIMARY KEY AUTO_INCREMENT,
  g GEOMETRY NOT NULL
);

INSERT INTO geometries (g) VALUES
  (POINT(2, 2)),
  (LINESTRING(POINT(2, 18), POINT(16, 16))),
  (MULTIPOINT(POINT(16, 4), POINT(16, 16)));

SELECT ST_AsText(ST_CONVEXHULL(MULTIPOINT(g))) AS convex_hull
FROM geometries;

以下是该语句的输出:

+-------------+
| convex_hull |
+-------------+
| POINT(2 2)  |
| NULL        |
| NULL        |
+-------------+

在这个例子中,我们创建了一个包含点、线串和多点的混合几何集合的表,然后使用 ST_CONVEXHULL() 函数计算了这些几何对象的凸包。

相关函数

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

  • MariaDB ST_ENVELOPE() 函数用来计算一个几何对象的最小矩形边界框。
  • MariaDB ST_BOUNDARY() 函数用来计算一个几何对象的边界。
  • MariaDB ST_UNION() 函数用来计算几个几何对象的并集。
  • MariaDB ST_INTERSECTION() 函数用来计算几个几何对象的交集。

结论

MariaDB ST_CONVEXHULL() 函数是一个非常有用的空间分析函数,可以计算一组点或线串的凸包。它广泛应用于地理信息系统、计算机视觉和其他需要处理空间数据的领域。通过本文提供的语法介绍和实例,您应该已经掌握了如何使用这个函数以及它的常见用法。如果您需要处理更复杂的空间数据或执行更高级的空间分析,可以进一步探索 MariaDB 提供的其他空间函数。