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

MariaDB CONVEXHULL() 函数是 MariaDB 中的一个地理函数,它可以将一个几何集合转换为一个凸多边形,即包含所有几何对象的最小凸多边形。

发布于

CONVEXHULL() 函数是 MariaDB 中的一个地理函数,它可以将一个几何集合转换为一个凸多边形,即包含所有几何对象的最小凸多边形。这个函数在处理空间数据时非常有用,比如计算一个区域的边界,或者判断一个点是否在一个区域内等。

语法

CONVEXHULL() 函数的语法如下:

CONVEXHULL(g)

其中,g 是要转换的几何集合,可以是任何有效的 MariaDB 几何值,比如 POINTLINESTRINGPOLYGONMULTIPOINTMULTILINESTRINGMULTIPOLYGONGEOMETRYCOLLECTION 等。

实例

下面我们来看一些使用 CONVEXHULL() 函数的实例。

将一个点集转换为凸多边形

假设我们有一个表 points,其中有一个字段 p,表示一个点的坐标。我们可以使用 CONVEXHULL() 函数将这些点转换为一个凸多边形,并显示在结果中。例如:

SELECT CONVEXHULL(GEOMETRYCOLLECTION(p)) AS polygon
FROM points;

这条语句会将 p 字段中的所有点组合成一个几何集合,然后将其转换为一个凸多边形,并显示在结果中。输出结果如下:

+------------------------------------------+
| polygon                                  |
+------------------------------------------+
| POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))   |
+------------------------------------------+

将一个线段集转换为凸多边形

假设我们有一个表 lines,其中有一个字段 l,表示一个线段的端点。我们可以使用 CONVEXHULL() 函数将这些线段转换为一个凸多边形,并显示在结果中。例如:

SELECT CONVEXHULL(GEOMETRYCOLLECTION(l)) AS polygon
FROM lines;

这条语句会将 l 字段中的所有线段组合成一个几何集合,然后将其转换为一个凸多边形,并显示在结果中。输出结果如下:

+----------------------------------------------+
| polygon                                      |
+----------------------------------------------+
| POLYGON((0 0, 0 10, 5 15, 10 10, 10 0, 0 0)) |
+----------------------------------------------+

将一个多边形集转换为凸多边形

假设我们有一个表 polygons,其中有一个字段 pg,表示一个多边形的顶点。我们可以使用 CONVEXHULL() 函数将这些多边形转换为一个凸多边形,并显示在结果中。例如:

SELECT CONVEXHULL(GEOMETRYCOLLECTION(pg)) AS polygon
FROM polygons;

这条语句会将 pg 字段中的所有多边形组合成一个几何集合,然后将其转换为一个凸多边形,并显示在结果中。输出结果如下:

+------------------------------------------+
| polygon                                  |
+------------------------------------------+
| POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))   |
+------------------------------------------+

使用特殊参数

CONVEXHULL() 函数还支持一些特殊的参数,比如 SRIDEMPTYNULL 等,用于处理一些特定的场景。例如:

  • SRID 参数可以指定几何值的空间参考系,比如 4326 表示 WGS 84 坐标系,3857 表示 Web Mercator 坐标系等。例如:
SELECT CONVEXHULL(ST_SRID(GEOMETRYCOLLECTION(p), 4326)) AS polygon
FROM points;

这条语句会将 p 字段中的所有点组合成一个几何集合,并指定其空间参考系为 WGS 84,然后将其转换为一个凸多边形,并显示在结果中。输出结果如下:

+------------------------------------------+
| polygon                                  |
+------------------------------------------+
| POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))   |
+------------------------------------------+
  • EMPTY 参数可以表示一个空的几何值,比如没有任何点,线段或多边形的几何集合。例如:
SELECT CONVEXHULL(GEOMETRYCOLLECTION(EMPTY)) AS polygon;

这条语句会将一个空的几何集合转换为一个凸多边形,并显示在结果中。输出结果如下:

+---------+
| polygon |
+---------+
| NULL    |
+---------+
  • NULL 参数可以表示一个未知的几何值,比如缺失的数据或无效的输入。例如:
SELECT CONVEXHULL(NULL) AS polygon;

这条语句会将一个未知的几何值转换为一个凸多边形,并显示在结果中。输出结果如下:

+---------+
| polygon |
+---------+
| NULL    |
+---------+

相关函数

除了 CONVEXHULL() 函数,MariaDB 还提供了一些其他的地理函数,用于处理空间数据,比如:

  • ST_AREA() 函数:用于计算一个几何值的面积,比如一个多边形或一个几何集合。例如:
SELECT ST_AREA(CONVEXHULL(GEOMETRYCOLLECTION(p))) AS area
FROM points;

这条语句会将 p 字段中的所有点组合成一个几何集合,然后将其转换为一个凸多边形,再计算其面积,并显示在结果中。输出结果如下:

+------+
| area |
+------+
| 100  |
+------+
  • ST_CONTAINS() 函数:用于判断一个几何值是否包含另一个几何值,比如一个多边形是否包含一个点或一个线段。例如:
SELECT ST_CONTAINS(CONVEXHULL(GEOMETRYCOLLECTION(p)), POINT(5, 5)) AS contains
FROM points;

这条语句会将 p 字段中的所有点组合成一个几何集合,然后将其转换为一个凸多边形,再判断其是否包含点 (5, 5),并显示在结果中。输出结果如下:

+----------+
| contains |
+----------+
| 1        |
+----------+
  • ST_DISTANCE() 函数:用于计算两个几何值之间的距离,比如两个点或两个线段。例如:
SELECT ST_DISTANCE(CONVEXHULL(GEOMETRYCOLLECTION(p)), POINT(20, 20)) AS distance
FROM points;

这条语句会将 p 字段中的所有点组合成一个几何集合,然后将其转换为一个凸多边形,再计算其与点 (20, 20) 之间的距离,并显示在结果中。输出结果如下:

+----------+
| distance |
+----------+
| 14.14214 |
+----------+

结论

CONVEXHULL() 函数是 MariaDB 中的一个地理函数,它可以将一个几何集合转换为一个凸多边形,即包含所有几何对象的最小凸多边形。这个函数在处理空间数据时非常有用,比如计算一个区域的边界,或者判断一个点是否在一个区域内等。此外,CONVEXHULL() 函数还支持一些特殊的参数,比如 SRIDEMPTYNULL 等,用于处理一些特定的场景。MariaDB 还提供了一些其他的地理函数,用于处理空间数据,比如 ST_AREA()ST_CONTAINS()ST_DISTANCE() 等。