添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

CONVEXHULL() 函数的语法如下:

CONVEXHULL(g)

其中, g 是要转换的几何集合,可以是任何有效的 MariaDB 几何值,比如 POINT LINESTRING POLYGON MULTIPOINT MULTILINESTRING MULTIPOLYGON GEOMETRYCOLLECTION 等。

下面我们来看一些使用 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() 函数还支持一些特殊的参数,比如 SRID EMPTY NULL 等,用于处理一些特定的场景。例如:

  • 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() 函数还支持一些特殊的参数,比如 SRID EMPTY NULL 等,用于处理一些特定的场景。MariaDB 还提供了一些其他的地理函数,用于处理空间数据,比如 ST_AREA() ST_CONTAINS() ST_DISTANCE() 等。