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

MariaDB ST_ENVELOPE() 函数用来获取一个几何对象的最小 boundingbox,也称为最小外包矩形。

发布于

MariaDB ST_ENVELOPE() 函数用来获取一个几何对象的最小 boundingbox,也称为最小外包矩形。该函数接受任意几何对象作为输入,并返回一个多边形对象,表示能完全包含输入几何对象的最小矩形。

语法

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

ST_ENVELOPE(geom)

参数说明:

  • geom:接受任意几何值。

返回值:

  • 如果输入的几何值为空值,则返回 NULL。
  • 否则返回一个多边形对象,表示能完全包含输入几何对象的最小外包矩形。

实例

获取点的最小 boundingbox

本实例演示了如何获取一个点的最小 boundingbox。

SELECT ST_AsText(ST_ENVELOPE(POINT(1, 1))) AS envelope;

以下是该语句的输出:

+--------------------------------+
| envelope                       |
+--------------------------------+
| POLYGON((1 1,1 1,1 1,1 1,1 1)) |
+--------------------------------+

可以看到,对于一个点,它的最小 boundingbox 就是该点本身。

获取线串的最小 boundingbox

本实例演示了如何获取一个线串的最小 boundingbox。

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), POINT(2, 2))), (LINESTRING(POINT(3, 3), POINT(4, 4)));

SELECT id, ST_AsText(ST_ENVELOPE(ln)) AS envelope
FROM lines_table;

以下是该语句的输出:

+----+--------------------------------+
| id | envelope                       |
+----+--------------------------------+
|  1 | POLYGON((0 0,2 0,2 2,0 2,0 0)) |
|  2 | POLYGON((3 3,4 3,4 4,3 4,3 3)) |
+----+--------------------------------+

可以看到,ST_ENVELOPE() 函数返回了每个线串的最小 boundingbox。

获取多边形的最小 boundingbox

本实例演示了如何获取一个多边形的最小 boundingbox。

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, 3), POINT(3, 3), POINT(3, 0), POINT(0, 0)))), (POLYGON(LINESTRING(POINT(1, 1), POINT(1, 4), POINT(4, 4), POINT(4, 1), POINT(1, 1))));

SELECT id, ST_AsText(ST_ENVELOPE(poly)) AS envelope
FROM polygons_table;

以下是该语句的输出:

+----+--------------------------------+
| id | envelope                       |
+----+--------------------------------+
|  1 | POLYGON((0 0,3 0,3 3,0 3,0 0)) |
|  2 | POLYGON((1 1,4 1,4 4,1 4,1 1)) |
+----+--------------------------------+

可以看到,ST_ENVELOPE() 函数返回了每个多边形的最小 boundingbox。

获取多几何对象的最小 boundingbox

本实例演示了如何获取一个多几何对象的最小 boundingbox。

DROP TABLE IF EXISTS geometries_table;
CREATE TABLE geometries_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    geom GEOMETRY NOT NULL
);
INSERT INTO geometries_table (geom) VALUES (MULTIPOINT(POINT(0, 0), POINT(1, 1), POINT(2, 2))), (MULTILINESTRING(LINESTRING(POINT(3, 3), POINT(4, 4)), LINESTRING(POINT(5, 5), POINT(6, 6)))), (MULTIPOLYGON(POLYGON(LINESTRING(POINT(0, 0), POINT(0, 3), POINT(3, 3), POINT(3, 0), POINT(0, 0))), POLYGON(LINESTRING(POINT(4, 4), POINT(4, 7), POINT(7, 7), POINT(7, 4), POINT(4, 4)))));

SELECT id, ST_AsText(ST_ENVELOPE(geom)) AS envelope
FROM geometries_table;

以下是该语句的输出:

+----+--------------------------------+
| id | envelope                       |
+----+--------------------------------+
|  1 | POLYGON((0 0,2 0,2 2,0 2,0 0)) |
|  2 | POLYGON((3 3,6 3,6 6,3 6,3 3)) |
|  3 | POLYGON((0 0,7 0,7 7,0 7,0 0)) |
+----+--------------------------------+

可以看到,对于多几何对象,ST_ENVELOPE() 函数返回了能完全包含所有几何对象的最小 boundingbox。

相关函数

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

  • MariaDB ST_Area() 函数用来计算一个几何对象的面积。
  • MariaDB ST_Centroid() 函数用来获取一个几何对象的质心。
  • MariaDB ST_Dimension() 函数用来获取一个几何对象的维数。
  • MariaDB ST_Length() 函数用来计算一个几何对象的长度。

结论

MariaDB ST_ENVELOPE() 函数是一个非常有用的函数,可以获取一个几何对象的最小 boundingbox。通过本文的实例,我们学习了如何使用该函数获取不同类型的几何对象的最小 boundingbox,以及一些异常情况下的返回值。同时,我们还了解了一些与该函数相关的其他几何函数。掌握这些函数有助于我们更好地处理和操作空间数据,尤其是需要计算几何对象的边界范围时。